IBpy获取订单状态更新

时间:2016-10-21 22:57:57

标签: python interactive-brokers 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 个答案:

答案 0 :(得分:1)

你忘了问!添加一行^(subnet-[0-9a-fA-F]{8})?$以获取订单。您将看到openOrder和orderStatus回调。您可能需要添加一行tws_conn.reqOpenOrders()以了解何时获得openOrders。我从未测试过,并且像往常一样,周五晚上人们会问这些问题;)

如果您希望所有客户和TWS下达订单,请使用tws_conn.register(acct_update, message.openOrderEnd)

以下是刚刚放入TWS(clientId = 0)的订单样本,但显然不会填写几天。

tws_conn.reqAllOpenOrders()

<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>

请注意,有一个API设置“在连接时下载打开的订单”,但它不可靠,如果您自己跟踪订单并要求执行,则最好。如果订单在您未连接时已经填写,那么它就不再是一个未结订单了,您将无法获得订单。

<openOrderEnd>就是命令行为这些命令打印的内容...意味着我没想错。