跳转到内容

取消二档行情

二档行情是持续订阅,数据量和权限占用都比一档行情更重。只要用户离开页面、策略停止或切换合约,就应该主动取消。

官方参考:Market Depth - Cancelling

app.cancelMktDepth(
reqId,
isSmartDepth,
)
app.cancelMktDepth(
97401, # reqId:必须和 reqMktDepth() 使用的编号一致
True, # isSmartDepth:必须和请求时保持一致
)
参数中文解释
reqId要取消的二档行情请求编号
isSmartDepth是否 SMART 深度,和请求时一致

reqId 必须和订阅时的 reqId 一致。一个程序里同时订阅多个合约时,建议用字典保存 {reqId: contract},方便退出时统一取消。

isSmartDepth 也要和请求时一致。请求时如果用了 True,取消时也传 True;请求时如果用了 False,取消时也传 False

请求 AAPL 二档行情后调用取消:

CONNECTED=True
CANCEL_SENT=True
DEPTH_ROWS=0
DEPTH_L2_ROWS=0
ERROR=reqId=97401;code=2152;msg=交易所 - 顶端: IBEOS; OVERNIGHT; 需要其它市场数据许可 - 深度: NASDAQ; BATS; ARCA; BEX; NYSE; IEX; ...

因为订阅在权限检查阶段就被拒绝,没有收到真实盘口;但程序仍然发送取消动作,保证清理流程完整。

建议原因
保存活跃二档订阅表页面关闭或程序退出时统一取消
isSmartDepth 请求和取消保持一致避免取消不到对应订阅
权限错误后标记订阅失败避免重复等待盘口
断线重连后重新建立必要订阅断线不会自动恢复所有业务状态