[英]What is the proper way to use Interactive Broker API's IOrderHandler interface in Java?
我目前正在开发一个用于使用Interactive Broker的API进行交易的Java应用程序。 我遇到了一个问题,我不确定我做错了什么或者这是否是API中的错误。
目前,我目前可以使用以下电话提交订单:
m_controller.placeOrModifyOrder( m_contract, m_order, new IOrderHandler() {
@Override
public void orderStatus(OrderStatus status, int filled, int remaining, double avgFillPrice, long permId, int parentId, double lastFillPrice, int clientId, String whyHeld) {
/*dbgMsg(String.format("Status: %s - Filled: %d - Remaining: %d - Avg F px: %f - Permid: %d - Parentid: %d - Last Fill Px: %f - Client id: %d - WhyHeld: %d",
status.toString(),
filled,
remaining,
avgFillPrice,
permId,
parentId,
lastFillPrice,
clientId,
whyHeld));*/
System.out.println("Order Status");
}
@Override
public void orderState(NewOrderState orderState) {
m_controller.removeOrderHandler( this);
System.out.println("Order state "+orderState.toString());
// TODO Auto-generated method stub
//dbgMsg(orderState.toString());
}
@Override
public void handle(int errorCode, String errorMsg) {
//dbgMsg(String.format("ORDER ERROR [%d]: %s", errorCode, errorMsg));
System.out.println("Order Error: "+errorMsg);
}
});
我遇到的问题是,在通过API在Trader Workstation上传输并执行定单时,我没有收到针对已创建定单的任何更新。
我还验证了我实际上是通过ILiveOrdersHandler接收订单更新的,该更新基本上提供了所有订单的状态更新。
我不知道这是我自己的编程问题还是底层API的问题; 通过在其程序中的相应处理程序中添加System.out.println()调用,我还从IB提供的示例代码中确认了此行为。
任何帮助将不胜感激。
您是否获得到orderState()的回调?
你打电话时
m_controller.removeOrderHandler(this);
您可以有效地从ApiController的处理程序列表中删除处理程序,这意味着您将不再获得有关此order-id的任何回调。
如果您检查源代码,则可以看到ApiController回调了您的处理程序(由于其与订单ID相关联),并随后回调了所有实时订单处理程序。
签出orderStatus代码,例如:
IOrderHandler handler = m_orderHandlers.get( orderId);
if (handler != null) {
handler.orderStatus( OrderStatus.valueOf( status), filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld);
}
for (ILiveOrderHandler liveOrderHandler : m_liveOrderHandlers) {
liveOrderHandler.orderStatus(orderId, OrderStatus.valueOf( status), filled, remaining, avgFillPrice, permId, parentId, lastFillPrice, clientId, whyHeld);
}
通过删除“ m_controller.removeOrderHandler(this);” 您可以有效地从回调函数(EReader线程)获得反馈。
但是,似乎订单立即被执行(以要价购买,以买入价卖出),由于订单不再有效,orderStatus方法无效。 因此,例如,还应该通过reqExecutions方法检查订单状态。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.