关于 ibkr
ibkr 是通过本地运行的 Interactive Brokers TWS 或 IB Gateway 查询账户数据和下单的命令行技能。默认使用模拟交易配置,凭据保留在网关中,不传给技能。
主要功能
- 01查询账户和持仓
- 02查看订单与成交记录
- 03获取行情和历史价格
- 04提交或取消订单
- 05配置模拟或实盘模式
适用场景
- 01核对账户信息和持仓
- 02查看未完成订单或成交
- 03获取报价和历史行情
- 04提交或取消经纪账户订单
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ starchild-ai-agent/ official-skills --skill ibkr安装后在 Claude Code 中输入/ibkr确认已加载。
附带文件scripts/ibkr_cli.py
详细介绍
这是什么 — 请先阅读
🖥️ 本地网关代理。 IBKR 没有基于密钥的公共 API。你需要在一台机器上运行 Trader Workstation (TWS) 或更轻量的 IB Gateway,登录并启用 API 套接字,然后此 CLI 会通过本地套接字连接。你的 IBKR 凭据保存在 TWS 中,不会传给此技能。
⚠️ 默认情况下,这无法在 Starchild 容器中使用,因为 TWS 运行在你的计算机上,而容器中的 127.0.0.1 指向容器本身。有两种使用方式:
- 本地运行 — 在自己的计算机上运行 TWS/Gateway 和此脚本。(最简单)
- 桥接网络 — 在容器可访问的主机上运行 IB Gateway,将容器的 IP 添加到 TWS 的“Trusted IPs”,并设置
IBKR_HOST/IBKR_PORT。网络和安全由你负责;切勿将 API 套接字暴露到开放互联网。
如果 status 提示套接字未在监听,原因就在这里。
设置 TWS / IB Gateway(一次性)
- 从 interactivebrokers.com → Trading → Platforms 下载 TWS 或 IB Gateway。IB Gateway 更轻量,也更适合无头运行;TWS 则提供完整的图形界面。
- 登录。模拟交易: IBKR 为每个账户提供免费的模拟交易登录(账户 ID 以
DU开头);测试时请登录模拟交易会话。 - 启用 API:进入 TWS → File → Global Configuration → API → Settings,勾选 "Enable ActiveX and Socket Clients"。如需交易,请不要勾选 "Read-Only API"(只读模式会阻止下单)。记下 Socket port。
- 默认端口:7497 = TWS 模拟交易,7496 = TWS 实盘,4002 = IB Gateway 模拟交易,4001 = IB Gateway 实盘。
- 市场数据需要账户订阅相应的数据服务,否则行情或 K 线数据会为空。
配置(.env)
无需密钥,只需指定网关位置。如果使用非默认值,请通过安全输入方式获取。
| 变量 | 必需 | 备注 |
|---|---|---|
IBKR_HOST | 否 | 默认为 127.0.0.1 |
IBKR_PORT | 否 | 覆盖配置文件默认端口(7497 模拟交易 / 7496 实盘) |
IBKR_CLIENT_ID | 否 | API 客户端 ID,默认为 1(并发连接时请使用不同的 ID) |
IBKR_ACCOUNT | 否 | 指定账户代码(例如 DU1234567);留空 = 第一个受管理的账户 |
模拟账户以 DU 开头,实盘账户以 U 开头。--profile paper 可防止意外连接到实盘账户。
用法
首次运行时执行 pip install ib_async。输出为 JSON。默认配置文件为 paper(端口 7497)。
python skills/ibkr/scripts/ibkr_cli.py status # checks socket + lists managed accounts
python skills/ibkr/scripts/ibkr_cli.py account
python skills/ibkr/scripts/ibkr_cli.py positions
python skills/ibkr/scripts/ibkr_cli.py orders [--executions]
python skills/ibkr/scripts/ibkr_cli.py quote --symbol AAPL
python skills/ibkr/scripts/ibkr_cli.py history --symbol AAPL --duration "30 D" --bar-size "1 day"
# place (paper): qty in units; market or limit; contract defaults STK/SMART/USD
python skills/ibkr/scripts/ibkr_cli.py place --symbol AAPL --side buy --qty 10 --type limit --limit-price 180 --tif day
python skills/ibkr/scripts/ibkr_cli.py cancel --order-id <numeric-id>
# live (real money): TWS on live port + --confirm-live
python skills/ibkr/scripts/ibkr_cli.py --profile live --confirm-live place --symbol AAPL --side buy --qty 1
非美国市场或非股票类工具:请传入 --exchange、--currency、--sec-type(例如,外汇可使用 --sec-type CASH --symbol EUR --currency USD --exchange IDEALPRO)。history 使用 IB 的 --duration("30 D"、"1 Y")和 --bar-size("1 day"、"1 hour"、"5 mins")。
注意事项
- “socket not listening” / connection refused = TWS 未运行、未登录、运行在另一台机器上、端口错误或 API 套接字未启用。请重新阅读设置步骤 3。
- 如需下单,TWS 设置中的 "Read-Only API" 必须关闭,否则即使使用
--confirm-live,下单也会被静默阻止。 cancel需要数字形式的 IBKR 订单 ID,且只能取消当前会话/账户中仍处于未结状态的订单。- 如果账户未订阅相应的市场数据服务,行情/历史数据将为空。
- 如果 TWS 提示客户端 ID 已在使用,请使用唯一的
IBKR_CLIENT_ID。