我正在使用node-ib npm,我想放置一个组合订单。
我所做的步骤:
-
获取两条腿定义的合同id
-
一旦程序获得了每条腿的conId值,我将其包含在ComboLeg对象中。
-
然后用合约和订单对象调用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'));