取消二档行情
二档行情是持续订阅,数据量和权限占用都比一档行情更重。只要用户离开页面、策略停止或切换合约,就应该主动取消。
官方参考:Market Depth - Cancelling
app.cancelMktDepth( reqId, isSmartDepth,)Python 示例
Section titled “Python 示例”app.cancelMktDepth( 97401, # reqId:必须和 reqMktDepth() 使用的编号一致 True, # isSmartDepth:必须和请求时保持一致)| 参数 | 中文解释 |
|---|---|
reqId | 要取消的二档行情请求编号 |
isSmartDepth | 是否 SMART 深度,和请求时一致 |
reqId 必须和订阅时的 reqId 一致。一个程序里同时订阅多个合约时,建议用字典保存 {reqId: contract},方便退出时统一取消。
isSmartDepth 也要和请求时一致。请求时如果用了 True,取消时也传 True;请求时如果用了 False,取消时也传 False。
权限边界样例
Section titled “权限边界样例”请求 AAPL 二档行情后调用取消:
CONNECTED=TrueCANCEL_SENT=TrueDEPTH_ROWS=0DEPTH_L2_ROWS=0ERROR=reqId=97401;code=2152;msg=交易所 - 顶端: IBEOS; OVERNIGHT; 需要其它市场数据许可 - 深度: NASDAQ; BATS; ARCA; BEX; NYSE; IEX; ...因为订阅在权限检查阶段就被拒绝,没有收到真实盘口;但程序仍然发送取消动作,保证清理流程完整。
| 建议 | 原因 |
|---|---|
| 保存活跃二档订阅表 | 页面关闭或程序退出时统一取消 |
isSmartDepth 请求和取消保持一致 | 避免取消不到对应订阅 |
| 权限错误后标记订阅失败 | 避免重复等待盘口 |
| 断线重连后重新建立必要订阅 | 断线不会自动恢复所有业务状态 |