2016-12-22 39 views
0

當使用ibpy手動關閉交易平臺上的某些頭寸時,它會變成我們無法做到的。具體而言,在執行時:IBpy無法取消手動放置的開倉訂單

self._tws.reqAllOpenOrders() 
    sleep(0.2) 

我們取得編號爲0級(可能是因爲我placecd它手動上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

您必須將訂單「綁定」到新客戶端。使用此方法tws.reqAutoOpenOrders(True)。從文檔,

Finally, IBApi.EClient.reqAutoOpenOrders will allow to obtain those orders manually placed using the TWS itself. This method also allows the client application to take over these orders and modify them by setting the autoBind parameter to true. If successfully bound, The orders will be assigned (i.e. bound to) an API order id and as such be eligible for modification.

client.reqAutoOpenOrders(true); Important: only those applications connecting with client Id 0 will be able to take over manually submitted orders

Through the TWS' API settings it is possible to configure this method's behaviour to some extent. As shown in the image below, manually placed orders can be given a negative order Id which can serve to easily tell manual from API submitted orders. The TWS' tooltip elaborates further:

回調看起來像<openOrder orderId=-3,...,然後你只需要調用tws.cancelOrder(-3)

注意,你沒有得到訂單TWS以前放置的,只有那些放置在調用reqAutoOpenOrders後。

+0

非常感謝。你想花一些時間回答這個問題嗎? http://stackoverflow.com/questions/41289239/how-could-we-use-ibpy-for-editing-orders –