1

目前每次我下订单时

order.m_action = "BUY";
order.m_totalQuantity = 1;
order.m_lmtPrice = 4.00;
order.m_orderType = "LMT";  
order.m_account = "U123123";
int randomNum = ThreadLocalRandom.current().nextInt(1, 5564 + 1)                    
m_s.placeOrder(randomNum, c, order);

我收到错误消息:

1041 103 Duplicate order id

关于为新挂单生成新 ID 的任何想法?

谢谢。

4

1 回答 1

2

您的 orderId 不应该是随机数。他们必须一直在增加数量。 last id used +1是最好的算法。 Duplicate order id实际上可以表示“不是递增的订单 ID”。

请注意,当套接字连接启动时,IB 在 nextValidId 回调中返回下一个有效 id,因此您始终知道从哪个数字开始。

有些人(包括我)对某些请求使用数字范围,以便将带有 id 的错误与请求类型相关联。例如。reqMktData我对类型请求使用 < 1000 的数字。一旦您placeOrder使用大于 1000 的号码致电,IB 绝不会让您使用较低的号码进行订单。

您实际上可以重置orderId序列,但我从来没有这样做过,直到我用完ints.

于 2017-04-19T13:32:43.007 回答