🚀 AI 一键生成 ptrade 策略代码
立即体验
👉 AI 生成代码 👈

ptrade 接口 get_snapshot 获取行情快照返回空字典怎么办?

ptrade | 发布时间: 2026/6/8
以下内容由 EasyQuant 生成。

问题描述

get_snapshot返回空dict是什么原因?

使用get_snapshot获取股票行情快照时,参数正确但返回空字典{},为什么?

解决方案

在 ptrade 量化交易平台中,get_snapshot 接口用于获取指定标的的实时行情快照。当参数传递正确但返回空字典 {} 时,通常意味着行情快照获取失败。以下是导致该问题的常见原因及排查建议:

1. 股票代码格式不规范或标的不存在

ptrade 对股票代码的格式有严格要求,必须包含正确的市场尾缀。例如,平安银行应为 '000001.SZ',恒生电子应为 '600570.SS'

  • 排查方法:检查传入的 security 参数是否带有正确的 .SS(上交所)或 .SZ(深交所)后缀。
  • 注意:如果传入了已经退市的股票代码,或者代码拼写错误,系统无法找到对应的行情,也会返回空字典。

2. 调用时机问题(非交易时段)

get_snapshot 获取的是实时行情快照。如果在非交易时段(如周末、节假日、深夜)或者系统尚未初始化完成时调用,可能会因为没有实时行情数据而返回空字典。

  • 官方文档提示:在盘前阶段(before_trading_start)使用该函数,返回数据里大部分数据是 0(如成交量、当前价格等)。但在某些极端情况下或券商环境未准备好时,可能直接返回 {}
  • 建议:尽量在盘中(handle_datatick_data)调用该接口。

3. 行情服务器异常或网络延迟

量化引擎与券商柜台/行情服务器之间可能存在偶发的网络波动或延迟,导致单次请求超时或失败。

  • 排查方法:观察是否是偶发性返回空字典。如果是,通常是网络或底层行情源的问题。

4. 标的处于特殊状态(如长期停牌)

虽然普通停牌的股票通常会保留停牌前的快照数据(trade_status 显示为 HALTSUSP),但某些长期停牌或特殊状态的标的,可能在某些券商环境中无法获取到快照。


💡 策略编写建议:增加容错处理

为了防止 get_snapshot 返回空字典导致策略抛出 KeyError 异常并终止运行,强烈建议在代码中加入容错判断

def handle_data(context, data):
    security = '600570.SS'
    snapshot = get_snapshot(security)
    
    # 容错判断:检查返回值是否为空,以及是否包含目标代码
    if snapshot and security in snapshot:
        last_px = snapshot[security].get('last_px', 0)
        log.info(f"最新价: {last_px}")
    else:
        log.warning(f"获取 {security} 行情快照失败,返回为空!")

总结:遇到 get_snapshot 返回 {} 时,首先核对代码后缀,其次确认调用时间是否在交易时段。如果一切正常仍返回空,建议联系所在券商的 ptrade 技术支持排查行情服务器状态,并在策略中做好异常捕获。