跳转到内容

流式与快照

reqMktData() 可以请求流式行情,也可以请求快照。区别由 snapshot 参数控制。

官方参考:Streaming Data Snapshots

模式snapshot说明
流式订阅False持续接收行情更新,需要用 cancelMktData() 取消。
快照True请求一次行情快照,结束时可能收到 tickSnapshotEnd()
app.reqMktData(97701, aapl_stock(), "", False, False, [])

流式订阅适合报价页面、策略监控和持续风控。用完后取消:

app.cancelMktData(97701)
app.reqMktData(97702, aapl_stock(), "", True, False, [])

快照适合偶尔检查一次价格,不适合高频轮询。快照结束时,TWS 可能调用:

def tickSnapshotEnd(self, reqId):
print("快照结束", reqId)

请求 AAPL 快照时,没有收到 tickSnapshotEnd(),并返回行情权限错误:

SNAPSHOT_END=False
TICK_REQ_PARAMS=tickerId=97702;name=snapshot;minTick=0.01;bboExchange=EMPTY;snapshotPermissions=0
ERROR=reqId=97702;name=snapshot;code=10089;msg=请求的市场数据对于API来说需要额外订阅...:延迟市场数据可用。:AAPL NASDAQ.NMS/TOP/ALL

这说明快照模式也需要相应行情权限。把 snapshot=True 不能绕过市场数据订阅限制。

  • 需要持续更新:用流式订阅。
  • 只想偶尔取一次:用快照。
  • 需要逐笔成交:用逐笔数据接口。
  • 没有行情权限:两种模式都可能没有价格回调。