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

为什么ptrade回测模块中使用get_gear_price会报错?

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

问题描述

get_gear_price在回测模块中无法使用?

为什么在回测模块中使用get_gear_price获取档位行情报错,是函数不支持吗?

解决方案

是的,您的理解完全正确。在 ptrade 量化平台中,如果在回测模块调用 get_gear_price 函数,确实会报错,因为该函数不支持在回测环境中使用

为什么回测模块不支持 get_gear_price

根据 ptrade 官方 API 文档的明确规定:

  • 使用场景get_gear_price 函数仅在交易模块可用
  • 接口说明:该函数用于获取指定代码的实时档位行情价格(即买卖五档或十档的盘口数据)。

原因分析
回测系统通常基于历史的 K 线数据(如日线、分钟线)进行撮合,而 get_gear_price 获取的是实时的盘口深度数据(Level 1 或 Level 2 的委买委卖队列)。由于历史盘口数据极其庞大且回测引擎通常不提供历史切片盘口的回放,因此该接口被限制为仅在实盘/模拟盘的交易模块中调用。

正确的使用方法

如果您需要获取档位行情,必须将策略运行在交易模块下。以下是 get_gear_price 在交易模块中的标准使用示例:

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

def handle_data(context, data):
    # 获取600570.SS当前档位行情(仅在交易模块生效)
    gear_price = get_gear_price('600570.SS')
    log.info(gear_price)
    
    # 获取600571.SS当前档位行情
    gear_price_2 = get_gear_price('600571.SS')
    log.info(gear_price_2)

返回数据结构参考

在交易模块中成功调用后,返回的数据结构如下(包含委买 bid_grp 和委卖 offer_grp):

{
 'bid_grp': {1: [价格, 委托量, 委托笔数], 2: [价格, 委托量, 委托笔数], ...},
 'offer_grp': {1: [价格, 委托量, 委托笔数], 2: [价格, 委托量, 委托笔数], ...}
}

注意:获取实时行情快照失败时,会返回空字典 {"bid_grp": {}, "offer_grp": {}};若无 L2 行情权限,委托笔数字段将返回 0。

回测时的替代方案

如果您在回测阶段需要获取价格数据进行逻辑验证,请使用 get_historyget_price 获取历史的开高低收(OHLC)价格,或者使用 data[security]['close'] 获取当前周期的收盘价/最新价,而不要依赖盘口档位数据。