【问题标题】:How to replicate bracket orders functionality using Interactive Brokers (IB) API (ib_insync) for Python如何使用 Python 的 Interactive Brokers (IB) API (ib_insync) 复制括号定单功能
【发布时间】:2020-05-14 22:30:41
【问题描述】:

我一直在努力让括号顺序表现得只能为父级传递自动过期参数 (goodTillDate)。当在括号订单代码中传递它时,它会将其添加到限制和停止中,这违背了括号订单的目的。我还希望能够为每个括号确定两个限制。任何人都有任何代码可以反映括号订单的父/子关系和 OCO 功能,但带有单独的订单?一个父母,三个孩子(我们的目标获利者有两个限制,一站)?

【问题讨论】:

    标签: python interactive-brokers ib-api


    【解决方案1】:

    首先您提交带有传输标志为 False 的父代,然后为每个子代指定 parentId 并提交带有传输为 True 的最后一个订单。

    对于两个限制,您只需拆分订单并提交边。或者,您可以尝试有条件的订单,指定时间。

    当父母已过期时,孩子将如何活着?除非你的意思是部分填充。

    【讨论】:

      【解决方案2】:

      对这个问题的回答迟了...我遇到了同样的问题并找到了解决方案,但需要一点帮助,但我仍然想分享,因为我花了数周时间来解决这个问题。

      我放置括号顺序的旧代码如下所示:

      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' 很重要(查看定义)。

      【讨论】:

        猜你喜欢
        • 2022-11-28
        • 2022-08-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-26
        相关资源
        最近更新 更多