Клиентская библиотека Interactive Brokers TWS API для Node.js — комбинированный заказ

Я использую node-ib npm, я хочу разместить комбинированный ордер.

Шаги, которые я сделал:

  1. получение идентификаторов контрактов для обоих определений ног.

  2. Как только программа получает значение conId для каждой ноги, я включаю его в объект ComboLeg.

  3. Затем я вызываю метод placeOrder() с объектами контракта и заказа.

    var leg1 = {
        conId: c1,
        ratio: 1,
        action: "SELL",
        exchange: "SMART",
        openClose: 0,
        shortSaleSlot: 0,
        designatedLocation: ""
    }
    
    var leg2 = {
        conId: c2,
        ratio: 1,
        action: "BUY",
        exchange: "SMART",
        openClose: 0,
        shortSaleSlot: 0,
        designatedLocation: ""
    }
    
    var legs = [leg1, leg2];
    
    ib.placeOrder(
        6,
        ib.contract.combo("USD", "USD", "SMART", legs),
        ib.order.limit("BUY", 1, 1)
    );
    
    ib.reqOpenOrders();
    

значения c1, c2 являются conIds.

я не нашел способа добавить comboLegs в контракт, поэтому я открыл /node_modules/ib/lib/contract/combo.js и добавил новый аргумент в функцию.

function combo(symbol, currency, exchange, comboLegs) {
   assert(_.isString(symbol), 'Symbol must be a string.');

  return {
     currency: currency || 'USD',
     exchange: exchange || 'SMART',
     secType: 'BAG',
     symbol: symbol,
     comboLegs: comboLegs || []
 };
}

Последний аргумент - тот, который я добавил.

я не получаю никаких ошибок, но комбинированный заказ не добавляется на рабочую станцию ​​трейдера.

Обычный ордер без проблем добавляется на рабочую станцию ​​трейдера.

Кто-нибудь знает, как добавить комбо-ордер на рабочую станцию ​​​​Trader с помощью API этим npm?

Спасибо всем:)


person Saif Adnan    schedule 04.08.2014    source источник


Ответы (1)


Это, очевидно, слишком поздно, но для других, которые ищут здесь ответ, это то, что сработало для меня. Нет необходимости изменять файл библиотеки. Просто убедитесь, что вы получили свои c1 и c2, используя reqContractDetails() для каждого.

  var leg1 = {
      conId: c1,
      ratio: 1,
      action: "BUY",
      exchange: "SMART",
  }
  var leg2 = {
      conId: c2,
      ratio: 1,
      action: "SELL",
      exchange: "SMART",
  }

  var contract = ib.contract.combo(symbol);
  contract.comboLegs = [leg1, leg2];

  console.log(`contract = `, contract);

  ib.placeOrder(
      601,
      contract,
      ib.order.limit("BUY", 1, 1)
  );

Вот пример получения c1 и c2:

ib.reqContractDetails(0, ib.contract.option('AAPL', '20210115', 130, 'C'));
ib.reqContractDetails(1, ib.contract.option('AAPL', '20210115', 145, 'C'));
person user2632302    schedule 08.12.2020