停牌
Halted 用来表示合约是否处于停牌或恢复交易状态。它是一档行情中的状态字段,常见 tick type 为 49。
它适合做交易前风控:如果标的停牌,策略不应继续按普通报价逻辑下单。
官方参考:Available Tick Types
| 返回值 | 中文含义 |
|---|---|
-1 | 停牌状态不可用,常见于冻结行情。 |
0 | 未停牌。官方说明中,这个值通常要求合约在 TWS 自选列表里。 |
1 | 一般停牌,可能由监管原因触发。 |
2 | 波动停牌,通常由交易所波动控制机制触发。 |
Halted 通常通过 tickGeneric() 接收:
def tickGeneric(self, reqId, tickType, value): if tickType == 49: print("停牌状态", reqId, value)程序里建议把原始值保存下来,不要只保存一个布尔值。-1、0、1、2 的含义完全不同。
停牌字段属于一档行情字段,通常随 reqMktData() 请求返回,不需要单独下单或订单权限:
app.reqMktData(97801, aapl_stock(), "", False, False, [])和逐笔停牌事件的区别
Section titled “和逐笔停牌事件的区别”| 项目 | 一档行情 Halted | 逐笔 halted/unhalted |
|---|---|---|
| 所在章节 | 一档行情可用 Tick 类型 | 逐笔数据 |
| 主要接口 | reqMktData() | reqTickByTickData() |
| 典型用途 | 状态展示和风控过滤 | 更细粒度事件流 |
如果你要记录停牌和恢复交易的事件序列,逐笔数据章节会更合适。
参考边界样例
Section titled “参考边界样例”AAPL 一档行情请求因为行情权限不足,没有收到 tickGeneric():
GENERIC_ROWS=0ERROR=reqId=97801;name=base;code=10089;msg=请求的市场数据对于API来说需要额外订阅ERROR=reqId=97801;name=base;code=300;msg=无法使用tickerId找到EId::97801程序应把 10089 识别为市场数据权限问题,不应把空回调当作“未停牌”。
策略系统遇到停牌状态时,应至少做到:
- 暂停新开仓。
- 停止依赖最新价的自动追单。
- 在界面和日志中显示停牌状态来源。
- 恢复交易后重新检查行情、持仓和订单状态。