二档行情
二档行情也叫市场深度或 Level 2。它返回盘口队列里的多档买卖报价,不只是买一卖一。对做盘口分析、流动性监控、交易执行算法有帮助,但权限和资源要求都比一档行情更高。
官方参考:Market Depth
官方文档特别强调:市场深度数据不会像一档行情那样采样或过滤,但这不代表某个证券的所有报价都会展示出来;例如奇零股报价不会包含在市场深度里。因此二档行情适合看盘口结构,不适合当成“完整市场订单簿”的保证。
| 步骤 | 接口 / 回调 | 说明 |
|---|---|---|
| 1 | reqMktDepth() | 请求某个合约的二档行情 |
| 2 | updateMktDepth() | 接收普通深度更新 |
| 3 | updateMktDepthL2() | 接收带做市商或交易所标识的深度更新 |
| 4 | cancelMktDepth() | 取消二档行情订阅 |
和一档行情的区别
Section titled “和一档行情的区别”| 项目 | 一档行情 | 二档行情 |
|---|---|---|
| 主要接口 | reqMktData() | reqMktDepth() |
| 数据内容 | 最新价、买一、卖一、成交量等 | 多档买卖盘口 |
| 权限要求 | 通常较低 | 通常需要额外深度行情权限 |
| 数据量 | 较小 | 较大,需要主动取消 |
开发时先确认两件事
Section titled “开发时先确认两件事”第一,先用 reqMktDepthExchanges() 查看 TWS 返回的深度行情交易所列表。它能告诉你哪些交易所支持深度数据、证券类型是什么、是否属于同一个聚合组。
第二,再用 reqMktDepth() 请求具体合约。美股使用 SMART 深度时,isSmartDepth=True 会尝试聚合多个交易所的深度报价;如果账户没有对应深度行情权限,请求会被 TWS 拒绝。
权限边界样例
Section titled “权限边界样例”请求 AAPL SMART 深度行情时,API 连接和取消流程正常,但账户缺少对应深度行情权限:
CONNECTED=TrueDEPTH_ROWS=0DEPTH_L2_ROWS=0CANCEL_SENT=TrueERROR=reqId=97401;code=2152;msg=交易所 - 顶端: IBEOS; OVERNIGHT; 需要其它市场数据许可 - 深度: NASDAQ; BATS; ARCA; BEX; NYSE; IEX; ...这说明二档行情请求已经发出,但账户缺少对应交易所深度行情权限。程序应把这种情况显示为“市场数据许可不足”,而不是“连接失败”或“代码没有运行”。
程序里要保存盘口快照
Section titled “程序里要保存盘口快照”二档行情回调不是“每次给你完整盘口”。TWS 推送的是某一档的插入、更新或删除动作,程序要自己维护买盘和卖盘两个列表:
| 方向 | side | 建议保存结构 |
|---|---|---|
| 卖盘 | 0 | asks[position] = {price, size, marketMaker} |
| 买盘 | 1 | bids[position] = {price, size, marketMaker} |
如果只把回调打印出来,不按 position 和 operation 更新列表,看到的数据很快就会乱。