理解订单风险提示
TWS 的订单风险提示用于防止明显异常的订单进入市场。API 下单也会经过这些检查。看到风险提示不代表 Python 代码坏了,很多时候是订单保护、产品权限、交易时段或价格规则在起作用。
常见触发原因
Section titled “常见触发原因”- 限价距离参考价太远。
- 数量过大。
- 订单类型和交易时段不匹配。
- 产品没有交易权限。
- 价格不符合最小价格增量。
- TWS 设置里启用了更严格的订单预防。
- 合约不明确,或合约详情没有先确认。
常见提示示例
Section titled “常见提示示例”WhatIf 请求返回过一条限价距离参考价过远的提示。它的大意是:如果订单不能立即执行,系统可能拒绝距离参考价过远的限价单,以避免向市场提交扰乱性订单。
这类提示通常会出现在 openOrder() 的 orderState.warningText 或 error() 回调中。
def openOrder(self, orderId, contract, order, orderState): if orderState.warningText: print("订单风险提示:", orderState.warningText)不要默认跳过
Section titled “不要默认跳过”开发者不应在代码里默认“跳过所有风险提示”。更稳妥的做法是:
- 新手教程里先解释提示含义。
- 测试工具只在模拟账户里放开下单。
- 对真实账户保留二次确认。
- 对明显异常价格给出本地提示,不等 TWS 拒绝。
- 把
warningText和error()原文保存到订单日志里。
和 TWS 设置的关系
Section titled “和 TWS 设置的关系”TWS 里有订单预防和风险确认相关设置。它们会影响 API 下单体验,但不应该为了让脚本“更顺”就一概关闭。更合理的做法是:
| 场景 | 建议 |
|---|---|
| 新手学习 | 保留风险提示,理解每条提示含义。 |
| 模拟账户压力测试 | 可以适当放宽部分提示,但要记录设置变化。 |
| 真实账户 | 保持必要风险保护,异常订单要二次确认。 |
| 自动策略 | 在程序本地做价格、数量、权限、时段检查。 |
- 先读
error()错误码和文本。 - 再看
orderState.warningText。 - 检查合约、价格增量、交易时段、订单类型和权限。
- 在 TWS 里手工构造同样订单,看界面是否也提示风险。
- 修改订单参数,而不是直接忽略提示。