You are here:  Home » 量化交易与机器学习 » backtrader » 与盈透证券API互动Brokers- backtrader中文教程

盈透证券互动Brokers

The集成支持:

  • Live Datafeeding
  • Live Trading

Note

In尽管所有的尝试,以测试错误条件的最大数量和情况下,代码可以(像任何其他的软件)完全包含bugs.

Test任何战略与纸Trading账户或交易平台Demo前production.

Note

Interaction要与盈透证券通过使用IbPy模块完成并且这之前,使用安装。有一个在PyPI中没有包(以写作的时候),但它可以使用pip安装了下面的命令:(?Windows安装)

pip install git+https://github.com/blampe/IbPy.git

如果git是不是在你的系统中可用的以下也应努力:

pip install https://github.com/blampe/IbPy/archive/master.zip

样品Code

The源包含下一个完整的示例:

  • 样本/ ibtest / ibtest.py

样品不能涵盖所有可能的使用情况,但它试图提供广阔洞察力和应该突出有没有真正的区别,当涉及到使用回溯测试模块或实时数据module

One东西可能是针指出:

  • data.LIVE数据状态之前的任何通知的样品等待交易活动发生place.This可能会被一些在任何现场strategy

Store型号VS直接Model

Interaction与盈透证券认为通过2种型号的支持:

  1. 存储模型(Preferred
  2. 的数据进料类和经纪人class

The存储模型的直接相互作用提供了清晰的分离图案,当它归结至创建brokersdatas。两段代码应该作为一个更好example.

First与Store型号:

import backtrader as bt

ibstore = bt.stores.IBStore(host="127.0.0.1", port=7496, clientId=35)
data = ibstore.getdata(dataname="EUR.USD-CASH-IDEALPRO")

这里的参数:

  • host, portclientId是传递给它们所属的地方IBStore其打开使用这些parameters.

And然后data进料与getdata和共用的参数创建在backtrader

  • datanamewhic要求所有的数据输入的EUR/USD外汇pair.

And现在直接使用:

import backtrader as bt

data = bt.feeds.IBData(dataname="EUR.USD-CASH-IDEALPRO",
                       host="127.0.0.1", port=7496, clientId=35)

这里:

  • 用于商店传递到data.
  • Those参数将被用来建立一个IBStore比如在background

The缺点:

  • 少了很多透明度,因为它变得不清楚属于数据和属于什么store.

IBStore – 的store

The店是实时数据馈送/贸易支持的基石,提供一个之间适配的层中的IbPy模块和数据馈送的需要和代理proxy.

AStore是覆盖下列功能的一个概念:

  • 作为中央店的实体:在这种情况下,实体是IB这可能会或可能不会要求parameters
  • Providing得到一个broker实例与方法访问:
    • IBStore.getbroker(*args, **kwargs)
  • 可访问的getterdata饲料instances
    • IBStore.getdata(*args, **kwargs)

    In这种情况下,许多**kwargs是常见的数据输入像dataname, fromdate, todate, sessionstart, sessionend,
    timeframe, compression

    的数据可以提供其它PARAMS。检查参考below.

TheIBStore提供:

  • 连接目标(hostport参数)
  • 识别(clientId参数)
  • 重新连接控制(reconnecttimeout参数)
  • 时间偏移校验(timeoffset参数,见下文)
  • 通知和debuggingnotifyall(默认值:False):在这种情况下任何error消息(许多简单地提供信息)由IB发送将被中继到Cerebro/Strategy_debug(默认值:False):在这种情况下每一个消息从接收到的TWS将打印它直接或通过

到标准outpu

IBData feeds

Data OptionsgetdataBe`的IBData进料支持以下数据选项:

  • 如果持续时间超过历史下载requestsThese将多个请求分割比(通过IBtimeframe/compression)在3个flavors
  • 事件由IB对于给定的
    • tickPricecombinationreqMktDataRealTime数据施加的限制

    用于CASH产品(实验至少TWS API 9.70有显示了其他类型不支持)

    通过看tick价格,荣获了BID价格事件,根据非官方的网络文学似乎是办法跟踪CASH市场prices.

    Timestamps在系统中本地产生。偏移到IB如果由终端用户希望可以使用服务器时间reqCurrentTime(来自IB

    • tickString计算)`事件(又名RTVolume(经由IBreqMktData

    接收一个OHLC/Volume从IB大约每250毫秒的快照(或更高如果没有交易发生)

    • RealTimeBars事件(通过IBreqRealTimeBars

    荣获历史5秒条(持续时间由IB固定)每5 seconds

    If所选择的timeframe/combination是水平以下Seconds/5此功能将自动disabled.

    !note

      `RealTimeBars` do not work with the TWS Demo
    

    The默认行为是使用:tickString在大多数情况下,除非用户特别希望使用RealTimeBars

  • Backfilling除非用户请求只是做了historical下载,数据馈送会自动回填:
    • 在start:以最大可能的持续时间。例如:一Days/1timeframe/compression)组合的最大缺省持续时间在图1B是1 year,这是将要的时间量backfilled
    • After数据disconnection:在这种情况下的数据量下载用于回填操作将被降低到最小通过查看最新数据disconnection.

Note

考虑到最终的timeframe/compression采取组合考虑到可能并不期间data feed creation但中insertion<>132<>

data = ibstore.getdata(dataname="EUR.USD-CASH-IDEALPRO",
                       timeframe=bt.TimeFrame.Seconds, compression=5)

cerebro.resampledata(data, timeframe=bt.TimeFrame.Minutes, compression=2)

由于现在应该清楚,所采取的最后时间表/ compression组合考虑是分/ 2

Data合同Check

During开始阶段,data饲料会尝试下载的细节指定合约(见如何指定它的引用)。如果没有这样的合同被发现或多次找到匹配,数据将拒绝执行上,将其通知给系统。一些examples.

Simple但明确的合约规格:

data = ibstore.getdata(dataname="TWTR")  # Twitter

只有一个实例会被发现(2016-06),因为默认类型,STK,交换SMART和货币(默认为无)单在USD会found.

A类似的办法,就不会与合约的交易AAPL

data = ibstore.getdata(dataname="AAPL")  # Error -> multiple contracts

因为SMART找到几个真正的合同交流和AAPL交易在他们中的一些不同的货币。以下是确定的:

data = ibstore.getdata(dataname="AAPL-STK-SMART-USD")  # 1 contract found

数据Notifications

The数据料将通过一个或多个以下报告当前状态(检查CerebroStrategy参考)

  • Cerebro.notify_data(如果重写)n
  • A回调addded与Cerebro.adddatacb
  • Strategy.notify_data(如果重写)

内部的一个例子的strategy

class IBStrategy(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
  • DISCONNECTEDIn这种情况下检索所述数据不再是可能的,数据将指示系统没有什么可以做。可能病症:
    • 重新连接尝试TWS exceeded
    • Connectivity的历史download
    • Number期间错合同specified
  • CONNBROKENInterruption已丢失要么TWS或数据农场。数据进料将尝试(经由存储)重新连接并回填,在需要的时候,以及恢复operations
  • NOTSUBSCRIBEDContract和连接都OK,但数据不能由于检索缺乏permissions.The数据将指示系统,它不能检索data
  • DELAYEDSignaled,表明了historical/backfilling操作是在进度和数据由策略处理不是实时data
  • LIVESignaled,表明数据从这时开始进行处理由strategy

实时datastrategies应考虑的情况下采取哪些行动像时的断开发生或接收时delayed data.

Data时限和Compressions

Data在馈送backtrader生态系统,支持timeframecompression参数创建过程中。这些参数也可与属性data._timeframedata._compression

timeframe/compression的组合的意义具有特定的目的经由cerebro或数据whenpassing到resampledata实例replaydata,让内部重采样器/回放器对象来理解预期目标是什么。._timeframe._compression会在实时数据重采样/ replayed.

But当在数据覆盖,另一方面这些信息都可以发挥重要的饲料角色。请看下面的例子:

data = ibstore.getdata(dataname="EUR.USD-CASH-IDEALPRO",
                       timeframe=bt.TimeFrame.Ticks,
                       compression=1,  # 1 is the default
                       rtbar=True,  # use RealTimeBars
                      )
cerebro.adddata(data)

用户请求tick数据,这很重要,因为:

  • 没有回填将于(支持的最小单位通过IB是Seconds/1
  • 就算RealTimeBars请求并支持dataname,他们不会因为RealTimeBar的最小分辨率可使用是Seconds/5

在任何情况下,除非使用的分辨率工作Ticks/1,该数据必须是resampled/replayed。上面realtimebars和工作的情况下:

data = ibstore.getdata(dataname="TWTR-STK-SMART", rtbar=True)
cerebro.resampledata(data, timeframe=bt.TimeFrame.Seconds, compression=20)

。在这种情况下,和如上述解释的,._timeframe._compression的数据的属性将在resampledata被覆盖。这是会发生什么:

  • backfilling会发生请求的分辨率Seconds/20
  • RealTimeBars将被用于实时数据,因为该决议是等于/大于Seconds/5和数据支持是(没有CASH产品)
  • 从TWS事件记录到系统最多将每5秒发生。这是可能并不重要,因为该系统将只发送一个酒吧到策略每20 seconds.

The没有RealTimeBars一样的:

data = ibstore.getdata(dataname="TWTR-STK-SMART")
cerebro.resampledata(data, timeframe=bt.TimeFrame.Seconds, compression=20)

在这种情况下:

  • backfilling会发生请求的分辨率Seconds/20
  • tickString会被用于实时数据,因为(没有CASH产品)
  • 从TWS事件,系统将在每次最多250毫秒发生一次。这个可能是并不重要,因为该系统将只发送一个酒吧到策略每20 seconds.

Finally了CASH产品和长达20秒:

data = ibstore.getdata(dataname="EUR.USD-CASH-IDEALPRO")
cerebro.resampledata(data, timeframe=bt.TimeFrame.Seconds, compression=20)

在这种情况下:

  • backfilling会发生请求的`决议Seconds/20
  • tickPrice将被用于实时数据,因为这是一个现金productEven如果rtbar=True是added
  • Events从TWS系统将在每次最多250ms的发生。这是可能并不重要,因为该系统将只发送一个酒吧到策略每20 seconds.

Time Management

The数据料将自动确定从时区ContractDetailsTWS.

Note

This报告对象要求pytz安装。如果没有安装的用户应供给与tz参数到数据源中的tzinfo兼容实例为所需的输出timezone

Note

Ifpytz安装和用户感觉到自动时区判定不工作时,tz参数可包含与串时区的名称。backtrader会尝试实例化pytz.timezone给定name

The报道datetime将是相关的时区产品。一些例子:

  • Product:EuroStoxxx 50在欧洲期货交易(代码:ESTX50-YYYYMM-DTB)的时区将是CETCentral European Time)又名Europe/Berlin
  • Product:ES-赠送(代码:ES-YYYYMM-GLOBEX)的时区将是EST5EDT又名EST又名US/Eastern
  • Product:EUR.JPY外汇对(股票EUR.JPY-CASH-IDEALPRO)的时区将是EST5EDT又名EST又名US/Eastern实际上这是一个交互式经纪人设定,因为外汇交易对几乎24小时不中断,因此不会有一个真正的时区为them.

This行为可确保交易保持一致不管交易者的实际位置,因为计算机将极有可能实际位置时区,而不是交易venue.

请阅读时间Management的manual.

Note

交易平台演示是不是在报告时区为资产准确没有数据下载可用权限(将EuroStoxx 50未来的那些情况下的示例)

<>266<>

至于何时交付酒吧即时资讯提供一个设计决策是:

  • Deliver them as much in real-time as possible

这似乎是显而易见的,这是对的Ticks,但如果Resampling/Replaying发挥作用,延迟可能发生。使用案例:

  • 重采样被配置为Seconds/5与:
    cerebro.resampledata(data, timeframe=bt.TimeFrame.Seconds, compression=5)
    
  • 随时间的蜱23:05:27.325000是delivered
  • 市场交易缓慢,下一个节拍在交付23:05:59.025000

这可能似乎并不明显,但backtrader不知道交易是很慢而接下来的蜱将围绕进来32秒后。由于没有规定在地方与时间重采样的酒吧23:05:30.000000将交付围绕29 seconds太late.

<>281<>x<>282<>float值)去该Resampler/Replayer并让它知道,没有新的数据已经进来了。这是与参数控制qcheck(默认值:0.5秒)时创建实时数据feed.

That意味着重采样具有每qcheck秒的几率,如果本地时钟说了吧,再采样的时期已经过去。有了这个地方,对于上述方案中的重采样棒(23:05:30.000000)。将在交付最qcheck秒的报道time.

Because默认衣被合计后0.5最新的时间是:23:05:30.500000。这是较早的before.

The缺点近29秒时:

  • Some ticks may come in too late for the already delivered
    resampled/replayed bar

如果分娩后,TWS从服务器获取后期消息时间戳的23:05:29.995\000, this is simply too late for the already reported time to
the system of
23:05.30.000000

`This大多发生,如果:

  • timeoffset 是禁用(设置为False)在IBStore\和时间在* IB之间的差异报时间及本地时钟为了避免那些最晚样本significant.

The最好的办法:

  • 增加qcheck值,允许迟到的消息被考虑账号:
    data = ibstore.getdata("TWTR", qcheck=2.0, ...)
    

这应该添加额外的空间,哪怕推迟的交付resampled/replayedbar

Note

Of当然2.0秒的延迟具有用于不同的意义Seconds/5比的采样Minutes/10

如果无论什么原因,最终用户希望的重采样禁用timeoffset不通过qcheck,仍然可以取得的样本后期管理:

  • `使用_latethrough设置True作为参数传递给getdata/IBData
    data = ibstore.getdata("TWTR", _latethrough=True, ...)
    
  • `使用takelate设置Trueresampling/replaying
    cerebro.resampledata(data, takelate=True)
    

IBBroker – 交易Live

Note

Following一个tradeid的功能是在实施了请求broker simulationbacktrader可用。这允许保持跟踪交易在平行中正在执行的同一资产分配正确佣金适当的tradeid

这样的概念并不在此居住的经纪人支持,因为佣金由经纪人在时间报道这是不可能分开他们为不同的tradeidvalues.

tradeid仍然可以指定,但它使不再sense.

Using的broker

To使用IB Broker,标准的经纪人通过模拟创建的实例cerebro必须被replaced.

Using的Store模型(优选的):

import backtrader as bt

cerebro = bt.Cerebro()
ibstore = bt.stores.IBStore(host="127.0.0.1", port=7496, clientId=35)
cerebro.broker = ibstore.getbroker()  # or cerebro.setbroker(...)

使用直接的方法:

import backtrader as bt

cerebro = bt.Cerebro()
cerebro.broker = bt.brokers.IBBroker(host="127.0.0.1", port=7496, clientId=35)

经纪人Parameters

直接或通过无论是getbroker`的IBBroker经纪人不支持参数。这是因为,经纪人只是代理到一个真正的Broker。什么真正的经纪人给予,不得被视为away.

Some restrictions

Cash和价值reporting

Where内部backtrader经纪人仿真使得计算value(净清算价值)和cash调用策略之前next方法,同样不能用活保证broker.

  • If被请求的值,的next可延迟执行直到arrive
  • The经纪人可能还没有计算values

backtrader的答案告诉TWS为尽快为他们提供更新的值改变(backtrader赞同accounUpdate消息),但它不知道什么时候该消息将通过arrive.

The报告值的getcashgetvalue方法IBBroker总是从IB.

Note

A进一步限制接收到的最新值是该值在基地报道帐户的货币,即使更多的货币值可用。这是设计choise.

Position

backtrader使用Position由报告资产(价格和尺寸)TWS。内部的计算,可以使用下面的order executionorder
status
消息,但如果一些这些消息都错过了(有时插座丢失的数据包)的计算不会follow.

Of当然,如果在连接到TWS资产上的交易将被执行已经有一个打开位置时,`的计算Trades由制成策略不会起作用,因为与it

There初始offset

Trading的照例是关于标准的使用没有变化。只需使用方法在战略上可用的(参见Strategy一个完整的参考解说)

  • buy
  • sell
  • close
  • cancel

Order对象returned

  • Compatible与backtraderOrder对象(子类在同层次)

订单执行Types

IB支持执行类型无数,其中一些通过IB和一些模拟他们由交易所本身支持。哪个顺序的决定最初支持的执行类型有一个动机:

  • 兼容性与broker simulationbacktrader的理由是什么已经回测是什么将进入可用production.

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

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

Note

Stop触发完成以下按不同的策略IB。backtrader不修改默认设置这是0

0 - the default value. The "double bid/ask" method will be used for
orders for OTC stocks and US options. All other orders will use the
"last" method.

如果用户希望修改此,额外的**kwargs可以提供以buysell以下的IB文档。例如里面的next战略的方法:

def next(self):
    # some logic before
    self.buy(data, m_triggerMethod=2)

这改变了政策,2“last” method, where stop
orders are triggered based on the last price.

请咨询任何进一步澄清停机triggering

Order Validity

The相同的有效性提供想法的IB API文档回测(与valid期间buysell)是可用且与相同的含义。因此,valid参数被转换为IB Orders遵循以下值:

  • None -> GTC(良好胡麻取消)因为没有效力已规定可以理解,顺序必须有效期至cancelled
  • datetime/date转化为GTD(好胡麻日期)路过一个datetime.datetime / datetime.date实例指示的顺序必须是有效的,直到time.
  • timedelta(x)给定点转化为GTD(这里timedelta(x) != timedelta())这被解释为从now+开始 有效的订单信号timedelta(x)
  • float转换为GTD如果该值已经从拍摄的原始float日期时间存储使用backtrader顺序必须有效,直到日期时间由指示float
  • timedelta() or 0转换为DAY的值一直是(而不是None),但是Null和被解释为适用于电流命令day(会话)

Notifications

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

  • Submitted – 订单已发送到TWS
  • Accepted – 订单已placed
  • Rejected – 下订单失败或通过取消在系统其lifetime
  • Partial – 的部分执行已采取place
  • Completed – 订单已经完全executed
  • Canceled(或Cancelled)这有好几个意思IB下:
    • 手册用户Cancellation
    • The服务器/交换机取消了order
    • Order有效性expiredAn启发式将被应用,如果一个openOrder消息已从TWS接收到具有orderState表示PendingCancelCanceled,那么该命令将被标记为Expired
  • Expired – 参见上述用于explanation

Reference

IBStore

类backtrader.stores.IBStore()

Singleton类包装的ibpy ibConnection instance.

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

PARAMS:

  • host(默认:127.0.0.1):其中IB TWS或IB网关是实际运行。虽然这通常是本地主机,它不得be
  • port(默认:7496):端口连接到。该演示系统的用途7497
  • clientId(默认值:None):其中客户端ID到用于连接到TWS.None:产生1到65535之间的随机ID一个integer:将作为use.
  • notifyall值传递(默认值:False)如果False只是error的消息将被发送到notify_store`CerebroStrategy.如果True,从接收到的TWS每个讯息会notified
  • _debug(默认的方法:False)打印从TWS接收标准output
  • reconnect(默认情况下所有消息:3)尝试次数尝试后重新连接在1st连接尝试它failsSet到了-1值保持在重新连接forever
  • timeout(默认:3.0)时间重联attemps
  • timeoffset之间秒(默认值:True)如果真,从所获得的时间reqCurrentTime(IB服务器时间)将用于计算所述偏移到localTime,并此偏移将被用于价格信息(tickPrice事件,例如用于现货市场)来修改本地计算timestamp.The时间偏移会传播到backtrader其他地区像生态系统的resampling使用对齐重采样时间戳计算offset.
  • timerefresh(默认:60.0)时间(秒):时间偏移有多久被refreshed
  • indcash(默认值:True)就好像它们是现金价格retrieval

IBBroker

class backtrader.brokers.IBBroker(IND管理代码** kwargs)

交互式Brokers.

This类代理实现映射从盈透证券的订单/位置backtrader.

Notes

  • tradeid是不是真的支持,因为利润及损失直接从IB拍摄。因为(预期)计算它在FIFO方式时,PNL是不准确的tradeid.
  • Position

If有在开始时为资产的打开位置通过其他方式给予operaitons或命令改变的位置处,这些交易在计算出的Strategy在脑将不会反映reality.

To避免这种情况,该券商就必须做自己的位置管理这也将使tradeid用多个ID(利润和损失也将在本地计算),但也被认为是击败了现场broker

IBData

class backtrader.feeds.IBData工作的目的(** kwargs)

盈透证券数据Feed.

支持参数如下合约规格dataname

  • TICKER#股票型和SMART exchange
  • TICKER-STK股票和SMART exchange
  • TICKER-STK-EXCHANGE#Stock
  • TICKER-STK-交换货币#Stock
  • TICKER-CFD CFD#和SMART exchange
  • TICKER-CFD-交换机#CFD
  • TICKER-CDF-交换货币#Stock
  • TICKER-IND-交换机#Index
  • TICKER-IND-交换货币#Index
  • TICKER-YYYYMM交换#Future
  • TICKER-YYYYMM交换,货币#Future
  • TICKER-YYYYMM-交换货币MULT#Future
  • TICKER-FUT-交换货币YYYYMM-MULT#Future
  • TICKER-YYYYMM交换,货币STRIKE-RIGHT#FOP
  • TICKER-YYYYMM交换,货币STRIKE-RIGHT-MULT#FOP
  • TICKER-FOP-交换货币YYYYMM-STRIKE-RIGHT#FOP
  • TICKER-FOP交换-CURRENCY-YYYYMM-STRIKE-RIGHT-MULT#FOP
  • CUR1.CUR2存在现金IDEALPRO#Forex
  • TICKER-YYYYMMDD-交换货币STRIKE-RIGHT#OPT
  • TICKER-YYYYMMDD-交换货币STRIKE-RIGHT-MULT#OPT
  • TICKER-OPT-交换货币YYYYMMDD-STRIKE-RIGHT#OPT
  • TICKER-OPT-上市货币YYYYMMDD-STRIKE-RIGHT-MULT#OPT

Params:

  • sectype(默认:STK)默认值,适用于作为security type如果不能在规定datanamespecification
  • exchange(默认值:SMART)默认值以应用如exchange如果不是在所提供的datanamespecification
  • currency(默认值:"")默认值以应用如currency如果不是在所提供的datanamespecification
  • historical(默认:False)如果设置为True数据馈送将首次执行后停止data.The标准数据馈送参数`的下载fromdatetodate将作为reference.

    The数据料将令多个请求如果请求的持续时间比给定的时限/压缩由IB允许的一个较大选择用于data.

  • what(默认值:None)如果None为不同资产类型的默认将用于历史数据请求:
    • “BID”现金assets
    • ‘TRADES”任何other

    Check的IB API文档,如果另一个值wished

  • rtbar(默认:False)如果True`的5 Seconds Realtime bars通过互动提供经纪人将被用作最小刻度。按照文档它们对应的实时值(一旦收集通过IB创造)如果False然后RTVolume价格将被使用,这是基于对接收的蜱。在CASH资产(例如像的情况下EUR.JPY)RTVolume会一直使用,并且从它的bid价钱根据文献与IB(产业事实上的标准散落在互联网上)

    就算设置为True,如果数据被重采样/保持为下面秒/ 5时限/压缩,无实时条将被使用,因为IB不提供低于level

  • qcheck他们(默认:0.5)在几秒钟的时间,如果没有接收到的数据提供一个机会来唤醒重新采样/重放正常报文,并通过通知了chain
  • backfill_start(默认值:True)执行在开始回填。最大可能的历史数据将在单一request.
  • backfill取出(默认值:True)进行切断/重新连接循环后回填。差距持续时间将被用来下载data
  • backfill_from的最小可能量(默认值:None)的附加数据源可以传递给做的初始层回填。一旦数据源被耗尽,并且如果被请求,从IB回填会发生。这意味着理想的回填从已经存储的源,如磁盘上的文件,但不限to.
  • latethrough(默认值:False)如果数据源重新采样/重放时,一些蜱可能会在太迟到了已交付重采样/重播吧。如果这是True那些蜱可以打赌,让通过任何case.Check重采样文档中看到谁把这些蜱成account.

    This可能发生,特别是如果timeoffset设置为False在该IBStore实例和交易平台的服务器时间未与同步本地computer

  • tradename(默认是:None)可用于某些特定的情况下,像CFD其中价格提供由一个资产和交易发生在不同的onel

 

  • SPY-STK-SMART-USD-> SP500 ETF(将指定为dataname
  • SPY-CFD-SMART-USD->是对应的差价合约,不提供价格跟踪,但在这种情况下将成为交易资产(指定为tradename

在PARAMS的默认值是允许的事情一样\TICKER,
to which the parameter
sectype(default:STK) andexchange(default:SMART`)是applied.

Some资产一样AAPL需要完整的规范,包括currency(默认:“”),而其他人一样TWTR可以,因为它is.

  • AAPL-STK-SMART-USD将是datanameOr其他完整的规范可以简单地通过:IBData作为IBData(dataname="AAPL", currency="USD")`它使用默认值(STKSMART)和覆盖货币是USD