当使用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>
任何想法我们怎么能关闭它们?谢谢。
答案 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
后才能下订单。