IB API reqHistoricalData()
Метод предлагает whatToShow
Аргумент, который может принимать значения, обозначающие, что вы ищете данные по TRADES, MIDPOINT, BID, ASK и т. д.
Тем не менее, API historicalData
обратный вызов, предоставленный для асинхронного получения запрошенных исторических данных, не возвращает соответствующие whatToShow
делая невозможным выяснить, на что человек смотрит. Это линия для ТОРГОВ, BIDS или ЗАПРОСОВ, которые я просил ???
Я обхожу это очевидным способом, а именно: сначала запрашиваю TRADES, ожидая возвращения всех сообщений и затем запрашивая BIDS, затем снова ожидаю и запрашиваю ASKS.
У кого-нибудь есть лучшее решение?
Пожалуйста, используйте tickerId правильно поле, которое является первым параметром в методе reqHistoricalData (). Когда вы получите исторические данные с обратными вызовами, вы получите этот идентификатор обратно в качестве первого параметра с помощью historyData ().
Вам просто нужно отслеживать, какой tickerId связан с каким типом данных (bid, ask или trade), чтобы идентифицировать его при обратном вызове.
Пример:
При запросе:
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
Других решений пока нет …