🚀 AI 一键生成 ptrade 策略代码

ptrade 平台如何使用 get_history 获取一分钟及多分钟周期历史数据?

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

问题描述

一分钟线与多分钟周期数据get_history 取值逻辑

/

解决方案

在 ptrade 量化交易平台中,get_history 函数是获取历史 K 线数据的核心接口。对于高频或日内交易策略,准确获取一分钟线及多分钟周期数据至关重要。以下是 get_history 在处理分钟级数据时的取值逻辑详解:

1. 支持的分钟周期频率 (frequency)

get_historyfrequency 参数支持多种分钟级别的周期,包括:

  • 1m:1分钟线
  • 5m:5分钟线
  • 15m:15分钟线
  • 30m:30分钟线
  • 60m:60分钟线
  • 120m:120分钟线

2. 核心取值逻辑与参数

  • K线数量 (count):指定返回的 K 线根数。例如 count=10frequency='1m',则返回最近的 10 根 1 分钟 K 线。
  • 包含当前周期 (include)
    • include=False(默认):不包含当前正在运行、尚未结束的周期数据。例如在 10:05:30 调用获取 5 分钟线,返回的最新一根 K 线是 09:55-10:00 的数据。
    • include=True:包含当前未结束的周期数据。这在需要最新动态计算指标时非常有用。
  • 缺失数据填充 (fill):仅在交易模块有效。当获取不到某一时刻的分钟数据时:
    • 'nan'(默认):用 NaN 填充缺失数据。
    • 'pre':用上一分钟的数据进行填充。

3. 停牌与特殊情况处理

  • 停牌处理:ptrade 的时间轴为二级市场交易日日历,不会跳过停牌的日期或时间。停牌时,系统会使用停牌前的数据进行填充,此时成交量 (volume) 为 0。在编写策略时,可以通过判断 volume == 0 来过滤停牌期间的分钟线。
  • 数据起始时间:该接口只能获取 2005 年之后的数据。

4. 代码示例

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

def handle_data(context, data):
    # 获取过去10分钟的1分钟线数据(不包含当前分钟)
    his_1m = get_history(10, frequency='1m', field=['close', 'volume'], security_list=g.security, include=False)
    log.info('1分钟线收盘价:\n%s' % his_1m['close'])

    # 获取过去5根5分钟线数据(包含当前未结束的5分钟周期)
    his_5m = get_history(5, frequency='5m', field=['close', 'high', 'low'], security_list=g.security, include=True)
    log.info('5分钟线数据:\n%s' % his_5m)

5. 注意事项

  • 多线程限制get_history 接口不支持多线程同时调用。在 run_dailyrun_interval 等定时函数中,不要handle_data 等框架模块在同一时刻调用 get_history,否则可能会偶现获取数据为空的现象。
  • 返回格式:根据 Python 版本和查询股票数量的不同,返回格式可能是 DataFramePaneldict。建议在策略中明确指定 is_dict=True 以获得更快的取数速度和一致的字典格式返回。