如何从ib_insync订单对象中获取合约ID(conID)
获取订单的合约ID(conId)
在ib_insync中,Order对象本身不直接存储合约ID,但每个订单都关联了Contract实例,通过订单的contract属性就能拿到合约的conId(注意字段是小写d)。另外,openTrades()返回的Trade对象也直接包含contract属性,可以直接提取合约ID。
以下是修改后的代码示例:
from ib_insync import IB, util # 启动事件循环 util.startLoop() # 初始化IB实例并连接TWS ib = IB() ib.connect("127.0.0.1", 7491, clientId=4) # 遍历订单,提取每个订单的conId orders = ib.orders() for order in orders: # 确保订单已关联合约,避免空引用报错 if order.contract: print(f"订单ID {order.orderId} 对应的合约ID: {order.contract.conId}") # 遍历未平仓交易,提取conId open_trades = ib.openTrades() for trade in open_trades: print(f"未平仓交易订单ID {trade.order.orderId} 对应的合约ID: {trade.contract.conId}") # 断开连接 ib.disconnect()
注意事项
- 字段名是
conId(小写d),要严格匹配ib_insync的属性命名。 - 部分未关联合约的订单(比如未提交的空订单)可能没有
contract属性,加判断可避免运行时错误。
内容的提问来源于stack exchange,提问作者khrizz
相关产品推荐
相关产品推荐

