请求观察列表行情
观察列表行情就是 TWS Watchlist 中显示的一档报价。TWS API 用 reqMktData() 请求这类数据。
官方参考:Requesting Watchlist Data
app.reqMktData(tickerId, contract, genericTickList, snapshot, regulatorySnapshot, mktDataOptions)| 参数 | 常见值 | 中文说明 |
|---|---|---|
tickerId | 97701 | 请求编号,必须由程序自己管理。 |
contract | Contract() | 股票、期权、期货、外汇等合约。 |
genericTickList | "" | 额外 tick 类型列表,多个用逗号分隔。 |
snapshot | False | False 表示持续订阅,True 表示快照。 |
regulatorySnapshot | False | 是否请求美国监管快照。 |
mktDataOptions | [] | 预留参数,一般留空。 |
Python 示例
Section titled “Python 示例”from ibapi.contract import Contract
def aapl_stock() -> Contract: """构造 AAPL 股票合约。""" contract = Contract() contract.symbol = "AAPL" contract.secType = "STK" contract.exchange = "SMART" contract.currency = "USD" contract.primaryExchange = "NASDAQ" return contract
# 请求流式一档行情。app.reqMktData(97701, aapl_stock(), "", False, False, [])primaryExchange 对美股很有帮助。它可以减少同名合约歧义,例如 AAPL 使用 NASDAQ。
请求成功后会发生什么
Section titled “请求成功后会发生什么”成功订阅后,TWS 会按字段变化推送不同回调:
| 回调 | 说明 |
|---|---|
tickPrice() | 价格更新。 |
tickSize() | 数量更新。 |
tickString() | 字符串类行情。 |
tickGeneric() | 通用 tick 数值。 |
tickReqParams() | 请求参数和交易所映射信息。 |
参考边界样例
Section titled “参考边界样例”请求 AAPL 流式一档行情,TWS 返回了请求参数:
TICK_REQ_PARAMS=tickerId=97701;name=streaming;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0随后返回行情权限错误:
ERROR=reqId=97701;name=streaming;code=10089;msg=请求的市场数据对于API来说需要额外订阅...:延迟市场数据可用。:AAPL NASDAQ.NMS/TOP/ALLERROR=reqId=97701;name=streaming;code=300;msg=无法使用tickerId找到EId::97701这种结果表示合约和 API 连接正常,但账户没有对应 API 行情权限。
把连接错误、合约错误和行情权限错误分开处理:
- 连接失败通常收不到
nextValidId()。 - 合约错误常见为
200。 - 行情权限不足常见为
10089或354。
这样用户看到错误时,能直接知道下一步应该检查端口、合约字段还是市场数据订阅。