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