
ib_insync 库的用户在管理交易时常需获取合约id (conid)。本文将详细指导如何通过 ib_insync 的 trade 对象高效地提取合约id。不同于 order 对象,trade 对象直接关联其对应的 contract 对象,从而方便地访问 conid。我们将通过具体代码示例,演示连接到 tws/gateway、获取开放交易并遍历提取 conid 的完整流程。
ib_insync 是一个功能强大且易于使用的 Python 库,用于与盈透证券 (Interactive Brokers) 的交易工作站 (TWS) 或 IB Gateway 进行异步通信。在进行自动化交易或管理订单时,准确识别和引用交易合约至关重要。合约ID (conID) 是盈透证券系统中唯一标识一个特定合约的关键数字。本文旨在提供一个专业的教程,指导您如何在使用 ib_insync 时,从交易对象中高效地提取所需的 conID。
在使用 ib_insync 进行交易时,理解 Order 和 Trade 对象的区别是获取合约信息的基础。
问题的核心在于,Order 对象本身通常不直接包含 Contract 对象或其 conID,而 Trade 对象则通过其 contract 属性提供了这一关键信息。
获取 conID 的推荐方法是利用 ib.openTrades() 返回的 Trade 对象。每个 Trade 对象都包含一个 contract 属性,该属性是一个 Contract 对象实例,其中就包含了 conID。
以下是详细的步骤和示例代码:
from ib_insync import IB, util, Contract
# 确保 asyncio 事件循环已启动
# ib_insync 是基于 asyncio 构建的,此行确保了异步操作的正常运行
util.startLoop()
# 创建 IB 实例
ib = IB()
try:
# 连接到 TWS 或 IB Gateway
# 请根据您的实际情况修改 IP 地址和端口
# 默认 TWS 端口为 7496,Gateway 端口为 4001/4002 (模拟/实盘)
# 示例中使用的是 TWS 模拟账户的默认端口
ib.connect("127.0.0.1", 7491, clientId=4)
print("成功连接到 IB TWS/Gateway。")
# 获取所有当前开放的交易
# openTrades() 返回一个 Trade 对象的列表
# 这些 Trade 对象代表了已提交但尚未完全完成的订单
openTrades = ib.openTrades()
print(f"当前有 {len(openTrades)} 笔开放交易。")
if not openTrades:
print("没有找到任何开放交易。")
else:
# 遍历每笔开放交易以获取其关联的合约ID
print("\n--- 开放交易及其合约ID ---")
for trade in openTrades:
# 每个 Trade 对象都有一个关联的 Contract 对象
# 这个 Contract 对象包含了该交易的所有合约细节
contract = trade.contract
# 从 Contract 对象中获取 conID 以及其他有用的合约信息
print(f"交易ID: {trade.order.orderId if trade.order else 'N/A'}, "
f"合约符号: {contract.symbol}, "
f"交易所: {contract.exchange}, "
f"合约类型: {contract.secType}, "
f"合约ID (conID): {contract.conId}")
except Exception as e:
# 捕获连接或操作过程中可能发生的任何异常
print(f"连接或操作过程中发生错误: {e}")
finally:
# 确保在程序结束时断开与 IB TWS/Gateway 的连接
if ib.isConnected():
ib.disconnect()
print("已断开与 IB TWS/Gateway 的连接。")
通过 ib_insync 获取合约ID (conID) 的最有效和直接的方法是利用 ib.openTrades() 返回的 Trade 对象。每个 Trade 对象都封装了其对应的 Contract 对象,从而允许您通过 trade.contract.conId 轻松访问合约的唯一标识符。理解 Order 和 Trade 对象之间的区别,并选择正确的API方法,是高效利用 ib_insync 进行自动化交易的关键。遵循本文提供的代码示例和注意事项,您将能够可靠地提取所需的合约信息。
以上就是ib_insync 教程:从交易对象中获取合约ID (conID)的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号