Получение нескольких котировок последней цены из API Interactive Brokers

У меня есть вопрос относительно Python API Interactive Brokers.

Можно ли передать несколько контрактов на активы и акции в функцию reqMktData() и получить последние цены? (Я могу установить snapshots = TRUE в reqMktData, чтобы получить последнюю цену. Вы можете предположить, что я подписался на соответствующие службы данных.)

Чтобы представить вещи в перспективе, вот что я пытаюсь сделать:

1) Вызовите reqMktData, получите последние цены для нескольких активов.

2) Подайте данные в мой механизм прогнозирования и сделайте что-нибудь

3) Перейти к шагу 1.

Когда я связался с Interactive Brokers, они сказали: "Только один контракт может быть передан в reqMktData() одновременно, поэтому при запросе данных в реальном времени нет функции массового запроса".

Очевидно, что один из способов обойти это - сделать цикл, но это слишком медленно. Другой способ сделать это — использовать многопоточность, но это требует много работы, плюс я не могу позволить себе дополнительные расходы на новый компьютер. Меня не интересует ни тот, ни другой.

Какие-либо предложения?


person kambino    schedule 16.05.2018    source источник


Ответы (1)


Вы можете указать только 1 контракт в каждом вызове reqMktData. Нет другого выбора, кроме как использовать петлю какого-либо типа. Скорость не должна быть проблемой, так как вы можете делать до 50 запросов в секунду, а для моментальных снимков может быть даже больше.

Проблема со скоростью может заключаться в том, что вам нужно слишком много данных (> 50/с), или вы используете старую версию API Python IB, проверьте в connection.py наличие lock.acquire, я удалил их все. Кроме того, если сделки не было более 10 секунд, IB будет ждать сделки, прежде чем отправить снимок. Тест с активными символами.

Однако вам следует запросить данные потоковой передачи в реальном времени, установив для моментального снимка значение false, и просто отслеживать последнюю цену в потоке. Вы можете транслировать до 100 тикеров с минимумом по умолчанию. Вы держите их отдельно, используя уникальные идентификаторы тикеров.

person brian    schedule 18.05.2018
comment
На самом деле скорость является проблемой для цикла; Я знаю это, так как я попробовал это. (Я упомянул об этом в своем описании проблемы.) Предложение потока может работать. Я еще не пробовал это, но у меня есть твердое предчувствие, что это гораздо легче сказать, чем сделать. - person kambino; 18.05.2018