Paper Account(模拟账户) 是学习 TWS API 时最重要的安全环境。它适合验证合约查询、历史 K 线、订单预览和模拟下单流程,但不能等同于真实交易环境。
| 功能 | 是否适合 | 说明 |
|---|
| TWS API 连接 | 适合 | 可以验证 127.0.0.1、端口、clientId、nextValidId 和回调链路。 |
| 合约详情 | 适合 | 可以用 reqContractDetails() 确认股票、期权、期货等合约定义。 |
| 历史 K 线 | 适合 | 可以验证 reqHistoricalData() 参数、返回周期和行情权限边界。 |
| 账户与持仓 | 适合 | 可以读取模拟账户的账户摘要、持仓、盈亏和保证金字段。 |
| WhatIf 订单 | 适合 | 可以预览订单对保证金和风险的影响,不会真正提交成交。 |
| 模拟下单、改单、撤单 | 适合 | 可以验证 placeOrder()、orderStatus()、openOrder() 和撤单流程。 |
| 真实成交表现 | 不适合 | 模拟成交、滑点、排队和真实市场流动性不能完全代表实盘。 |
| 实时行情权限 | 部分适合 | 模拟账户也会受市场数据订阅、延迟行情和交易所权限影响。 |
| 差异 | 说明 |
|---|
| 资金不是真实资金 | 模拟账户适合学习和测试,但不能证明策略在真实资金中一定安全。 |
| 成交机制不同 | 模拟成交可能比真实市场理想,不能直接用来评估滑点和冲击成本。 |
| 权限仍然存在 | 行情订阅、交易权限、地区限制和产品权限仍可能影响 API 返回。 |
| 风控提示仍要处理 | 即使是模拟账户,订单参数错误、风险提示和交易限制也可能阻止订单。 |
| 环境可能不同 | Paper 和 Live 的端口、登录状态、账户 ID、权限和订单状态都要分开确认。 |
| 客户端 | 模拟账户端口 | 实盘账户端口 |
|---|
| TWS | 7497 | 7496 |
| IB Gateway | 4002 | 4001 |
端口不是写死规则,最终以 TWS 或 IB Gateway 的 API 设置页为准。复制示例代码前,先确认代码里的 host 和 port 与当前客户端设置一致。
- 第一步只测试
reqCurrentTime(),确认连接可用。
- 第二步测试
reqContractDetails(),确认合约定义唯一。
- 第三步测试历史 K 线或账户查询,确认请求和回调能正确对应。
- 下单章节先使用
whatIf=True,再在模拟账户里做低风险限价单、改单和撤单验证。
- 每个测试脚本使用不同
clientId,避免多个程序互相抢订单状态。
| 规则 | 原因 |
|---|
| 不展示完整账号 | 文档、截图和日志都应隐藏账号、姓名、订单号和资产信息。 |
| 不把 TWS API 端口开放到公网 | TWS API Socket 不是公开互联网接口。 |
| 真实账户和模拟账户分开配置 | 防止把测试脚本误连到真实账户。 |
| 订单示例先用模拟账户 | 先确认合约、价格、数量、订单类型和撤单流程。 |
| 不用模拟账户证明收益 | 模拟环境只适合验证 API 行为和代码流程,不代表实盘结果。 |