java - 括号订单追踪止损java交互式经纪商

标签 java algorithmic-trading interactive-brokers

在盈透证券 Java API 上,我尝试提交一个带有追踪止损子订单的父订单。现在我可以放置其中之一,但不能同时放置两者。我怎样才能同时提交它们呢?我应该创建一个数组然后下订单吗?

public void sendOrder(String orderSide, int parentOrderId) {
    System.out.println("sendOrder is called");
    Order order = new Order();
    parentOrderId = nextOrderID + 1;
    order.orderId(nextOrderID + 1);
    //order.m_action = "BUY";
    order.action(orderSide);
    //order.m_totalQuantity = 1;
    order.totalQuantity(20000);
    //order.m_lmtPrice = 0.01;
    System.out.println("sendOrder, this.high = " + this.high);

    DecimalFormat df = new DecimalFormat("0.00000"); // TODO get digit according
    String formatedEntryPrice = df.format(this.high);

    System.out.println("formatedEntryPrice = " + formatedEntryPrice);

    order.lmtPrice(Double.valueOf("1.00")); // TODO stop limit at prior day high
    //order.auxPrice(this.high);
    //order.auxPrice(Double.valueOf(formatedEntryPrice));

    //order.m_orderType = "LMT";
    order.orderType("LMT");
    //order.m_account = "U1836253";
    order.account("U1836253");
  order.transmit(false);
    System.out.println("after creating order");


     if (orderSide  == "BUY"){
         Order stopLoss = new Order();
          order.action ("SELL");
        stopLoss.orderId(nextOrderID + 1);
        order.orderType ("TRAIL");
        order.totalQuantity (20000);
        order.trailingPercent (1);
        order.trailStopPrice(low);
        stopLoss.parentId(nextOrderID) ;
         order.transmit(true);
     }


     if (orderSide  == "SELL"){
         Order stopLoss = new Order();
          order.action ("BUY");
        stopLoss.orderId(nextOrderID + 1);
        order.orderType ("TRAIL");
        order.totalQuantity (20000);
        order.trailingPercent (1);
        order.trailStopPrice(low);
        stopLoss.parentId(nextOrderID) ;
         order.transmit(true);
     }





    m_s.placeOrder(nextOrderID + 1, contract, order);

    System.out.println("sendOrder is finished");
    nextOrderID = nextOrderID +1;
    client.reqIds(Integer.valueOf("1"));

    System.out.println("sendOrder is finished 2");
}

最佳答案

您需要通过单独调用 placeOrder 来下每个订单。通过将父订单上的transmit设置为false,IB将保留该订单,直到您提交transmit = true的子订单。 IB 有 example of submitting a bracket order在他们的 API 文档中。

请注意,您的代码似乎也是错误的,因为您正在创建一个名为 stoploss 的子订单,但随后您在 order 上设置其订单属性,即你 parent 的命令。我假设您实际上想在止损订单上设置这些属性。

关于java - 括号订单追踪止损java交互式经纪商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43662603/

相关文章:

algorithmic-trading - MQL4 - 调用 OrderSend() 方法时出现错误 4111

java - Interactive Brokers 订单在 Gateway 和 TWS 中同步吗?

java - 在java中的文件中向后跳

java - Angular 和文件上传

node.js - 如何将 MetaTrader 与 Node.JS 连接?

python - 需要帮助将ibkr API限制为50msg/min

java - SQL关键字黑名单过滤数据

java - 有什么方法可以在 Spring ApplicationContext 加载后像带注释的类一样扫描所有 @Component

java - 如何从 Ubuntu 中正确卸载 Interactive Brokers 的 TWS(交易者工作站)?