【问题标题】:bracket order trailing stop loss java interactive brokers括号订单追踪止损java交互式经纪人
【发布时间】:2017-04-27 15:58:01
【问题描述】:

在 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");
}

【问题讨论】:

  • string 不是 Java 中的类/类型,它是 String。通过在 Google 中输入您的错误,我花了大约 2 秒的时间找到 How to initialize List<String> object in Java?nextOrderID 从未在您的代码中提及。发帖a minimal and complete example 并在每个帖子中坚持一个问题,否则问题可能不在您发布的代码中,帖子将没有什么未来价值(这会让我们不高兴)。
  • 另外,更新了问题。感谢您的反馈杜克

标签: java algorithmic-trading interactive-brokers


【解决方案1】:

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

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

【讨论】:

  • 再次感谢B
猜你喜欢
  • 1970-01-01
  • 2021-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-29
相关资源
最近更新 更多