IBpy получает обновление статуса заказа

#python #interactive-brokers #ibpy

#python #interactive-брокеры #ibpy

Вопрос:

Я хочу получить статус моих предыдущих заказов. У меня есть следующий простой код, но я получаю только значения True / False. Вот мой код:

 from ib.opt import Connection, message

tws_conn = Connection.create(port=7497, clientId=999)
tws_conn.connect()

def acct_update(msg):
    print msg  

tws_conn.register(acct_update, message.openOrder)
tws_conn.register(acct_update, message.orderStatus)
  

вот результат:

 >>> from ib.opt import Connection, message
>>> 
>>> tws_conn = Connection.create(port=7497, clientId=999)
>>> tws_conn.connect()
Server Version: 76
TWS Time at connection:20161021 18:53:42 EST
True
>>> 
>>> def acct_update(msg):
...     print msg  
... 
>>> tws_conn.register(acct_update, message.openOrder)
True
>>> tws_conn.register(acct_update, message.orderStatus)
True
>>> 
>>> 
  

Как я могу получить список открытых заказов? и как я могу получить статус отдельного заказа?

Спасибо.

Ответ №1:

Вы забыли спросить! Добавьте строку tws_conn.reqOpenOrders() , чтобы получать заказы. Вы увидите как обратный вызов openOrder, так и OrderStatus. Возможно, вы захотите добавить строку tws_conn.register(acct_update, message.openOrderEnd) , чтобы узнать, когда вы закончили получать открытые заказы. Я никогда не тестировал это, и, как обычно, люди задают эти вопросы в пятницу вечером 😉

Если вы хотите, чтобы заказы размещались всеми клиентами и TWS, используйте tws_conn.reqAllOpenOrders()

Вот пример из заказа, только что размещенного в TWS (ClientID = 0), но, очевидно, он не будет заполнен в течение пары дней.

<openOrder orderId=0, contract=<ib.ext.Contract.Contract object at 0x00000000041FA0F0>, order=<ib.ext.Order.Order object at 0x00000000043FF080>, orderState=<ib.ext.OrderState.OrderState object at 0x00000000043FF5C0>>

<orderStatus orderId=0, status=PreSubmitted, filled=0, remaining=1, avgFillPrice=0.0, permId=1905611953, parentId=0, lastFillPrice=0.0, clientId=0, whyHeld=None>

<openOrderEnd>

Обратите внимание, что в API есть настройка «Загружать открытые заказы при подключении», но она ненадежна, и лучше всего, если вы будете отслеживать заказы самостоятельно и запрашивать выполнение. Смотрите… если заказ выполнен, пока вы не подключены, то это больше не открытый заказ, и вы его не получите.

true — это только то, что печатается в командной строке для этих команд … я думаю, это означает, что ничего не пошло не так.