对这个问题的回答迟了...我遇到了同样的问题并找到了解决方案,但需要一点帮助,但我仍然想分享,因为我花了数周时间来解决这个问题。
我放置括号顺序的旧代码如下所示:
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' 很重要(查看定义)。