【问题标题】:Order id placeorder Java interactive brokersOrder id placeorder Java 交互式代理
【发布时间】:2017-04-13 16:01:10
【问题描述】:

目前我每次下单都用

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 的任何想法?

谢谢。

【问题讨论】:

标签: java interactive-brokers ibrokers


【解决方案1】:

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

注意,当socket连接启动时,IB会在nextValidId回调中返回下一个有效id,所以你总是知道从哪个数字开始。

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

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

【讨论】:

  • 我想我需要重置它,因为我测试了一个 1000000000 的订单
  • 我只是做 public void nextValidId(int orderId) { m_s.placeOrder(orderId+1, c, order);}
  • 你还有 1147483647 个整数 ;)。要重置,请转到 configure->api 并单击 reset api order sequence 按钮。但实际上,您不需要查看 orderId,只需将其分配给 nextValidId 中的变量并始终递增 1。
猜你喜欢
  • 2020-03-29
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多