跳转到内容

总览

TWS API 能覆盖账户、合约、行情和订单,但它不是没有边界的“万能交易接口”。开发前先理解这些限制,可以少走很多弯路。

官方入口:TWS API Documentation

限制不是坏事。它的意义是告诉你:哪些问题应该改代码,哪些问题应该改设置、补权限、换账户环境,或者让用户人工确认。

TWS API 的限制通常来自五类来源:

来源影响
TWS / IB Gateway 本身登录、2FA、重新认证、端口、API 设置。
账户类型Paper Account 和 Live Account 行为不同。
账户地区与监管规则某些地区或产品不允许程序化交易。
行情与交易权限没有订阅或权限时,请求会返回错误或延迟数据。
API 协议模型请求/回调、限频、断线重连、订单 ID 序列都需要程序正确处理。

所以排查问题时,不要只看代码。很多错误并不是 Python 写错了,而是账户权限、TWS 设置、市场数据订阅或监管限制导致。

页面重点
MacOS 上的 C# 限制C# 在 macOS 上的官方支持边界。
C++ DLL 与静态链接C++ 动态库、静态链接和发布时的注意事项。
加拿大居民程序化交易加拿大产品限制账户地区和监管规则对程序化交易的影响。
模拟账户限制模拟账户和真实账户的差异。

这些页面不适合放可复制代码。它们更像开发前的风险说明和排查索引。

限制不是普通 bug。

普通 bug 可能通过改代码修复,例如:

  • 字段拼错。
  • clientId 冲突。
  • 忘记启动 EReader
  • 合约字段不完整。

限制通常需要改环境或改业务流程,例如:

  • 账户没有行情订阅。
  • 账户没有交易权限。
  • TWS 没有允许 API 连接。
  • Paper Account 和 Live Account 返回不同。
  • 需要人工重新认证。

错误处理 页面会解释具体错误码;本页先帮助你建立“限制意识”。

现象第一判断下一步
connect() 失败TWS / Gateway 未启动、端口不对、API 未启用、防火墙拦截先回到 TWS 设置和连接机制页面。
收不到 nextValidIdSocket 握手没完成或消息循环没跑检查 app.run()、线程、端口和 API 弹窗。
reqMktData() 没价格行情订阅、延迟行情设置、交易所权限或合约不唯一先确认合约,再试 reqMarketDataType(3) 延迟行情。
reqHistoricalData() 返回错误参数组合、权限、数据可用范围或限频检查 durationStrbarSizeSettingwhatToShow 和 pacing。
错误码 10089请求的数据需要额外市场数据订阅不是代码语法错误,通常要补权限或接受无权限结果。
下单被拒账户交易权限、订单风控、价格、数量、产品状态error()openOrder()orderStatus() 和 TWS 订单窗口。
服务器运行一段时间后断开网络、每日重启、重新认证、IB Gateway 状态加监控和人工认证流程,不要无限重试下单。
模拟账户能跑,真实账户不行Paper 和 Live 的权限、风控、保证金或成交环境不同真实账户前重新验证每个接口和风控边界。

为了让示例和开发测试更稳,建议采用这些策略:

场景默认策略
新手学习使用 Paper Account。
查询账户 / 行情先用只读模式或非交易请求。
订单相关先用 whatIf=True,再考虑模拟账户真实提交。
行情相关先接受延迟行情和权限错误,再逐步补实时订阅。
服务器运行优先 IB Gateway,但仍保留人工认证流程。
自动生成代码必须先解释限制,再生成请求参数和代码。

文档里的示例不会默认假设用户拥有全部行情权限。遇到需要订阅、需要特定账户权限或可能受地区限制的接口,会在正文里说明。

TWS / IB Gateway 不是永久免登录服务。即使程序稳定运行,也要考虑每日或每周重新认证。服务器部署时,这一点尤其重要。

行情相关问题最常见。连接成功只能说明 Socket 通了,不代表能拿到对应市场的实时数据。

Paper Account 很适合开发,但不能证明真实交易的成交速度、滑点、流动性和风控结果。

TWS 有订单风险提示和风控保护。某些订单在程序侧看起来字段正确,但可能被 TWS 拦截或要求用户确认。

TWS API 不是无限并发接口。历史行情、Scanner、逐笔数据、市场深度等请求都可能触发 pacing 或软限制。正式系统应缓存结果、合并请求、限制重试频率,并把错误码写进日志。

某些限制来自产品、交易所、账户地区或监管规则。程序无法绕过这些限制。正确做法是让系统在下单前做权限检查和产品白名单,而不是在被拒单后反复重试。

如果你把本站 MCP 接入给 Agent,让 Agent 帮你写 TWS API 代码,需要明确告诉它:

  • 先查限制和错误处理,再生成交易代码。
  • 没有行情权限时,不要编造成功返回。
  • 下单示例必须默认模拟账户、小数量、限价单和日志输出。
  • 如果文档没有覆盖某个产品或权限规则,要提示人工确认。