当使用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>知道我们怎么才能关闭他们吗?谢谢。
发布于 2016-12-22 17:14:12
你必须把订单“绑定”到新客户上。使用此方法tws.reqAutoOpenOrders(True)。从医生那里,
最后,IBApi.EClient.reqAutoOpenOrders将允许使用TWS本身手动获得这些订单。此方法还允许客户端应用程序接收这些订单,并通过将autoBind参数设置为true来修改它们。如果绑定成功,订单将被分配(即绑定到)一个API订单id,因此有资格进行修改。 client.reqAutoOpenOrders(true);重要的是:只有那些连接到客户机Id 0的应用程序才能接管手动提交的订单 通过TWS的API设置,可以在一定程度上配置此方法的行为。如下图所示,手动下订单可以给出一个负订单Id,这可以方便地区分手工订单和API提交的订单。TWS的工具提示进一步阐述了:
回调将类似于<openOrder orderId=-3,...,然后只需调用tws.cancelOrder(-3)
请注意,您没有得到先前在TWS中下的订单,只有那些在调用reqAutoOpenOrders之后发出的订单。
https://stackoverflow.com/questions/41286837
复制相似问题