了解Interactive Brokers滴答事件

Mor*_*ten 3 finance algorithmic-trading interactive-brokers

当通过盈透证券的API方法接收的财务数据打勾tickPricetickSize数据将具有下列参数

  • tickerId(符号)
  • 字段(1 = bid,2 = ask,4 = last,6 = high,7 = low,9 = close)
  • 价钱
  • canAutoExecute

从任何其他饲料我会期望给我一个滴答

  • tickerId(符号)
  • 出价
  • 出价大小
  • 问大小

所以我的问题是:我应该保留一个字典,其中tickerId作为键,结构作为包含上述五个属性的值,这样每次提出tick事件时,我都会更新struct的相应属性并将整个struct发送到我的数据库中打勾?理想情况下,我的tick数据库看起来像这样

Date        Time            Symbol  Side    Price   Quantity
2012-10-31  13:51:13.784    AAPL    Bid     25.81   15007
2012-10-31  13:51:14.615    AAPL    Bid     25.82   10
2012-10-31  13:51:14.633    AAPL    Bid     25.81   13623
2012-10-31  13:51:14.684    AAPL    Ask     25.82   2500
2012-10-31  13:52:09.168    AAPL    Bid     25.80   12223
Run Code Online (Sandbox Code Playgroud)

从IB API文档:当市场数据发生变化时调用此方法.这是否意味着如果例如更新出价,其他属性将保持不变?

小智 5

你是对的.每当某个属性发生变化时,都会触发一个新的tick事件.使用结构来保存刻度快照的设计是标准方法之一.

换句话说,IB的API将在它们到达时发回每个聚合的标记.但是,这些刻度不是真正的刻度,因为它们只有0.2-0.3秒的快照.如果您正在处理HFT,那么这些数据对于订单模拟可能是可靠的.但是,如果您只是进行基本数据分析,那么它们的质量是可以接受的.

在这种情况下,它们的高价,低价和收盘价可能没有用,因为标准订单不包含高,低收盘价信息.我通常会抛弃它们.在这种情况下,出价大小和要价大小也不可靠,因为它们只是合成价格.

希望我的回答有所帮助

  • @Morten ,我认为这在很大程度上取决于策略。对于每小时/每天甚至分钟级数据的工作,这真的很好。我认为很多人都想要“真实”的市场数据,直到他们有很多要跟踪的符号并且这是沉重的一天。即使有不错的硬件和出色的网络连接,您也可能陷入困境,因为 IB API 因为它是一个快照,所以不会遇到这些问题。 (3认同)

小智 5

这取决于您在reqMktData()方法中引入的内容:

void reqMktData(       TickerId          id,
                 const Contract         &contract,
                       IBString         &genericTicks,
                       bool              snapshot,
                 const TagValueListSPtr &mktDataOptions
                       )
Run Code Online (Sandbox Code Playgroud)

如果你写snapshot = true,你会收到每0.2~0.5秒的数据快照.如果出价或价格已经移动,您将看到它.

如果您写信snapshot = false,您将收到一个新的变量出价或每次更改时询问.

  • @ibapilessons - 你确定吗?从IB网站(https://www.interactivebrokers.com/en/software/api/apiguide/c/reqmktdata.htm)你可以看到它说:“检查以返回市场数据的单一快照并订阅市场数据取消。如果您使用快照,请不要输入任何 genericTicklist 值。”。并且根据我的测试 - 将快照设置为 true 将返回快照数据并取消当前数据订阅。 (2认同)