2

我正在使用node-ib npm,我想下一个组合订单。

我做的步骤:

  1. 获取两条腿定义的合约 ID。

  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 工作站。

正常订单会毫无问题地添加到交易者工作站。

有谁知道如何通过这个 npm 使用 API 将组合订单添加到 Trader 工作站?

谢谢大家:)

4

1 回答 1

0

这显然为时已晚,但对于其他来这里寻找答案的人来说,这对我有用。无需更改库文件。只需确保使用 reqContractDetails() 获取 c1 和 c2 即可。

  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'));
于 2020-12-08T22:47:30.823 回答