Python 2.7 如何使用IBpy检索未结订单的状态?

Python 2.7 如何使用IBpy检索未结订单的状态?,python-2.7,ibpy,Python 2.7,Ibpy,我使用的是一个纸面交易IB账户,交易处理得很好。我有许多未完成的订单。“updateAccountValue”按预期执行,而“con.register(acct_update,message.ReqAllowenOrders())”不执行任何操作,“con.reqOpenOrders()”。也不会引发错误。IB文档告诉我这三个方法都是“void”,我理解这意味着不应该返回任何值。但是,如前所述updateAccountValue“方法工作得非常好,提供了正确的输出 问题1:如何检索有关(未填写)

我使用的是一个纸面交易IB账户,交易处理得很好。我有许多未完成的订单。“updateAccountValue”按预期执行,而“con.register(acct_update,message.ReqAllowenOrders())”不执行任何操作,“con.reqOpenOrders()”。也不会引发错误。IB文档告诉我这三个方法都是“void”,我理解这意味着不应该返回任何值。但是,如前所述updateAccountValue“方法工作得非常好,提供了正确的输出

问题1:如何检索有关(未填写)未结订单的数据

我还注意到,代码并不总是运行的,但它总是在(重新)启动TWS工作站应用程序之后正确运行

问题2:为什么此代码不是每次启动时都运行

from ib.opt import ibConnection, message
import sys

def acct_update(msg):
    print msg   

con = ibConnection(clientId=100)
con.register(acct_update,
        message.updateAccountValue)
con.register(acct_update,
        message.reqAllOpenOrders())

con.connect()
con.reqAccountUpdates(True,'DU000000')
con.reqAllOpenOrders()
con.reqOpenOrders()

sys.exit()

注意到区别了吗

con.register(acct_update,
        message.updateAccountValue)
con.register(acct_update,
        message.reqAllOpenOrders())
您应该使用
message.openOrder

此外,您正在将其发送到acct_update回调,但由于它只是打印,这没什么大不了的


您还可以在程序可能有机会完成之前调用exit()。它是异步的,这意味着您必须等待答复。

注意到区别了吗

con.register(acct_update,
        message.updateAccountValue)
con.register(acct_update,
        message.reqAllOpenOrders())
您应该使用
message.openOrder

此外,您正在将其发送到acct_update回调,但由于它只是打印,这没什么大不了的


您还可以在程序可能有机会完成之前调用exit()。它是异步的,这意味着您必须等待答复。

我正试图找出如何打印所有未结订单。以下是我的发现,可能对您的第一个问题有所帮助

  • 在Order.py和Contract.py的原始IBpy文档中添加打印功能
  • 在Order.py中添加:

    def __str__(self):
        return "Action: " + self.m_action + ", Quantity: " + str(self.m_totalQuantity) + ", at price: " + str(self.m_lmtPrice)
    
    在Contract.py中添加:

    def __str__(self):
        return "secType: " + self.m_secType + ", symbol: " + self.m_symbol + "; expiry: " + self.m_expiry
    
    您可以修改字段以显示要查看的内容

  • 在您自己的python文件中:
  • ``

    它打印出我的测试订单,如下所示:

    。。。 未结订单:2::部门类型:FUT,符号:NQ;到期日:20161216::操作:购买,数量:1,价格:4500.0::状态:待定取消
    订单状态:2::状态:待处理取消已填写:0剩余:1 avgFillPrice:0.0

    我正在试图找出如何打印所有未结订单。以下是我发现的内容,可能对您的第一个问题有所帮助

  • 在Order.py和Contract.py的原始IBpy文档中添加打印功能
  • 在Order.py中添加:

    def __str__(self):
        return "Action: " + self.m_action + ", Quantity: " + str(self.m_totalQuantity) + ", at price: " + str(self.m_lmtPrice)
    
    在Contract.py中添加:

    def __str__(self):
        return "secType: " + self.m_secType + ", symbol: " + self.m_symbol + "; expiry: " + self.m_expiry
    
    您可以修改字段以显示要查看的内容

  • 在您自己的python文件中:
  • ``

    它打印出我的测试订单,如下所示:

    。。。 未结订单:2::部门类型:FUT,符号:NQ;到期日:20161216::操作:购买,数量:1,价格:4500.0::状态:待定取消
    订单状态:2::状态:PendingCancel Filled:0剩余:1 avgFillPrice:0.0

    Thx作为您的答案。事实上,我现在得到了您描述的答复。第一个逗号后的信息有什么意义吗?抱歉问。同时,我发现我需要使用“con.register(帐户更新,message.orderStatus)”“给我我想要的信息。如果你是说在orderId之后,那么是的。在回调中,您将访问对象,如
    msg.contract
    等,以获取答案。事实上,我现在得到了你描述的答复。第一个逗号后面的信息有什么意义吗?抱歉问。同时,我发现我需要使用“con.register(acct\u update,message.orderStatus)”来告诉我我想要的信息。如果你的意思是在orderId之后,那么是的。在回调中,您将访问诸如
    msg.contract
    等对象。remove
    sys.exit()
    remove
    sys.exit()