介绍
# IBKR Trading Skill
使用 Client Portal Gateway API 通过 Interactive Brokers 自动化交易。
## 概述
此技能支持: - 通过 IBeam + IBKR Key 进行自动化的 IBKR 身份验证 - 投资组合和持仓监控 - 订单下单与管理 - 构建自定义交易策略
## 先决条件
- IBKR 账户(实盘或模拟盘) - 手机上安装了 IBKR Key 应用(用于 2FA 双重验证) - 安装了 Java 11+ 和 Chrome/Chromium 的 Linux 服务器
## 快速设置
### 1. 安装依赖
```bash # Java (for Client Portal Gateway) sudo apt-get install -y openjdk-17-jre-headless
# Chrome + ChromeDriver (for IBeam) sudo apt-get install -y chromium-browser chromium-chromedriver
# Virtual display (headless auth) sudo apt-get install -y xvfb
# Python venv python3 -m venv ~/trading/venv source ~/trading/venv/bin/activate pip install ibeam requests ```
### 2. 下载 Client Portal Gateway
```bash cd ~/trading wget https://download2.interactivebrokers.com/portal/clientportal.gw.zip unzip clientportal.gw.zip -d clientportal ```
### 3. 配置凭证
创建 `~/trading/.env`: ```bash IBEAM_ACCOUNT=your_username IBEAM_PASSWORD='your_password' IBEAM_GATEWAY_DIR=/path/to/trading/clientportal IBEAM_CHROME_DRIVER_PATH=/usr/bin/chromedriver IBEAM_TWO_FA_SELECT_TARGET="IB Key" ```
## 身份验证
### 启动 Gateway + 身份验证
```bash # 1. Start Client Portal Gateway cd ~/trading/clientportal && bash bin/run.sh root/conf.yaml &
# 2. Wait for startup (~20 sec) sleep 20
# 3. Run IBeam authentication cd ~/trading source venv/bin/activate source .env export DISPLAY=:99 Xvfb :99 -screen 0 1024x768x24 & python -m ibeam --authenticate ```
**重要:** 用户必须在约 2 分钟内在手机上批准 IBKR Key 通知!
### 检查身份验证状态
```bash curl -sk https://localhost:5000/v1/api/iserver/auth/status ```
经过身份验证的响应包含 `"authenticated": true`。
## API 使用
### 账户信息
```bash # List accounts curl -sk https://localhost:5000/v1/api/portfolio/accounts
# Account summary curl -sk "https://localhost:5000/v1/api/portfolio/{accountId}/summary" ```
### 持仓
```bash # Current positions curl -sk "https://localhost:5000/v1/api/portfolio/{accountId}/positions/0" ```
### 市场数据
```bash # Search for symbol curl -sk "https://localhost:5000/v1/api/iserver/secdef/search?symbol=AAPL"
# Get quote (after searching) curl -sk "https://localhost:5000/v1/api/iserver/marketdata/snapshot?conids=265598&fields=31,84,86" ```
### 下单
```bash curl -sk -X POST "https://localhost:5000/v1/api/iserver/account/{accountId}/orders" \ -H "Content-Type: application/json" \ -d '{ "orders": [{ "conid": 265598, "orderType": "MKT", "side": "BUY", "quantity": 1, "tif": "DAY" }] }' ```
## 会话管理
会话大约 24 小时后过期。选项:
1. **保活 cron** - 每 5 分钟 ping 一次 `/v1/api/tickle` 2. **自动重新认证** - 会话过期时运行 IBeam(需要手机批准)
### 保活脚本
```python import requests import urllib3 urllib3.disable_warnings()
def keepalive(): try: r = requests.post("https://localhost:5000/v1/api/tickle", verify=False, timeout=10) status = requests.get("https://localhost:5000/v1/api/iserver/auth/status", verify=False, timeout=10) return status.json().get("authenticated", False) except: return False ```
## 故障排除
| 问题 | 解决方案 | |-------|----------| | Gateway 无响应 | 检查 Java 进程是否正在运行:`ps aux \| grep GatewayStart` | | 登录超时 | 用户未及时批准 IBKR Key - 重试身份验证 | | 连接被拒绝 | Gateway 未启动 - 运行 `bin/run.sh root/conf.yaml` | | Chrome 错误 | 确保 Xvfb 正在运行:`Xvfb :99 &` 和 `export DISPLAY=:99` |
## 文件参考
请参阅 `references/api-endpoints.md` 获取完整的 API 文档。 请参阅 `scripts/` 获取可立即使用的自动化脚本。