1

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

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

如果你检查 IBApi.EClient.placeOrder 函数,你会发现关于 order id 的以下内容:

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

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

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

4

1 回答 1

0

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

我这样解决了这个问题:

  • 取消订单

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

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

  • 使用新 ID 发送新订单

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

于 2017-08-04T09:06:03.473 回答