订单id placeorder Java交互式代理

订单id placeorder Java交互式代理,java,interactive-brokers,ibrokers,Java,Interactive Brokers,Ibrokers,目前,每次我向 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(randomNu

目前,每次我向

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的想法


谢谢

您的orderId不应该是随机数。他们的人数必须一直在增加
last id used+1
是最佳算法<代码>重复订单id实际上可以表示“不是增加的订单id”

请注意,当套接字连接启动时,IB返回NextValidd回调中的下一个有效id,因此您总是知道要从哪个号码开始

有些人(包括我)对某些请求使用数字范围,以便id错误可以与请求类型关联。例如,我对
reqMktData
类型请求使用<1000的数字。一旦您拨打
placeOrder
,号码>1000,IB将不会允许您使用较低的号码下单


实际上,您可以重置
orderId
序列,但我从来没有这样做过,在
ints
用完之前也不会这么做

如果您使用的是JavaSE7,那么就有一个bug。检查这个和这个答案,我想我需要重置它,因为我测试了1000000000的订单,我是否只做public void nextValidId(int-orderId){m_.s.placeOrder(orderId+1,c,order);}还剩下1147483647个int;)。要重置,请转到配置->api,然后单击重置api顺序按钮。但实际上,您不需要查看orderId,只需将其分配给
nextvalidd
中的一个变量,并始终递增一。