事件交易其他功能
事件交易没有一套完全独立的 API 家族。它通常组合使用 TWS API 已有能力:合约详情、行情、订单、错误处理、执行明细和日志。
常用接口组合
Section titled “常用接口组合”| 目标 | 接口 | 说明 |
|---|---|---|
| 找到合约 | reqContractDetails() | 验证 Contract 是否能被 TWS 识别。 |
| 订阅报价 | reqMktData() | 获取买卖价、最新价和数量字段。 |
| 取消行情 | cancelMktData() | 停止持续订阅,避免占用行情额度。 |
| 提交订单 | placeOrder() | 使用已确认合约和限价单。 |
| 查询订单 | reqOpenOrders() / reqAllOpenOrders() | 核对仍在打开状态的订单。 |
| 撤单 | cancelOrder() | 调试后及时清理未成交订单。 |
| 成交查询 | reqExecutions() | 读取成交明细。 |
事件合约排查时建议同时看三处信息:
| 信息来源 | 看什么 |
|---|---|
| Python 控制台 | error()、contractDetails()、tickPrice()、orderStatus() 输出。 |
| TWS 界面 | 合约是否存在、行情是否显示、订单是否进入委托列表。 |
| TWS API 日志 | 原始请求、响应和错误码。 |
如果页面显示合约可见,但 API 返回错误码 200,通常是代码里的 Contract 字段不完整,而不是 TWS 没有该产品。
最小排查清单
Section titled “最小排查清单”1. TWS 是否登录模拟账户并开启 API。2. API 端口是否正确,模拟账户常见为 7497。3. clientId 是否和其他程序冲突。4. 事件合约是否能在 TWS 里搜索到。5. `reqContractDetails()` 是否返回至少 1 条。6. `reqMktData()` 是否返回价格或权限错误。7. 下单前是否收到 `nextValidId()`。8. 下单后是否检查 `openOrder()`、`orderStatus()`、`error()`。