跳转到内容

请求二档行情交易所

reqMktDepthExchanges() 不需要参数。调用后,TWS 会通过 mktDepthExchanges() 返回支持市场深度数据的交易所描述列表。

app.reqMktDepthExchanges()

这个接口没有 reqId 参数。它返回的是一批交易所能力描述,而不是某个合约的盘口。

app.reqMktDepthExchanges()

这个请求只查询“API 支持哪些深度行情来源”,不会订阅任何合约盘口,也不会占用某个合约的深度行情行数。

场景是否适合
做二档行情功能初始化适合
检查某类证券是否有深度数据来源适合
判断账户是否已购买行情权限不够,还要实际订阅并查看错误码
每次下单前都调用不需要
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() 更轻量。

步骤做什么为什么
1reqMktDepthExchanges()确认 API 认识哪些深度行情来源。
2reqContractDetails()确认合约唯一、交易所和币种正确。
3reqMktDepth()对具体合约请求盘口。
4updateMktDepth() / updateMktDepthL2()接收盘口变化。
5cancelMktDepth()页面关闭或策略停止时释放订阅。
CONNECTED=True
EXCHANGE_ROWS=20
DEPTH_ROWS=0
DEPTH_L2_ROWS=0
CANCEL_SENT=True
ERROR=reqId=97401;code=2152;msg=交易所 - 顶端: IBEOS; OVERNIGHT; 需要其它市场数据许可 - 深度: NASDAQ; BATS; ARCA; BEX; NYSE; IEX; ...

这说明 reqMktDepthExchanges() 成功返回了交易所能力列表,但 AAPL 的深度盘口订阅因为市场数据许可不足没有返回盘口行。程序界面应把这两件事分开显示:能力列表可用,不代表盘口权限可用。