【问题标题】:TWS API Modifying Order Not Working, Got Error 103 "Duplicate Order ID"TWS API 修改订单不起作用,出现错误 103“重复订单 ID”
【发布时间】:2017-08-04 08:25:00
【问题描述】:

API 手册只给出了冲突信息:

要修改订单,只需再次调用 IBApi.EClient.placeOrder 函数,使用与下原始订单相同的参数,除了更改的参数。这包括 IBApi.Order.OrderId,它必须与原始的 IBApi.Order.OrderId 匹配。

如果你检查 IBApi.EClient.placeOrder 函数,你会发现关于订单 id 如下:

订单的唯一标识符。使用从 nextValidId 方法收到的 id 开始的顺序 id。如果新订单的订单 ID 小于或等于前一个订单的订单 ID,则会发生错误。

这是我的问题。当我尝试按照上面的说明修改订单时,我收到错误“重复的订单 ID”,这与上面关于订单 ID 的说明一样。

那么如何修改未结订单的价格或数量?

【问题讨论】:

    标签: c++ interactive-brokers tws


    【解决方案1】:

    这在我的应用程序中也很常见,但并不总是清楚为什么。我想您在其他地方使用了 OrderId,它高于这个。这不应使之前使用的订单 ID 无效,但有时会。

    我这样解决了这个问题:

    • 取消订单

    • 通过请求 nextValidId 获取新的订单 ID。调用 reqIds(1);

    • 使用相同的数据创建一个新订单(并进行修改)

    • 使用新 id 发送新订单

    当然这并没有从字面上修改开仓顺序,但结果是一样的。

    【讨论】:

    • 就我而言,我希望修改订单,因为相关订单和仓位更新以及在线数据库更新。我交易非常频繁。每天上千个订单。而且订单的修改非常频繁。取消并发送新订单将在我的数据库中生成两个多订单。此外,它可能会导致我的应用程序出现并发问题。
    • 是的,我也经历过这个,但我没有找到任何其他解决方案。如果一个 id 被认为是“重复的”一次,它仍然是重复的,你别无选择。我重新设计了这些相关的更新,以便顺利、快速地进行。
    • 这是什么并发问题?如果您只修改价格,它怎么不会出现,但如果您也修改 id 它会呢?无论如何,您必须重新发送订单。
    • 新订单数量根据持仓大小和未成交订单计算。当我取消一个订单并且新订单还没有发送时,可能会因为取消而产生另一个新订单,导致未成交的订单金额暂时下降。这仍然是可以管理的。我最讨厌数据库中订单数量的问题,因为我可能每天需要取消数万次。
    • 我不知道你的应用和你的策略。我会准备好订单,但在(几乎)确定它们会立即执行之前不会真正发送它们。这样一次只会发出一个订单,并且不会因为 id 而出现并发问题。此外,这可以防止获得“重复的订单 ID”。
    猜你喜欢
    • 2020-12-20
    • 2021-04-30
    • 1970-01-01
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    相关资源
    最近更新 更多