跳转到内容

模拟账户限制

Paper Account(模拟账户)是 TWS API 开发阶段最重要的安全缓冲。它适合验证连接、合约、行情请求、订单字段和回调流程,但不能等同于真实交易环境。

官方入口:TWS API Documentation

用途是否适合
验证 TWS API 连接适合
测试 nextValidIdcurrentTime适合
查询合约详情适合
学习账户和持仓回调适合
测试历史行情请求适合,但仍受权限和数据限制影响
测试订单字段和状态回调适合
验证真实成交质量不适合
验证真实滑点和流动性不适合

如果只是学习接口,模拟账户应该是默认选择。它可以让你大胆测试 whatIf=True、小数量限价单、撤单、订单状态和错误回调,而不影响真实资金。

模拟账户和真实账户可能在以下方面不同:

  • 成交逻辑。
  • 可交易产品。
  • 行情权限。
  • 订单风控提示。
  • 资金、保证金和购买力计算。
  • 交易所规则和真实市场状态。

所以,在 Paper Account 中跑通代码,只能说明“程序流程基本正确”,不能说明真实账户一定能按同样方式成交。

很多新手会误以为模拟账户一定包含完整行情。实际不是这样。模拟账户也可能遇到:

现象说明
只能拿到延迟行情账户没有对应交易所实时行情订阅。
逐笔数据报权限错误逐笔数据通常比普通 L1 行情要求更高。
某些历史数据为空产品、交易所、数据类型或时间范围不支持。
期权 Greeks 不完整期权行情和模型数据可能需要对应权限和有效市场数据。

文档示例如果遇到真实权限错误,会保留错误码和说明。这样用户复制代码后遇到相同错误,能判断是权限问题,而不是示例代码一定写错。

建议按下面顺序推进:

  1. 用 Paper Account 验证 connect()nextValidIdcurrentTime
  2. 用 Paper Account 查询 ContractDetails,确认合约唯一。
  3. 用 Paper Account 请求历史行情和延迟行情。
  4. whatIf=True 做订单影响预览。
  5. 在 Paper Account 中提交小数量模拟订单。
  6. 如果未来进入真实账户,重新检查权限、风控、价格和数量。

订单示例应默认使用 Paper Account,并优先使用 whatIf=True

从模拟到账户真实交易的最低要求

Section titled “从模拟到账户真实交易的最低要求”

如果未来要把同一套逻辑迁移到真实账户,至少重新确认:

检查项原因
合约是否唯一避免同一代码匹配到错误交易所、币种或到期日。
订单数量限制防止代码 bug 放大成真实仓位。
限价保护避免市价单或错误价格造成不可控成交。
订单状态处理必须保存 openOrder()orderStatus()execDetails()error()
撤单和异常恢复断线、拒单、部分成交时要有明确处理。
日志和审计真实账户必须能追踪每次请求和回调。
误解正确理解
模拟账户能成交,真实账户也一定能成交不一定,真实市场有流动性、滑点和风控差异。
模拟账户没有风险,所以可以随便写下单代码错。坏习惯迁移到真实账户会很危险。
模拟账户行情一定完整不一定,行情权限和数据类型仍可能受限制。
Paper Account 不需要关注订单 ID错。nextValidId 和订单 ID 序列仍然要正确处理。