簡體   English   中英

如何使用盈透證券 (IB) API (ib_insync) 為 Python 復制括號定單功能

[英]How to replicate bracket orders functionality using Interactive Brokers (IB) API (ib_insync) for Python

我一直在努力讓括號順序表現得只能為父級傳遞自動過期參數(goodTillDate)。 在括號定單代碼中傳遞它時,它會將其添加到限制和停止中,這違背了括號定單的目的。 我還希望能夠為每個括號確定兩個限制。 任何人都有任何代碼可以反映括號訂單的父/子關系和 OCO 功能,但帶有單獨的訂單? 一個父母,三個孩子(我們的目標獲利者有兩個限制,一個停止)?

首先,您提交帶有傳輸標志為 False 的父代,然后為每個子代指定 parentId 並提交帶有傳輸為 True 的最后一個訂單。

對於兩個限制,您只需拆分訂單並提交邊。 或者,您可以嘗試有條件的訂單,指定時間。

父母過世了,孩子們怎么活下去? 除非你的意思是部分填充。

這個問題的答案遲到了......我遇到了同樣的問題並找到了解決方案,並得到了一點幫助,但我仍然想分享,因為我花了數周時間來解決這個問題。

我放置括號順序的舊代碼如下所示:

order = ib.bracketOrder('BUY', amount, limit, takeprofit, stoploss, outsideRth=True, tif='GTC')    
for ord in order:
    ib.placeOrder(contract, ord)

這將為所有 3 個訂單(父訂單和 2 個子訂單)下一個括號訂單,其中 TIF(有效時間)設置為 GTC(在取消之前有效)。

當我將其更改為 TIF=GTD 並指定時間時,這當然適用於整個括號順序。 因此,如果它在所需時間填寫,則在 GTD 時間到期后,止盈和止損將消失。 不好。

然后,有人給了我一些幫助,現在這段代碼對我有用:

bracket = ib.bracketOrder('BUY', amount, limit, takeprofit,stoploss, outsideRth=True)

gtddelta = (datetime.now() + timedelta(seconds=45)).strftime("%Y%m%d %H:%M:%S")
bracket.parent.tif = 'GTD'
bracket.parent.goodTillDate = gtddelta
    
for order in bracket:
    ib.placeOrder(contract, order)

這為父訂單設置了 45 秒的 GTD。 如果沒有成交,整個括號定單將被取消。 如果它被執行,止盈和止損訂單仍然存在,TIF=GTC。

請注意舊代碼的更改。 調用第一個變量“bracket”以便以后能夠定義“bracket.parent”是很重要的(查看定義)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM