Как связать последовательность зависимых асинхронных запросов с API Interactive Broker? - PullRequest
0 голосов
/ 10 октября 2019

Я работаю с IB-API уже пару недель. Недавно обнаружил там ApiController и различные обработчики, которые, кажется, упрощают асинхронные обратные вызовы в меньшие обработчики вместо одного большого EWrapperImpl. Но проблема, с которой я сейчас борюсь, состоит в том, как выполнить цепочку запросов, которые зависят от предыдущих результатов.

Например, я хочу получить текущую рыночную цену для тикера, скажем, AMZN. Основываясь на этом результате, я хочу найти следующий ближайший вариант ITM или OTM. Предположим, я знаю все остальное об опционе, поэтому я могу вызвать reqContractDetails только для одного опционного контракта, а не для всей цепочки. Затем я должен сделать reqOptionMktData для текущей цены и греков. Затем я могу захотеть получить опцион по цене следующего страйка, основываясь на греках, потому что я ищу один, близкий к определенной дельте.

Таким образом, цепочка зависимых запросов выглядит следующим образом:

apiController.reqTopMktData (для акций) -> apiController.reqOptionMktData (возможно, более одного раза)

Как объединить эти зависимые асинхронные запросы вместе?

У меня есть небольшой опыт с обещаниями и CompletableFutures в Java, но я не очень доволен им. Мне интересно, смогу ли я в качестве альтернативы этому создать один большой класс, который бы реализовывал все интерфейсы Handler для этих нескольких разных запросов, и обрабатывал бы все следующие запросы внутри этого одного класса.

...