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) знать, когда вы закончили получать openOrders. Я никогда не проверял это, и как обычно люди задают эти вопросы в пятницу вечером;)

Если вы хотите, чтобы заказы размещались всеми клиентами и 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Это именно то, что командная строка печатает для этих команд... значит, ничего не пошло не так, я думаю.

Другие вопросы по тегам