了解Interactive Brokers滴答事件

时间:2014-09-04 12:08:40

标签: finance algorithmic-trading interactive-brokers

通过Interactive Brokers'收到财务报告数据时API方法tickPricetickSize数据将具有以下参数

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

从任何其他Feed中我都希望勾选给我

  • tickerId(symbol)
  • 出价
  • 出价尺寸
  • 问大小

所以我的问题是:我应该保留一个字典,其中tickerId作为键,结构作为包含上述五个属性的值,这样每次提出tick事件时,我都会更新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

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

3 个答案:

答案 0 :(得分:5)

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

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

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

希望我的回答有所帮助。

答案 1 :(得分:5)

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

void reqMktData(       TickerId          id,
                 const Contract         &contract,
                       IBString         &genericTicks,
                       bool              snapshot,
                 const TagValueListSPtr &mktDataOptions
                       )

如果你写 snapshot = true ,你将每隔0.2-0.5秒收到一次数据快照。如果出价或价格已经移动,您将看到它。

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

答案 2 :(得分:1)

温你考虑IB提供的数据馈送,考虑你想要在显示形式/页面中更新数据的情况。在这种情况下,如果交易所以相同的出价生成新的最佳出价报价,只有不同的尺寸,那么只发送新的尺寸(而不是再次出价而没有变化)才有意义。此外,IB将在200或300毫秒之间批量处理这些更改,因此不会传播每个更改。

如果你在这种情况下看一下,数据提供实际上在减少消息的大小和频率方面非常有效。

大多数人都熟悉更完整的1级数据源提供的内容(例如综合报价系统)。在这种情况下,价格或大小的每次更改都会生成包含所有字段的完整新报价消息。

您需要哪种类型的数据Feed在很大程度上取决于您的具体用例。例如,我一直致力于向客户提供非常详细的(例如,每条报价消息)亿记录数据集,以发现他们正在将数据聚合成1分钟的OHLCV条。

因此,确实能够将您的数据数据要求与您的分析要求相匹配。在某些情况下,IB的数据可以正常工作。在其他情况下,它不会。