Как определить тип (whatToShow) исторических данных, полученных от iBrokers API

Метод reqHistoricalData() IB API предлагает аргумент whatToShow, который может принимать значения, обозначающие, что вы ищете данные о СДЕЛКАХ, СРЕДНЕЙ ТОЧКЕ, БИД, АСК и т. д.

Однако обратный вызов API historicalData, предназначенный для асинхронного получения запрошенных исторических данных, не возвращает соответствующие whatToShow, что делает невозможным определение того, что просматривается. Это линия для СДЕЛОК, ПРЕДЛОЖЕНИЙ или АСКОВ, которые я запросил???

Я обхожу это очевидным способом, а именно сначала запрашиваю TRADES, жду, пока все сообщения вернутся, а затем запрашиваю BIDS, затем снова жду и запрашиваю ASKS.

У кого-нибудь есть лучшее решение?


person OldSchool    schedule 13.02.2014    source источник


Ответы (1)


Пожалуйста, правильно используйте поле tickerId, которое является первым параметром в методе reqHistoricalData(). Когда вы получаете исторические данные с помощью обратных вызовов, вы получите этот идентификатор обратно в качестве первого параметра с помощью historyData().

Вам просто нужно отслеживать, какой 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
person Aziz    schedule 14.02.2014
comment
Спасибо. Я попробую. У меня сложилось (самопроизвольное) впечатление, что тикерный идентификатор должен оставаться неизменным для запросов по конкретному контракту. Я предполагаю, что это может быть не так. Я попробую это и вернусь - person OldSchool; 15.02.2014
comment
Похоже, это работает без (пока) каких-либо негативных побочных эффектов. Спасибо за вашу помощь - person OldSchool; 21.02.2014