跳转到内容

停牌

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)

程序里建议把原始值保存下来,不要只保存一个布尔值。-1012 的含义完全不同。

停牌字段属于一档行情字段,通常随 reqMktData() 请求返回,不需要单独下单或订单权限:

app.reqMktData(97801, aapl_stock(), "", False, False, [])
项目一档行情 Halted逐笔 halted/unhalted
所在章节一档行情可用 Tick 类型逐笔数据
主要接口reqMktData()reqTickByTickData()
典型用途状态展示和风控过滤更细粒度事件流

如果你要记录停牌和恢复交易的事件序列,逐笔数据章节会更合适。

AAPL 一档行情请求因为行情权限不足,没有收到 tickGeneric()

GENERIC_ROWS=0
ERROR=reqId=97801;name=base;code=10089;msg=请求的市场数据对于API来说需要额外订阅
ERROR=reqId=97801;name=base;code=300;msg=无法使用tickerId找到EId::97801

程序应把 10089 识别为市场数据权限问题,不应把空回调当作“未停牌”。

策略系统遇到停牌状态时,应至少做到:

  • 暂停新开仓。
  • 停止依赖最新价的自动追单。
  • 在界面和日志中显示停牌状态来源。
  • 恢复交易后重新检查行情、持仓和订单状态。