You are here:  Home » 量化交易与机器学习 » backtrader » 视觉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", ...)
    

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.DJIEurope/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

Passingfromdatetodate给定的的day而非时间默认的00:00:00似乎在COMAPI和酒吧任何创建过滤器天将只给出time.

As后交付这样的:

  • 请把只全datesVCData如在:
    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, Seconds1 Day

    The同一给定的时间周期3该SecondsMicroSeconds是不是直接由Visual Chart支持,并通过重采样完成Ticks

  • Minutes2 Days
  • Days1 year
  • Weeks2 years
  • Months5 years
  • Months20 years

The定义回填周期被请求compression相乘,那就是:如果timeframeMinutescompression是5的最终backfilling period是:2 days * 5 -> 10 days

交易data

Visual Chart报价连续futures。无需人工管理和您所选择的未来可以不间断进行跟踪。这是一优势,提出了一个小的挑战:

  • ES-Mini001ES,但实际交易的资产(例如:九月-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数据馈送将经由一个或多个以下的报告当前状态(检查CerebroStrategy参考)

  • 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 Orderobjects

Order执行Types

Visual Chart支持所需的最低序执行类型backtrader,因此,anyhing其是回测可以去live.

As这样的顺序执行类型仅限于在可用的那些broker simulation

  • Order.Market
  • Order.Close
  • Order.Limit
  • Order.Stop(在Stop被触发时一个Market顺序如下)
  • Order.StopLimit(在Stop是当引发了Limit顺序如下)回测(与

期间可用

订购ValidityvalidThe同等法律效力的概念buysell)是可用且与相同的含义。因此,valid参数被转换为Visual Chart Orders为如下以下值:

  • None转换为Good Til Cancelled

    因为没有效力已规定可以理解,顺序必须有效期至cancelled

  • datetime/date转化为Good Til Date

    Note

    Beware:Visual Chart它仅支持“全日期”和time部分discarded.

  • timedelta(x)转换为Good Til Date(这里timedelta(x) !=
    timedelta()

    Note

    Beware:Visual Chart确实只支持全datestime部分discarded.

    This被解释为一个信号,具有一个顺序从有效now+timedelta(x)

  • timedelta() or 0转换为Session

    的值已经过去(而不是None),但是Null和是解释为顺序适用于电流day(会话)

Notifications

The标准Order状态将被通知给strategy在方法notify_order(如果覆盖)

  • Submitted – 订单已发送到TWS
  • Accepted – 订单已placed
  • Rejected – 下订单失败或通过取消在系统其lifetime
  • Partial – 的部分执行已采取place
  • Completed – 订单已经完全executed
  • Canceled(或Cancelled
  • Expired -未报即呢。启发式将需要区分Cancelled

Reference

VCStore

class backtrader.stores.VCStore(这个状态)

Singleton类包装的ibpy ibConnection instance.

The参数也可以在其中使用此存储的类指定,像VCDataVCBroker

VCBroker

class backtrader.brokers.VCBroker(** kwargs)

经纪人实施VisualChart.

This类映射命令/位置从VisualChart到的backtrader.

PARAMS内部API:

  • account(默认值:无)

    VisualChart在代理上同时支持多个帐户。如果默认的None是发生在ComTrader的1st帐户Accounts系列将于used.

    If提供的账户名,Accounts集合会检查,如果present

  • commission使用(默认值:无)

    如果没有佣金的方案作为传递的对象将被自动生成parameter

    See下面进一步explanations

Notes

  • Position

VisualChart报告通过ComTrader“OpenPositions”更新接口,但只有当位置有一个“大小”。要更新表明已经移动到零的位置是由缺少的报道这样的位置。这迫使通过保持位置的会计看执行事件,就像VisualChart的模拟经纪人does

  • Commission

The ComTrader接口不报告和佣金作为这样的自动生成CommissionInfo对象不能使用不存在佣金恰当地考虑他们。为了支持佣金commission参数必须与传递相应的佣金schemes.

The对委员会计划文件详细说明了如何做this

  • Expiration Timing

The ComTrader接口(或者是它的comtypes模块?)丢弃timedatetime的对象的信息和到期日期是总是充满dates.

  • Expiration Reporting

目前没有启发式到位,以确定何时取消订单已因到期取消。因此过期订单报告为cancelled.

VCData

class backtrader.feeds.VCData(** kwargs)

VisualChart数据Feed.

Params:

  • qcheck(默认:0.5)用于唤醒,让重采样/回放器默认的超时了电流条可以检查由于delivery

    The值仅用于如果重新采样/重放的过滤器已插入data

  • historical(默认值:False)如果没有todate参数被提供(在基类定义),这将迫使如果设置为历史只下载True

    如果todate提供同样的效果是achieved

  • milliseconds(默认:True)通过Visual Chart构建的酒吧有这方面:HH:MM:59.999000

    If这个参数是True一毫秒将被添加到了这个时候以使它看起来像:HH :: MM + 1:00.000000

  • tradename(默认:None)连续期货不能买卖,但理想的数据跟踪。如果这样的参数时,将是当前今后的名称这将是交易的资产。例如:
    • <>353<>dataname
    • <>354<>tradename它将交易asset.
  • usetimezones(默认:True)对于大多数市场的时间偏移Visual Chart提供的信息允许日期时间转换为市场时间(backtrader的选择为代表)

    有些市场是特殊的(096)和需要特殊的内部覆盖和时区的支持,在用户预期的市场time.

    If这个参数设置为True进口pytz将会试图使用的时区(默认)

    禁止它会删除时区的使用(可以帮助如果负载excesive)