用于Node.js的Interactive Brokers TWS API客户端库-组合订单



我正在使用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值为conid。

我没有找到一种方法来添加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 || []
 };
}

最后一个参数是我添加的。

我没有得到错误,但组合订单不添加到交易员工作站。

正常的订单被添加到交易员工作站没有问题。

有人知道如何添加组合订单到交易员工作站使用这个npm API吗?

谢谢:)

这显然太晚了,但是对于那些来这里寻找答案的人来说,这对我来说是有效的。不需要更改库文件。只要确保你得到你的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'));

相关内容

  • 没有找到相关文章

最新更新