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