IBpy无法取消手动下达的未结订单

时间:2016-12-22 15:43:23

标签: ibpy

当使用ibpy试图手动关闭TWS上的某些位置时,我们无法做到这一点。具体来说,执行时:

    self._tws.reqAllOpenOrders()
    sleep(0.2)

我们得到ID为0的订单(可能是因为我在TWS上手动放置)

<openOrder orderId=0, contract=<ib.ext.Contract.Contract object at 0x103b78ad0>, order=<ib.ext.Order.Order object at 0x103b78a50>, orderState=<ib.ext.OrderState.OrderState object at 0x103b78b10>>
<orderStatus orderId=0, status=Submitted, filled=0, remaining=100, avgFillPrice=0.0, permId=134994568, parentId=0, lastFillPrice=0.0, clientId=0, whyHeld=None>
<openOrder orderId=0, contract=<ib.ext.Contract.Contract object at 0x103b78c90>, order=<ib.ext.Order.Order object at 0x103b78c50>, orderState=<ib.ext.OrderState.OrderState object at 0x103b78cd0>>
<orderStatus orderId=0, status=Submitted, filled=0, remaining=1, avgFillPrice=0.0, permId=134994562, parentId=0, lastFillPrice=0.0, clientId=0, whyHeld=None>
<openOrderEnd>

尝试用以下方法关闭时:

    self._tws.cancelOrder(0)

    self._tws.cancelOrder(134994568)

我收到错误:

<error id=0, errorCode=135, errorMsg=Can't find order with id =0>
<error id=134994562, errorCode=135, errorMsg=Can't find order with id =134994562>

任何想法我们怎么能关闭它们?谢谢。

1 个答案:

答案 0 :(得分:0)

您必须将订单“绑定”到新客户端。使用此方法tws.reqAutoOpenOrders(True)。来自文档,

  

最后,IBApi.EClient.reqAutoOpenOrders将允许获取这些   使用TWS本身手动放置的订单。这种方法也允许   客户端应用程序接管这些订单并通过它们进行修改   将autoBind参数设置为true。如果成功绑定,The   订单将被分配(即绑定到)API订单ID,因此是   有资格修改。

     

client.reqAutoOpenOrders(真);重要提示:只有与客户端Id 0连接的应用程序才能接管   手动提交订单

     

通过TWS的API设置,可以对其进行配置   方法在某种程度上的行为。如下图所示,   手动下单可以给出负订单ID即可   用于轻松告知API提交的订单手册。 TWS'   工具提示进一步阐述:

回调看起来像<openOrder orderId=-3,...,然后你只需拨打tws.cancelOrder(-3)

请注意,您之前未在TWS中获得订单,只有在拨打reqAutoOpenOrders后才能下订单。