get_history、data和get_snapshot函数数据的差异?
/
问题描述
解决方案
在 ptrade 量化交易平台中,get_history、data(事件函数参数)和 get_snapshot 是获取行情数据的三种主要方式。它们在数据类型、时间维度、适用场景和返回内容上有着显著的差异。以下是详细的对比解析:
1. get_history:获取历史 K 线数据
- 定义:用于获取指定标的在过去一段时间内的历史 K 线数据(如日线、分钟线等)。
- 时间维度:过去的历史时间段(可指定
count数量和frequency频率)。 - 返回内容:包含开盘价、收盘价、最高价、最低价、成交量、成交额等 K 线标准字段。返回格式通常为
pandas.DataFrame或dict。 - 适用场景:计算技术指标(如均线、MACD)、统计历史波动率、获取过去 N 天的收盘价等。
- 适用模块:研究、回测、交易模块均可用。
- 示例:
# 获取过去5天的日线收盘价 df = get_history(5, '1d', 'close', '600570.SS')
2. data 参数:获取当前运行周期的 K 线切片数据
- 定义:
data是handle_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_px与up_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 |
| 适用模块 | 研究、回测、交易 | 回测、交易 (事件函数内) | 仅交易模块 |
| 典型用途 | 计算均线、技术指标 | 获取当前周期最新价判断信号 | 盘口分析、涨跌停判断、精细化下单 |
注意事项
- 回测与实盘的差异:在回测中,无法使用
get_snapshot获取盘口数据,只能依赖data或get_history获取 K 线数据。 - 盘前调用:在盘前阶段(如
before_trading_start),get_snapshot返回的数据中大部分字段(如成交量、最新价)可能为 0,因为此时尚未产生连续竞价交易。 - 性能考量:
data参数的数据是引擎直接推送的,访问速度极快;而get_history和get_snapshot需要向底层请求数据,频繁调用需注意性能和流控。