繁体   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