Общие вопросы
Во-первых, соединение между клиентом API и TWS начинается в функции connect(). Соединение обязательно асинхронное, и поэтому программы выглядят иначе, чем программы в синхронной среде.
Из-за асинхронной архитектуры обычно (как минимум) выполняются два потока. Один поток читает сообщения из TWS в API и помещает сообщения в очередь. Другие потоки отправляют сообщения в TWS или обрабатывают сообщения во входящей очереди.
EClient — это класс в API, у которого есть функции, вызываемые для отправки сообщений в TWS.
EWrapper — это класс, в котором определены обратные вызовы TWS, которые должны обрабатываться и реализовываться клиентом API. В отличие от других языков программирования, это обрабатывается во время выполнения и не требует реализации всех обратных вызовов в EWrapper.
Полный текст примера: hello_tws_ex.py
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
class IBapi(EWrapper, EClient):
def __init__(self):
EClient.__init__(self, self)
app = IBapi()
app.connect('127.0.0.1', 7497, 123)
app.run()
app.disconnect()
#Uncomment this section if unable to connect
#and to prevent errors on a reconnect
#import time
#time.sleep(2)
#app.disconnect()
При запуске данной программы вы должны получить примерно такой вывод: