🚀 AI 一键生成 ptrade 策略代码

ptrade 平台中 get_history、data 和 get_snapshot 函数数据的差异是什么?

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

问题描述

get_history、data和get_snapshot函数数据的差异?

/

解决方案

在 ptrade 量化交易平台中,get_historydata(事件函数参数)和 get_snapshot 是获取行情数据的三种主要方式。它们在数据类型、时间维度、适用场景和返回内容上有着显著的差异。以下是详细的对比解析:

1. get_history:获取历史 K 线数据

  • 定义:用于获取指定标的在过去一段时间内的历史 K 线数据(如日线、分钟线等)。
  • 时间维度:过去的历史时间段(可指定 count 数量和 frequency 频率)。
  • 返回内容:包含开盘价、收盘价、最高价、最低价、成交量、成交额等 K 线标准字段。返回格式通常为 pandas.DataFramedict
  • 适用场景:计算技术指标(如均线、MACD)、统计历史波动率、获取过去 N 天的收盘价等。
  • 适用模块:研究、回测、交易模块均可用。
  • 示例
    # 获取过去5天的日线收盘价
    df = get_history(5, '1d', 'close', '600570.SS')
    

2. data 参数:获取当前运行周期的 K 线切片数据

  • 定义datahandle_data(context, data) 等事件触发函数中传入的参数。它代表了当前策略运行周期的最新数据切片。
  • 时间维度:当前周期(如果策略是日线级别,则代表当天的最新数据;如果是分钟级别,则代表这一分钟的最新数据)。
  • 返回内容:一个字典,key 是标的代码,value 是 SecurityUnitData 对象,包含 open, close, high, low, volume, price(最新价)等属性。
  • 适用场景:在盘中处理逻辑时,快速获取当前周期的最新价格或成交量,用于触发交易信号。
  • 适用模块:回测、交易模块的事件函数中。
  • 示例
    def handle_data(context, data):
        # 获取当前周期的最新价
        current_price = data['600570.SS']['close'] 
    

3. get_snapshot:获取实时行情快照(Tick 级别)

  • 定义:用于获取标的当前的实时行情快照(Snapshot),包含深度的盘口信息。
  • 时间维度:调用接口那一瞬间的实时状态。
  • 返回内容:包含买卖五档报价及挂单量(bid_grp, offer_grp)、最新成交价(last_px)、涨跌停价(up_px, down_px)、交易状态(trade_status)、委比、量比等极其丰富的 Tick 级别字段。
  • 适用场景:需要根据盘口挂单情况进行微观交易决策、判断是否涨跌停(trade_status 或对比 last_pxup_px)、获取最实时的撮合价格。
  • 适用模块仅在交易模块可用(实盘/模拟盘)。
  • 示例
    # 获取实时快照
    snapshot = get_snapshot('600570.SS')
    last_price = snapshot['600570.SS']['last_px']
    bid_1_price = snapshot['600570.SS']['bid_grp'][1][0] # 买一价
    

总结对比表

特性 get_history data (参数) get_snapshot
数据性质 历史 K 线序列 当前周期的 K 线切片 实时盘口快照 (Tick)
时间维度 过去 N 个周期 当前 1 个周期 当前瞬间
主要字段 OHLCV 等 OHLCV、price 等 买卖五档、最新价、涨跌停价、交易状态等
返回类型 DataFrame / dict dict (含 SecurityUnitData) dict
适用模块 研究、回测、交易 回测、交易 (事件函数内) 仅交易模块
典型用途 计算均线、技术指标 获取当前周期最新价判断信号 盘口分析、涨跌停判断、精细化下单

注意事项

  1. 回测与实盘的差异:在回测中,无法使用 get_snapshot 获取盘口数据,只能依赖 dataget_history 获取 K 线数据。
  2. 盘前调用:在盘前阶段(如 before_trading_start),get_snapshot 返回的数据中大部分字段(如成交量、最新价)可能为 0,因为此时尚未产生连续竞价交易。
  3. 性能考量data 参数的数据是引擎直接推送的,访问速度极快;而 get_historyget_snapshot 需要向底层请求数据,频繁调用需注意性能和流控。