流式与快照
reqMktData() 可以请求流式行情,也可以请求快照。区别由 snapshot 参数控制。
| 模式 | snapshot | 说明 |
|---|---|---|
| 流式订阅 | False | 持续接收行情更新,需要用 cancelMktData() 取消。 |
| 快照 | True | 请求一次行情快照,结束时可能收到 tickSnapshotEnd()。 |
流式订阅示例
Section titled “流式订阅示例”app.reqMktData(97701, aapl_stock(), "", False, False, [])流式订阅适合报价页面、策略监控和持续风控。用完后取消:
app.cancelMktData(97701)app.reqMktData(97702, aapl_stock(), "", True, False, [])快照适合偶尔检查一次价格,不适合高频轮询。快照结束时,TWS 可能调用:
def tickSnapshotEnd(self, reqId): print("快照结束", reqId)参考边界样例
Section titled “参考边界样例”请求 AAPL 快照时,没有收到 tickSnapshotEnd(),并返回行情权限错误:
SNAPSHOT_END=FalseTICK_REQ_PARAMS=tickerId=97702;name=snapshot;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0ERROR=reqId=97702;name=snapshot;code=10089;msg=请求的市场数据对于API来说需要额外订阅...:延迟市场数据可用。:AAPL NASDAQ.NMS/TOP/ALL这说明快照模式也需要相应行情权限。把 snapshot=True 不能绕过市场数据订阅限制。
- 需要持续更新:用流式订阅。
- 只想偶尔取一次:用快照。
- 需要逐笔成交:用逐笔数据接口。
- 没有行情权限:两种模式都可能没有价格回调。