请求二档行情交易所
reqMktDepthExchanges() 不需要参数。调用后,TWS 会通过 mktDepthExchanges() 返回支持市场深度数据的交易所描述列表。
app.reqMktDepthExchanges()这个接口没有 reqId 参数。它返回的是一批交易所能力描述,而不是某个合约的盘口。
Python 示例
Section titled “Python 示例”app.reqMktDepthExchanges()这个请求只查询“API 支持哪些深度行情来源”,不会订阅任何合约盘口,也不会占用某个合约的深度行情行数。
什么时候调用
Section titled “什么时候调用”| 场景 | 是否适合 |
|---|---|
| 做二档行情功能初始化 | 适合 |
| 检查某类证券是否有深度数据来源 | 适合 |
| 判断账户是否已购买行情权限 | 不够,还要实际订阅并查看错误码 |
| 每次下单前都调用 | 不需要 |
class App(EWrapper, EClient): def nextValidId(self, orderId): """连接握手完成后请求二档行情交易所列表。""" self.reqMktDepthExchanges()这个接口返回的是交易所能力列表,不是合约盘口数据。真正的盘口订阅仍要用:
app.reqMktDepth(reqId, contract, numRows, isSmartDepth, [])reqMktDepth() 的常用参数含义如下:
| 参数 | 中文解释 | 注意事项 |
|---|---|---|
reqId | 深度行情请求编号 | 后续 updateMktDepth()、updateMktDepthL2() 和 cancelMktDepth() 都用它关联 |
contract | 合约对象 | 先用 reqContractDetails() 确认可识别,尤其是股票的交易所和币种 |
numRows | 请求盘口档位数 | 数字越大,占用和权限要求越明显;新手可先用 5 |
isSmartDepth | 是否请求 SMART 深度 | True 请求 SMART 聚合深度,False 请求指定交易所深度 |
mktDepthOptions | 额外选项 | 普通请求传空列表 |
如果只是想看最新价、买一卖一,不一定需要二档行情;一档行情 reqMktData() 更轻量。
请求顺序建议
Section titled “请求顺序建议”| 步骤 | 做什么 | 为什么 |
|---|---|---|
| 1 | reqMktDepthExchanges() | 确认 API 认识哪些深度行情来源。 |
| 2 | reqContractDetails() | 确认合约唯一、交易所和币种正确。 |
| 3 | reqMktDepth() | 对具体合约请求盘口。 |
| 4 | updateMktDepth() / updateMktDepthL2() | 接收盘口变化。 |
| 5 | cancelMktDepth() | 页面关闭或策略停止时释放订阅。 |
CONNECTED=TrueEXCHANGE_ROWS=20DEPTH_ROWS=0DEPTH_L2_ROWS=0CANCEL_SENT=TrueERROR=reqId=97401;code=2152;msg=交易所 - 顶端: IBEOS; OVERNIGHT; 需要其它市场数据许可 - 深度: NASDAQ; BATS; ARCA; BEX; NYSE; IEX; ...这说明 reqMktDepthExchanges() 成功返回了交易所能力列表,但 AAPL 的深度盘口订阅因为市场数据许可不足没有返回盘口行。程序界面应把这两件事分开显示:能力列表可用,不代表盘口权限可用。