Руководство по API просто дает информацию о конфликте:
Чтобы изменить заказ, просто вызовите функцию IBApi.EClient.placeOrder снова с теми же параметрами, которые использовались для размещения исходного заказа, за исключением измененного параметра. Это включает IBApi.Order.OrderId, который должен совпадать с IBApi.Order.OrderId оригинала.
Если вы проверите функцию IBApi.EClient.placeOrder, вы найдете следующую информацию об идентификаторе заказа:
уникальный идентификатор заказа. Используйте последовательный идентификатор, начиная с идентификатора, полученного в методе nextValidId. Если новый заказ размещен с идентификатором заказа, меньшим или равным идентификатору заказа предыдущего заказа, произойдет ошибка.
Это моя проблема. Когда я попытался изменить заказ, как указано выше, я получил ошибку «Duplicate Order ID», и это так же, как указано выше в отношении идентификатора заказа.
Итак, как мне изменить цену или количество открытого ордера?
Это довольно обычно в моем приложении, и не всегда понятно почему. Я полагаю, вы использовали OrderId в другом месте, который выше, чем этот. Это не должно лишать законной силы ранее использованный идентификатор заказа, но иногда делает.
Я решил проблему следующим образом:
Отменить заказ
Получите новый идентификатор заказа, запросив nextValidId. Call reqIds (1);
Создайте новый заказ с теми же данными (и внесите изменения)
Отправить новый заказ, используя новый идентификатор
Конечно, это не меняет открытый ордер буквально, но результат тот же.
Других решений пока нет …