IB API reqHistoricalData()方法提供了一个whatToShow参数,该参数可以采用值表示您在TRADES,MIDPOINT,BID,ASK等上搜索数据。

但是,API的historicalData回调(用于异步接收所请求的历史数据)不会返回相关的whatToShow,因此无法确定正在查看的内容。是我要求的TRADES,BIDS或ASKS的生产线吗?

我绕过了这种明显的方法,即首先请求TRADES,等待所有消息返回,然后再请求BIDS,然后再次等待并请求ASKS。

有谁有更好的解决方案?

最佳答案

请正确使用tickerId字段,它是reqHistoricalData()方法中的第一个参数。当您通过回调获取历史数据时,您将通过historyData()将该ID作为第一个参数接收回来。

您只需要跟踪哪种tickerId与哪种数据类型(出价,询问或交易)相关联,即可在回调中进行识别。

例:

在要求时:

reqHistoricalData(1, ..whatToShow = Bid,...);
reqHistoricalData(2, ..whatToShow = Ask,...);

回调处理:
historicalData(int reqId,....)
   if(reqId == 1)
     //This is the data built of bids as per request1

   else if(reqId == 2)
     //This is the data built of asks as per request2

关于c++ - 如何识别从iBrokers API收到的HistoricalData的类型(whatToShow),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21759581/

10-10 17:00