# 盈透证券 (IBKR) 实盘交易指南 QuantDinger 支持通过盈透证券 TWS 或 IB Gateway 进行美股和港股的实盘交易。 ## 概述 此功能可通过您的盈透证券账户实现美股和港股的自动化交易执行。配置完成后,您的交易策略可以通过 IBKR API 自动下单。 ## 前置条件 - 盈透证券账户 - 已安装 TWS (Trader Workstation) 或 IB Gateway - 已订阅市场数据(用于实时报价) ## 安装 `ib_insync` 库已包含在 `requirements.txt` 中。如需手动安装: ```bash pip install ib_insync ``` ## 端口参考 | 客户端 | 实盘端口 | 模拟盘端口 | |--------|----------|------------| | TWS | 7497 | 7496 | | IB Gateway | 4001 | 4002 | ## TWS / IB Gateway 配置 1. 打开 TWS 或 IB Gateway 2. 进入 **配置** → **API** → **设置** 3. 启用以下选项: - ✅ 启用 ActiveX 和 Socket 客户端 - ✅ 仅允许来自本地主机的连接 4. 设置 Socket 端口(参考上表) 5. 点击 应用 / 确定 ## 策略配置 创建美股或港股策略时,在"实盘交易"部分配置 IBKR 连接: | 字段 | 说明 | 示例 | |------|------|------| | **券商** | 选择"盈透证券" | - | | **主机地址** | TWS/Gateway 主机地址 | `127.0.0.1` | | **端口** | TWS/Gateway API 端口 | `7497`(TWS 实盘) | | **客户端 ID** | 唯一客户端标识 | `1` | | **账户号** | 账户 ID(可选) | 留空自动选择 | ## 代码格式 | 市场 | 格式 | 示例 | |------|------|------| | 美股 | 股票代码 | `AAPL`, `TSLA`, `GOOGL`, `MSFT` | | 港股 | `XXXX.HK` 或数字 | `0700.HK`, `00700`, `700` | ## 交易流程 ``` 策略信号 → 待执行订单队列 → IBKR 执行 → 持仓更新 ``` 1. 您的策略生成买入/卖出信号 2. 信号作为待执行订单入队 3. 后台工作线程连接 IBKR 并执行订单 4. 更新持仓和交易记录 ## 支持的信号类型 | 信号 | 动作 | 说明 | |------|------|------| | `open_long` | 买入 | 开多仓 | | `add_long` | 买入 | 加多仓 | | `close_long` | 卖出 | 平多仓 | | `reduce_long` | 卖出 | 减多仓 | > **注意**:当前版本暂不支持做空交易。 ## API 接口 ### 连接管理 ``` GET /api/ibkr/status # 获取连接状态 POST /api/ibkr/connect # 连接到 TWS/Gateway POST /api/ibkr/disconnect # 断开连接 ``` ### 账户查询 ``` GET /api/ibkr/account # 账户信息 GET /api/ibkr/positions # 当前持仓 GET /api/ibkr/orders # 未成交订单 ``` ### 交易 ``` POST /api/ibkr/order # 下单 DELETE /api/ibkr/order/ # 撤单 ``` ### 行情数据 ``` GET /api/ibkr/quote?symbol=AAPL&marketType=USStock ``` ## 使用示例 ### 测试连接(通过 curl) ```bash curl -X POST http://localhost:5000/api/ibkr/connect \ -H "Content-Type: application/json" \ -d '{"host": "127.0.0.1", "port": 7497, "clientId": 1}' ``` ### 下单 ```bash # 市价单:买入 10 股苹果 curl -X POST http://localhost:5000/api/ibkr/order \ -H "Content-Type: application/json" \ -d '{"symbol": "AAPL", "side": "buy", "quantity": 10, "marketType": "USStock"}' # 限价单:卖出 100 股腾讯 curl -X POST http://localhost:5000/api/ibkr/order \ -H "Content-Type: application/json" \ -d '{"symbol": "0700.HK", "side": "sell", "quantity": 100, "marketType": "HShare", "orderType": "limit", "price": 300}' ``` ## 重要说明 1. **TWS/Gateway 必须运行**:交易前确保 TWS 或 IB Gateway 已启动并登录 2. **市场数据订阅**:实时报价可能需要向 IBKR 订阅市场数据 3. **客户端 ID**:如果多个程序连接同一个 TWS/Gateway,使用不同的 clientId 4. **账户选择**:如有多个子账户,请指定 `account` 参数 5. **交易时间**:订单仅在市场交易时间执行 ## 常见问题排查 | 错误 | 原因 | 解决方案 | |------|------|----------| | 连接失败 | TWS/Gateway 未运行 | 启动并登录 TWS/Gateway | | 连接失败 | 端口错误 | 检查 TWS/Gateway 中的 API 端口设置 | | 连接失败 | API 未启用 | 在 TWS/Gateway 设置中启用 Socket API | | 客户端 ID 冲突 | 相同 clientId 已连接 | 使用不同的 clientId | | 无效合约 | 代码格式错误 | 检查股票代码格式 | | 订单被拒绝 | 资金/保证金不足 | 检查账户余额 | ## Docker 部署 在 Docker 中运行 QuantDinger 时,TWS/IB Gateway 必须能从容器中访问: 1. 在宿主机上运行 TWS/Gateway 2. 使用 `host.docker.internal` 作为主机地址(Docker Desktop) 3. 或配置 host 网络模式 ## 安全建议 - 在 TWS/Gateway 中仅启用"仅允许来自本地主机的连接" - 使用模拟盘账户进行测试 - 在策略中设置适当的仓位限制 - 定期监控您的账户 ## 参见 - [Python 策略开发指南](STRATEGY_DEV_GUIDE_CN.md) - [盈透证券 API 文档](https://interactivebrokers.github.io/tws-api/)