通过Interactive Brokers'收到财务报告数据时API方法tickPrice
或tickSize
数据将具有以下参数
从任何其他Feed中我都希望勾选给我
所以我的问题是:我应该保留一个字典,其中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文档:当市场数据发生变化时调用此方法。这是否意味着,例如,出价更新后,其他属性会保持不变吗?
答案 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的数据可以正常工作。在其他情况下,它不会。