跳转到内容

理解订单风险提示

TWS 的订单风险提示用于防止明显异常的订单进入市场。API 下单也会经过这些检查。看到风险提示不代表 Python 代码坏了,很多时候是订单保护、产品权限、交易时段或价格规则在起作用。

  • 限价距离参考价太远。
  • 数量过大。
  • 订单类型和交易时段不匹配。
  • 产品没有交易权限。
  • 价格不符合最小价格增量。
  • TWS 设置里启用了更严格的订单预防。
  • 合约不明确,或合约详情没有先确认。

WhatIf 请求返回过一条限价距离参考价过远的提示。它的大意是:如果订单不能立即执行,系统可能拒绝距离参考价过远的限价单,以避免向市场提交扰乱性订单。

这类提示通常会出现在 openOrder()orderState.warningTexterror() 回调中。

def openOrder(self, orderId, contract, order, orderState):
if orderState.warningText:
print("订单风险提示:", orderState.warningText)

开发者不应在代码里默认“跳过所有风险提示”。更稳妥的做法是:

  • 新手教程里先解释提示含义。
  • 测试工具只在模拟账户里放开下单。
  • 对真实账户保留二次确认。
  • 对明显异常价格给出本地提示,不等 TWS 拒绝。
  • warningTexterror() 原文保存到订单日志里。

TWS 里有订单预防和风险确认相关设置。它们会影响 API 下单体验,但不应该为了让脚本“更顺”就一概关闭。更合理的做法是:

场景建议
新手学习保留风险提示,理解每条提示含义。
模拟账户压力测试可以适当放宽部分提示,但要记录设置变化。
真实账户保持必要风险保护,异常订单要二次确认。
自动策略在程序本地做价格、数量、权限、时段检查。
  1. 先读 error() 错误码和文本。
  2. 再看 orderState.warningText
  3. 检查合约、价格增量、交易时段、订单类型和权限。
  4. 在 TWS 里手工构造同样订单,看界面是否也提示风险。
  5. 修改订单参数,而不是直接忽略提示。