Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用交互式代理API的正确方法是什么;Java中的IOrderHandler接口?_Java_Api_Interactive Brokers - Fatal编程技术网

使用交互式代理API的正确方法是什么;Java中的IOrderHandler接口?

使用交互式代理API的正确方法是什么;Java中的IOrderHandler接口?,java,api,interactive-brokers,Java,Api,Interactive Brokers,我目前正在使用InteractiveBroker的API开发一个用于交易的Java应用程序。 我遇到了一个问题,我不确定我做错了什么,或者这是否是API中的错误 此时,我当前可以使用以下调用提交订单: m_controller.placeOrModifyOrder( m_contract, m_order, new IOrderHandler() { @Override public void orderStatus(OrderStatus status, in

我目前正在使用InteractiveBroker的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接收订单更新,ILiveOrdersHandler基本上提供所有订单的状态更新

我不知道这是我的编程问题还是底层API的问题;我还通过向程序中相应的处理程序添加System.out.println()调用,在IB提供的示例代码中确认了这种行为


任何帮助都将不胜感激。

您是否收到orderState()的回调

当你打电话的时候

m_controller.removeOrderHandler(this);
您可以有效地从ApiController的处理程序列表中删除您的处理程序,这意味着您将不会再收到有关此order-id的任何回调

如果您检查源代码,您可以看到ApiController回调您的处理程序(因为它与订单id关联),然后回调所有实时订单处理程序

查看订单状态代码,例如:

    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方法检查订单状态。

什么是orderStatus()覆盖?它应该是EWrapper接口中的方法。请注意,一些状态更改是您的编程责任——“挂起”状态。OrderStatus将覆盖ApicController.java(第669行至第671行)中的IOrderHandler接口定义,大致与ILiveOrderHandler(第711行至第716行)中覆盖同名Methodo的方式相同。我可以让ILiveOrderHandler覆盖正常工作,并且可以毫无问题地向我提供订单数据;我在使用IOrderHandler接收数据时遇到问题-我的解决方法是按订单id从ILiveOrderHandler中筛选orderStatus的结果,以获得更准确的结果。哎呀,我忘记了新的ApicController。我只是用包装纸。