跳转到内容

二档行情

二档行情也叫市场深度或 Level 2。它返回盘口队列里的多档买卖报价,不只是买一卖一。对做盘口分析、流动性监控、交易执行算法有帮助,但权限和资源要求都比一档行情更高。

官方参考:Market Depth

官方文档特别强调:市场深度数据不会像一档行情那样采样或过滤,但这不代表某个证券的所有报价都会展示出来;例如奇零股报价不会包含在市场深度里。因此二档行情适合看盘口结构,不适合当成“完整市场订单簿”的保证。

步骤接口 / 回调说明
1reqMktDepth()请求某个合约的二档行情
2updateMktDepth()接收普通深度更新
3updateMktDepthL2()接收带做市商或交易所标识的深度更新
4cancelMktDepth()取消二档行情订阅
项目一档行情二档行情
主要接口reqMktData()reqMktDepth()
数据内容最新价、买一、卖一、成交量等多档买卖盘口
权限要求通常较低通常需要额外深度行情权限
数据量较小较大,需要主动取消

第一,先用 reqMktDepthExchanges() 查看 TWS 返回的深度行情交易所列表。它能告诉你哪些交易所支持深度数据、证券类型是什么、是否属于同一个聚合组。

第二,再用 reqMktDepth() 请求具体合约。美股使用 SMART 深度时,isSmartDepth=True 会尝试聚合多个交易所的深度报价;如果账户没有对应深度行情权限,请求会被 TWS 拒绝。

请求 AAPL SMART 深度行情时,API 连接和取消流程正常,但账户缺少对应深度行情权限:

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

这说明二档行情请求已经发出,但账户缺少对应交易所深度行情权限。程序应把这种情况显示为“市场数据许可不足”,而不是“连接失败”或“代码没有运行”。

二档行情回调不是“每次给你完整盘口”。TWS 推送的是某一档的插入、更新或删除动作,程序要自己维护买盘和卖盘两个列表:

方向side建议保存结构
卖盘0asks[position] = {price, size, marketMaker}
买盘1bids[position] = {price, size, marketMaker}

如果只把回调打印出来,不按 positionoperation 更新列表,看到的数据很快就会乱。