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

ptrade 调用 get_gear_price 返回空档位数据怎么办?

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

问题描述

get_gear_price返回的档位数据都是空的什么原因?

使用get_gear_price获取股票的档位行情时,返回的bid_grp和offer_grp都是空字典,为什么?

解决方案

在 ptrade 量化交易平台中,调用 get_gear_price 接口获取指定代码的档位行情价格时,如果返回的 bid_grpoffer_grp 都是空字典(即 {"bid_grp": {}, "offer_grp": {}}),根据官方 API 文档,最直接的原因是获取实时行情快照失败

导致获取实时行情快照失败的常见深层原因及排查方法如下:

1. 调用时间不在交易时段

get_gear_price 获取的是实时档位行情。如果您在盘前(如 before_trading_start 阶段)、盘后或非交易日调用该接口,由于市场尚未产生或已停止推送实时行情,接口将无法获取到快照,从而返回空字典。
建议:确保在盘中交易时间(如 handle_datatick_data 中)调用该接口。

2. 股票代码格式错误或不存在

传入的股票代码必须符合 ptrade 的规范(通常带有 .SS.SZ 后缀)。如果代码拼写错误或该标的不存在,行情系统无法识别,也会返回空数据。
建议:检查传入的 sids 参数是否正确,例如 '600570.SS'

3. 股票处于停牌或退市状态

如果目标股票当日停牌或已经退市,交易所不会推送该股票的实时档位行情。
建议:在获取档位行情前,可以使用 get_stock_statusget_snapshot 检查股票的交易状态(trade_status 是否为 HALTSUSP 等)。

4. 行情服务异常或权限问题

偶尔可能因为券商端的行情服务器网络波动导致快照获取失败。此外,虽然基础的五档行情不需要 Level-2 权限,但如果您期望获取更详细的委托队列或十档行情,需要确认是否开通了 L2 权限(无 L2 行情时,委托笔数字段会返回 0)。

排查代码示例

为了提高策略的健壮性,建议在调用 get_gear_price 后增加空值判断和异常处理:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)

def handle_data(context, data):
    security = g.security
    
    # 获取档位行情
    gear_price = get_gear_price(security)
    
    # 检查是否获取失败(返回空字典)
    if not gear_price.get('bid_grp') and not gear_price.get('offer_grp'):
        log.warning(f"获取 {security} 档位行情失败,返回为空。请检查当前是否为交易时间或股票状态。")
        # 可以进一步获取快照查看状态
        snapshot = get_snapshot(security)
        if snapshot and security in snapshot:
            log.info(f"当前交易状态: {snapshot[security].get('trade_status')}")
        return
    
    # 正常处理档位数据
    bid_1_price = gear_price['bid_grp'].get(1, [0, 0, 0])[0]
    log.info(f"{security} 当前买一价: {bid_1_price}")

总结来说,遇到返回空字典的情况,请首先确认当前时间是否为连续竞价交易时间,其次核对股票代码及状态,并在代码中做好容错处理。