视觉Chart- backtrader中文教程
与视力表视力Chart
The集成支持:
- Live Datafeeding
- Live Trading
Visual Chart是一个完整的交易解决方案:
- 集成图表,数据Feed和经纪单platform
欲了解更多信息,请访问:www.visualchart.com
Requirements
- VisualChart 6
- Windows – 一个VisualChart运行on
comtypes
叉:https://开头github.com /冲力/ comtypes与安装它:
pip install
https://github.com/mementum/comtypes/archive/master.zip`的Visual ChartAPI是基于COM.
目前
comtypes
主支不支持开箱VT_ARRAYS
`VT_RECORD
。这就是使用Visual Chart拉请求#104已经提交但尚未整合。只要它是集成的,在主枝可以used.
pytz
(可选,但真的推荐)为了确保每个数据都在市场时间内返回。
对于大多数市场而言,这是正确的,但实际上确实是一个例外(
Global Indices
作为一个很好的例子)Visual Chart内部的时间管理及其与COM上的交付时间的关系很复杂,并且
pytz
趋于简化。
样品Code
The源包含下一个完整的示例:
samples/vctest/vctest.py
样品不能涵盖所有可能的使用情况,但它试图提供广阔洞察力和应该突出有没有真正的区别,当涉及到使用回溯测试模块或实时数据module
One东西可能是针指出:
- 的
data.LIVE
数据状态之前的任何通知的样品等待交易活动发生place.This可能会被一些在任何现场strategy
VCStore考虑 – 在store
The店是实时数据馈送/贸易的基石支持,提供一个之间适配的层中的COMAPI和一个数据供给的需求和经纪人proxy.
- Providesaccess得到一个broker实例与方法:
VCStore.getbroker(*args, **kwargs)
- 提供访问吸气剂data饲料instances
VCStore.getedata(*args, **kwargs)
在这种情况下,许多的
**kwargs
是常见的数据输入像dataname
,fromdate
,todate
,sessionstart
,sessionend
,
timeframe
,compression
的数据可以提供其它PARAMS。检查参考below.
TheVCStore
将尝试:
- 自动定位VisualChart在使用该系统的Windows
Registry- 如果找到,安装目录将扫描的COM的DLL创造了COM typelibs并且能够实例化适当的objects
- If没有找到,那么将尝试与已知的和硬编码制作CLSIDs做same.
Note
Even如果DLL文件可以通过扫描文件系统中找到,Visual Chart本身具有运行。backtrader将无法启动Visual Chart
的VCStore
其他职责:
- 保持的’连接状态一般轨道Visual Chart到
Resampling
:server
VCData feedsVisual ChartGeneral
- The数据饲料中有一些有趣的性质提供`由platform
Not在所有情况下完成的:Seconds不支持,还有待所做backtrader
这样只有用秒做一些事情的时候会最终用户需求要做到:
vcstore = bt.stores.VCStore() vcstore.getdata(dataname="015ES", timeframe=bt.TimeFrame.Ticks) cerebro.resampledata(data, timeframe=bt.TimeFrame.Seconds, compression=5)
在所有其他情况下,它是足够用:
vcstore = bt.stores.VCStore() data = vcstore.getdata(dataname="015ES", timeframe=bt.TimeFrame.Minutes, compression=2) cerebro.addata(data)
数据将计算timeoffset
内部通过比较内部设备时钟和ticks
通过该平台,以交付给交付automatically重采样棒尽早如果没有新的蜱来了in.
Instantiating数据:
- 传上看到左上方的VisualChart无符号空间。例如:
- ES-Mini被显示为
001 ES
。实例它:
data = vcstore.getdata(dataname="001ES", ...)
- EuroStoxx 50显示为
015 ES
。实例它:
data = vcstore.getdata(dataname="015ES", ...)
- ES-Mini被显示为
Note
backtrader将作出努力,并清除位于空白如果名称是直接从Visual Chart
时间management
The时间管理粘贴了第四的位置遵循的一般规则backtrader
- 给的时间Market时间,以确保代码不依赖于DST转换发生在不同的时间,使本地时间不可靠的时间comparisons.
This适用于大部分市场Visual Chart但一些具体的管理对于一些市场做:
- DATAS其中被命名为
096
这些都是理论上据报道,在时区的交流International Indices
.`
Europe/London
<>90<>
使用真实的timezones时间管理可以通过将启用参数usetimezones=True
。这种尝试使用pytz
如果有的话。它是没有必要,因为通过Visual
Chart允许无缝转换到市场time.
In任何情况下,它似乎是毫无意义的报告096.DJI
在Europe/London
当它实际上位于US/Eastern
时间。如这样backtrader
它会在晚些时候公布。在这种情况下使用pytz
比recommended.
Note
该Dow Jones Industrials指数(不是全球版)是位于099I-DJI
Note
所有这一切时间管理是一个DST期间,以待真正的考验过渡,其中本地和远程市场happend待出与关于DST.
List同步International Indices
的量,输出timezone在被定义VCDATA
:
"096.FTSE": "Europe/London", "096.FTEU3": "Europe/London", "096.MIB30": "Europe/Berlin", "096.SSMI": "Europe/Berlin", "096.HSI": "Asia/Hong_Kong", "096.BVSP": "America/Sao_Paulo", "096.MERVAL": "America/Argentina/Buenos_Aires", "096.DJI": "US/Eastern", "096.IXIC": "US/Eastern", "096.NDX": "US/Eastern",
小时间problem
Passingfromdate
或todate
给定的的day而非时间默认的00:00:00
似乎在COMAPI和酒吧任何创建过滤器天将只给出time.
As后交付这样的:
- 请把只全dates来
VCData
如在:data = vcstore.getdata(dataname="001ES", fromdate=datetime(2016, 5, 15))
而不是::
data = vcstore.getdata(dataname=‘001ES’, fromdate=datetime(2016, 5, 15, 8, 30))
回填时间lengths
If没有fromdate
是由最终用户指定的,该平台将自动尝试回填,并与现场数据矣。回填是时间范围相关的,并且是:
Ticks
,MicroSeconds
,Seconds
:1 DayThe同一给定的时间周期3该Seconds和MicroSeconds是不是直接由Visual Chart支持,并通过重采样完成Ticks
Minutes
:2 DaysDays
:1 yearWeeks
:2 yearsMonths
:5 yearsMonths
:20 years
The定义回填周期被请求compression
相乘,那就是:如果timeframe是Minutes
和compression是5的最终backfilling period是:2 days * 5 -> 10 days
交易data
Visual Chart报价连续futures。无需人工管理和您所选择的未来可以不间断进行跟踪。这是一优势,提出了一个小的挑战:
ES-Mini
是001ES
,但实际交易的资产(例如:九月-2016)是ESU16
.
为了克服这个问题,并允许一个策略来追踪continuous future和贸易的real asset以下数据可以期间指定实例:
data = vcstore.getdata(dataname="001ES", tradename="ESU16")
交易将发生在ESU16
,但数据料将是001ES
(中数据是属于3个月之久)
其他parameters
qcheck
(默认:0.5
秒)控制频率醒来说话到内部重采样器/回放器,以避免后期输送bars.The下列逻辑将被应用到用于该参数:
- 如果内部resampling/replaying检测到,则该值将被使用因为它没有is.
- If内部resampling/replaying检测到,数据馈送将没有醒来,因为没有报告to.
该数据料仍将唤醒检查Visual Chart内建的重采样器,但是这是自动controlled.
Data Notifications
The数据馈送将经由一个或多个以下的报告当前状态(检查Cerebro和Strategy参考)
Cerebro.notify_data
(如果重写)n- A回调addded与
Cerebro.adddatacb
Strategy.notify_data
(如果重写)
内部的一个例子的strategy:
class VCStrategy(bt.Strategy): def notify_data(self, data, status, *args, **kwargs): if status == data.LIVE: # the data has switched to live data # do something pass
以下通知将下列系统中的变化被发送:
CONNECTED
发送成功的初始connection
DISCONNECTED
在这种情况下检索数据不再可能,数据将指示系统没有什么可以做。可能病症:
- 重新连接尝试TWS exceeded
- Connectivity的历史download
- Number期间错合同specified
CONNBROKEN
Interruption已丢失要么TWS或数据农场。数据进料将尝试(经由存储)重新连接并回填,在需要的时候,以及恢复operations
NOTSUBSCRIBED
Contract和连接都OK,但数据不能由于检索缺乏permissions.
这些数据将表明,它不能检索data
DELAYED
Signaled,指示系统,一个historical/backfilling操作是在进度和数据由策略处理不是实时data
LIVE
Signaled,表明数据从这时开始进行处理由strategy是的
应该考虑的情况下采取哪些行动实时datastrategiesDevelopers像时的断开发生或接收时delayed data.
VCBroker – 交易Live
Using的broker
To使用VCBroker,标准的经纪人通过模拟创建的实例cerebro必须被replaced.
Using的Store模型(优选的):
import backtrader as bt cerebro = bt.Cerebro() vcstore = bt.stores.VCStore() cerebro.broker = vcstore.getbroker() # or cerebro.setbroker(...)
经纪人Parameters
Be它直接或通过getbroker
`的VCBroker
经纪人不支持参数。这是因为,经纪人只是代理到一个真正的Broker。什么真正的经纪人给予,不得被视为away.
Restrictions
Position
Visual Chart报告开放positions。这可用于大部分的时间控制实际位置,而是一个最终事件,指示一个Position具有被关闭是missing.
That使得义务教育backtrader保持的全面核算Position,并在您的account
Commission
The以往任何现有的位置分开COM交易界面不报告佣金。没有机会backtrader能够制造和受过教育的猜测,除非:
- 的broker被实例化与Commission指示实例,它佣金不采取实际place.
Trading与it
Account
Visual Chart支持在一个经纪人,同时几个账户。该选择的帐户可与参数进行控制:
account
(默认值:None
)VisualChart在代理上同时支持多个帐户。如果默认的
None
是发生在ComTrader的1st帐户Accounts
系列将于used.If提供的账户名,
Accounts
集合会检查,如果present
Opperations
There是关于该STANDAR使用没有变化。只需使用方法在战略上可用的(见全了Strategy
引用解释)
buy
sell
close
cancel
Order对象returned
- Standardbacktrader
Order
objects
Order执行Types
Visual Chart支持所需的最低序执行类型backtrader,因此,anyhing其是回测可以去live.
As这样的顺序执行类型仅限于在可用的那些broker simulation:
Order.Market
Order.Close
Order.Limit
Order.Stop
(在Stop被触发时一个Market顺序如下)Order.StopLimit
(在Stop是当引发了Limit顺序如下)回测(与
期间可用
订购Validityvalid
The同等法律效力的概念buy
和sell
)是可用且与相同的含义。因此,valid
参数被转换为Visual Chart Orders为如下以下值:
None
转换为Good Til Cancelled因为没有效力已规定可以理解,顺序必须有效期至cancelled
datetime/date
转化为Good Til DateNote
Beware:Visual Chart它仅支持“全日期”和time部分discarded.
timedelta(x)
转换为Good Til Date(这里timedelta(x) !=
)
timedelta()Note
Beware:Visual Chart确实只支持全dates和time部分discarded.
This被解释为一个信号,具有一个顺序从有效
now
+timedelta(x)
timedelta() or 0
转换为Session的值已经过去(而不是
None
),但是Null和是解释为顺序适用于电流day(会话)
Notifications
The标准Order
状态将被通知给strategy在方法notify_order
(如果覆盖)
Submitted
– 订单已发送到TWSAccepted
– 订单已placedRejected
– 下订单失败或通过取消在系统其lifetimePartial
– 的部分执行已采取placeCompleted
– 订单已经完全executedCanceled
(或Cancelled
)Expired
-未报即呢。启发式将需要区分Cancelled
Reference
VCStore
class backtrader.stores.VCStore(这个状态)
Singleton类包装的ibpy ibConnection instance.
The参数也可以在其中使用此存储的类指定,像VCData
和VCBroker
VCBroker
class backtrader.brokers.VCBroker(** kwargs)
经纪人实施VisualChart.
This类映射命令/位置从VisualChart到的backtrader
.
PARAMS内部API:
account
(默认值:无)VisualChart在代理上同时支持多个帐户。如果默认的
None
是发生在ComTrader的1st帐户Accounts
系列将于used.If提供的账户名,
Accounts
集合会检查,如果presentcommission
使用(默认值:无)如果没有佣金的方案作为传递的对象将被自动生成parameter
See下面进一步explanations
Notes
- Position
VisualChart报告通过ComTrader“OpenPositions”更新接口,但只有当位置有一个“大小”。要更新表明已经移动到零的位置是由缺少的报道这样的位置。这迫使通过保持位置的会计看执行事件,就像VisualChart的模拟经纪人does
- Commission
The ComTrader接口不报告和佣金作为这样的自动生成CommissionInfo对象不能使用不存在佣金恰当地考虑他们。为了支持佣金commission
参数必须与传递相应的佣金schemes.
The对委员会计划文件详细说明了如何做this
- Expiration Timing
The ComTrader接口(或者是它的comtypes模块?)丢弃time
从datetime
的对象的信息和到期日期是总是充满dates.
- Expiration Reporting
目前没有启发式到位,以确定何时取消订单已因到期取消。因此过期订单报告为cancelled.
VCData
class backtrader.feeds.VCData(** kwargs)
VisualChart数据Feed.
Params:
qcheck
(默认:0.5
)用于唤醒,让重采样/回放器默认的超时了电流条可以检查由于deliveryThe值仅用于如果重新采样/重放的过滤器已插入data
historical
(默认值:False
)如果没有todate
参数被提供(在基类定义),这将迫使如果设置为历史只下载True
如果
todate
提供同样的效果是achievedmilliseconds
(默认:True
)通过Visual Chart构建的酒吧有这方面:HH:MM:59.999000If这个参数是
True
一毫秒将被添加到了这个时候以使它看起来像:HH :: MM + 1:00.000000tradename
(默认:None
)连续期货不能买卖,但理想的数据跟踪。如果这样的参数时,将是当前今后的名称这将是交易的资产。例如:- <>353<>
dataname
- <>354<>
tradename
它将交易asset.
- <>353<>
usetimezones
(默认:True
)对于大多数市场的时间偏移Visual Chart提供的信息允许日期时间转换为市场时间(backtrader的选择为代表)有些市场是特殊的(
096
)和需要特殊的内部覆盖和时区的支持,在用户预期的市场time.If这个参数设置为
True
进口pytz
将会试图使用的时区(默认)禁止它会删除时区的使用(可以帮助如果负载excesive)