0

0

使用 ib_insync 获取交易合约 ID (conID) 的教程

聖光之護

聖光之護

发布时间:2025-12-02 14:07:22

|

475人浏览过

|

来源于php中文网

原创

使用 ib_insync 获取交易合约 id (conid) 的教程

本教程详细介绍了如何在使用 `ib_insync` 库与盈透证券TWS API交互时,从交易对象中获取关联的合约ID (conID)。通过利用 `ib.openTrades()` 方法返回的 `Trade` 对象,用户可以方便地访问每个交易中包含的 `contract` 属性,进而提取出唯一的合约标识符 `conId`,从而有效地将订单或交易与具体的金融工具关联起来。

理解 ib_insync 中的订单与合约关联

在使用 ib_insync 库进行自动化交易时,经常需要将执行的订单或当前的交易头寸与其所代表的金融合约进行关联。盈透证券API中的合约ID (conID) 是一个唯一的整数标识符,用于精确识别一个特定的金融工具(如股票、期货、期权等)。虽然 ib.orders() 方法返回的 Order 对象本身可能不直接包含 conId 属性,但通过 ib.openTrades() 方法获取的 Trade 对象则提供了这种直接的关联。

Trade 对象在 ib_insync 中代表了一个活跃的订单或一个已建立的头寸。每个 Trade 对象都包含一个 contract 属性,这个属性是一个 Contract 对象实例,它详细描述了该交易涉及的金融工具。从这个 Contract 对象中,我们可以轻松地获取到 conId。

MaxAI
MaxAI

MaxAI.me是一款功能强大的浏览器AI插件,集成了多种AI模型。

下载

获取合约 ID 的步骤与示例

以下是使用 ib_insync 连接到 TWS/Gateway 并从开放交易中提取合约 ID 的详细步骤和代码示例:

  1. 导入必要的模块:首先,需要从 ib_insync 库中导入 IB 和 util 模块。
  2. 启动事件循环:ib_insync 依赖于 asyncio 事件循环,因此在连接之前需要通过 util.startLoop() 启动它。
  3. 创建 IB 实例并连接:实例化 IB 类,并使用 ib.connect() 方法连接到本地运行的 TWS 或 IB Gateway。
  4. 获取开放交易:使用 ib.openTrades() 方法获取所有当前开放的交易。这个方法会返回一个 Trade 对象的列表。
  5. 遍历交易并提取合约 ID:迭代 openTrades 列表中的每个 Trade 对象。对于每个 trade,访问其 trade.contract 属性,这将返回一个 Contract 对象。最后,从 Contract 对象中提取 conId。
  6. 断开连接:完成操作后,使用 ib.disconnect() 断开与 TWS/Gateway 的连接。
from ib_insync import IB, util, Contract

# 1. 启动 asyncio 事件循环
util.startLoop()

# 2. 创建 IB 实例
ib = IB()

try:
    # 3. 连接到 TWS/Gateway
    # 确保 TWS 或 IB Gateway 正在运行,并且端口和 clientId 正确
    # 默认端口 TWS: 7496, Gateway: 7497 (实时), 4001 (模拟)
    ib.connect("127.0.0.1", 7496, clientId=4)
    print("成功连接到盈透证券 TWS/Gateway。")

    # 4. 获取所有开放交易
    # openTrades() 返回一个 Trade 对象的列表
    openTrades = ib.openTrades()
    print(f"检测到 {len(openTrades)} 个开放交易。")

    if not openTrades:
        print("当前没有开放的交易。")
    else:
        # 5. 遍历开放交易以访问合约 ID
        for trade in openTrades:
            # 每个 trade 对象都有一个关联的 contract 属性
            contract = trade.contract
            # 从 contract 对象中打印合约 ID (conId)
            print(f"--------------------------------------------------")
            print(f"交易 ID: {trade.order.orderId}") # 打印关联的订单ID
            print(f"合约符号: {contract.symbol}")
            print(f"合约类型: {contract.secType}")
            print(f"合约交易所: {contract.exchange}")
            print(f"合约 ID (conID): {contract.conId}")
            print(f"交易状态: {trade.orderStatus.status}") # 打印订单状态
            print(f"--------------------------------------------------")

except Exception as e:
    print(f"连接或操作过程中发生错误: {e}")
finally:
    # 6. 断开与 TWS/Gateway 的连接
    if ib.isConnected():
        ib.disconnect()
        print("已断开与盈透证券 TWS/Gateway 的连接。")

注意事项与进阶

  • Order 与 Trade 的区别:ib.orders() 返回的是 Order 对象,它代表了您提交的订单指令。而 ib.openTrades() 返回的是 Trade 对象,它代表了当前活跃的订单或已执行并持有头寸的交易。Trade 对象比 Order 对象包含了更多的实时状态信息,并且关键在于它直接关联了 Contract 对象。
  • 历史订单:如果需要获取历史订单的合约信息,ib_insync 提供了 ib.reqHistoricalOrders() 或通过 ib.fills() 获取成交记录,这些记录通常也包含关联的合约信息。对于已完成的订单,可能需要根据 orderId 或其他信息自行查询对应的合约。
  • Contract 对象的丰富信息:Contract 对象不仅包含 conId,还包含 symbol (股票代码), secType (证券类型,如STK, FUT, OPT), exchange (交易所), currency (货) 等详细信息。这些信息对于识别和管理交易至关重要。
  • 错误处理:在实际应用中,务必添加适当的错误处理机制,例如 try-except-finally 块,以确保连接的健壮性和资源的正确释放。
  • 客户端 ID (clientId):在 ib.connect() 中使用的 clientId 必须是唯一的,否则可能会导致连接冲突。

总结

通过 ib_insync 库的 ib.openTrades() 方法,我们可以高效地获取到所有活跃交易的 Trade 对象。每个 Trade 对象都包含一个 contract 属性,通过访问 trade.contract.conId,用户可以轻松地获取到与该交易关联的唯一合约 ID。这种方法是 ib_insync 中连接交易与具体金融工具的关键途径,对于构建复杂的交易策略和管理交易数据至关重要。

相关专题

更多
504 gateway timeout怎么解决
504 gateway timeout怎么解决

504 gateway timeout的解决办法:1、检查服务器负载;2、优化查询和代码;3、增加超时限制;4、检查代理服务器;5、检查网络连接;6、使用负载均衡;7、监控和日志;8、故障排除;9、增加缓存;10、分析请求。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

567

2023.11.27

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.12.07

mysql标识符无效错误怎么解决
mysql标识符无效错误怎么解决

mysql标识符无效错误的解决办法:1、检查标识符是否被其他表或数据库使用;2、检查标识符是否包含特殊字符;3、使用引号包裹标识符;4、使用反引号包裹标识符;5、检查MySQL的配置文件等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

182

2023.12.04

Python标识符有哪些
Python标识符有哪些

Python标识符有变量标识符、函数标识符、类标识符、模块标识符、下划线开头的标识符、双下划线开头、双下划线结尾的标识符、整型标识符、浮点型标识符等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

280

2024.02.23

java标识符合集
java标识符合集

本专题整合了java标识符相关内容,想了解更多详细内容,请阅读下面的文章。

254

2025.06.11

c++标识符介绍
c++标识符介绍

本专题整合了c++标识符相关内容,阅读专题下面的文章了解更多详细内容。

121

2025.08.07

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

30

2025.12.13

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

68

2026.01.16

全民K歌得高分教程大全
全民K歌得高分教程大全

本专题整合了全民K歌得高分技巧汇总,阅读专题下面的文章了解更多详细内容。

127

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 8.9万人学习

CSS3 教程
CSS3 教程

共18课时 | 4.7万人学习

Vue 教程
Vue 教程

共42课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号