4

通过盈透证券的 API 方法接收金融报价数据时tickPricetickSize数据将具有以下参数

  • tickerId(符号)
  • 字段(1=出价,2=要价,4=最后,6=高,7=低,9=收盘)
  • 价格
  • 可以自动执行

从任何其他提要中,我都希望打勾

  • tickerId(符号)
  • 出价
  • 投标规模
  • 问尺寸

所以我的问题是:我是否应该保留一个以tickerId为键和一个结构作为包含上述五个属性的值的字典,这样每次引发滴答事件时,我都会更新结构的相应属性并将整个结构发送到我的数据库蜱虫?理想情况下,我的刻度数据库看起来像这样

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 文档:当市场数据发生变化时调用此方法。这是否意味着如果更新了投标价格,其他属性将保持不变?

4

3 回答 3

6

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

换言之,IB 的 API 将在每个汇总的报价到达时发回它们。但是,这些滴答声并不是真正的滴答声,因为它们只是 0.2 - 0.3 秒的快照。如果您正在处理 HFT,那么这些数据对于订单簿模拟可能是可靠的。但是,如果您只是进行基本的数据分析,那么它们的质量是可以接受的。

在这种情况下,它们的高、低和收盘价可能没有用,因为标准订单簿不会包含高、低收盘信息。我通常会丢弃它们。在这种情况下,买入价和卖出价也不可靠,因为它们只是合成报价。

希望我的回答有帮助。

于 2014-09-09T10:31:28.460 回答
5

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

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

如果您编写snapshot = true,您将每 ~0.2-0.5 秒收到一次数据快照。如果出价或价格发生变化,您会看到它。

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

于 2016-10-23T09:59:28.010 回答
3

如果您考虑 IB 提供的数据馈送,请考虑您要更新显示表单/页面中的数据的情况。在这种情况下,如果交易所以相同的投标价格生成新的最佳投标报价,只是大小不同,那么发送新的大小(而不是再次发送未更改的投标价格)才有意义。此外,IB 将在 200 或 300 毫秒内对这些更改进行批量处理,因此不会传播每个更改。

如果您在这种情况下查看它,数据馈送实际上在最小化消息的大小和频率方面非常有效。

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

您需要哪种类型的数据馈送在很大程度上取决于您的特定用例。例如,我一直致力于向客户提供非常详细(例如,每条报价信息)的十亿条记录数据集,结果却发现他们正在将数据聚合成 1 分钟的 OHLCV 条形图。

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

于 2016-03-23T17:34:13.397 回答