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

PTrade量化交易:get_history 函数获取历史价格数据详解与示例

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

问题描述

PTrade中get_history函数如何获取历史价格数据,参数含义是什么?

解决方案

在 PTrade 量化交易平台中,get_history 是一个非常核心的 API,用于获取指定股票或标的的历史 K 线行情数据。它可以获取单只或多只股票在不同周期(如分钟线、日线、周线等)下的开盘价、收盘价、最高价、最低价、成交量等信息。

函数原型

get_history(count, frequency='1d', field='close', security_list=None, fq=None, include=False, fill='nan', is_dict=False)

参数详解

  • count (int):必填参数。表示要获取的 K 线数量,必须大于 0。
  • frequency (str):选填参数,默认为 '1d'。表示 K 线周期。支持的周期包括:
    • 分钟级别:'1m', '5m', '15m', '30m', '60m', '120m'
    • 日/周/月/年级别:'1d' (日线), '1w''weekly' (周线), 'mo''monthly' (月线), '1q''quarter' (季线), '1y''yearly' (年线)
  • field (str 或 list):选填参数,默认为 ['open','high','low','close','volume','money','price']。指明需要获取的行情字段。支持的字段有:
    • 'open':开盘价
    • 'high':最高价
    • 'low':最低价
    • 'close':收盘价
    • 'volume':交易量
    • 'money':交易金额
    • 'price':最新价
    • 注:日线还支持 'is_open', 'preclose', 'high_limit', 'low_limit', 'unlimited' 等字段。
  • security_list (str 或 list):选填参数。要获取数据的股票代码或代码列表(如 '600570.SS'['600570.SS', '000001.SZ'])。如果为 None,则默认获取上下文中 set_universe 设定的股票池中的所有股票。
  • fq (str):选填参数,默认为 None。数据复权选项:
    • 'pre':前复权
    • 'post':后复权
    • 'dypre':动态前复权
    • None:不复权
  • include (bool):选填参数,默认为 False。是否包含当前周期的数据。True 表示包含,False 表示不包含。
  • fill (str):选填参数,默认为 'nan'。当获取不到某一时刻的分钟数据时,是否用上一分钟的数据进行填充。'pre' 表示用上一分钟数据填充,'nan' 表示用 NaN 填充(仅交易有效)。
  • is_dict (bool):选填参数,默认为 False。是否返回字典格式 {str: array()}。设置为 True 时取数速度相对较快。

返回值说明

返回值的类型取决于传入的参数(特别是 is_dictsecurity_listfield 的数量):

  1. is_dict=True:返回 OrderedDict,格式为 OrderedDict([(股票代码, array([时间, 开, 高, 低, 收, 量, 额, 最新价]))])
  2. 单只股票 (is_dict=False):返回 pandas.DataFrame,行索引为时间(datetime),列索引为行情字段。
  3. 多只股票 (is_dict=False, Python 3.11环境):返回 pandas.DataFrame,包含 code 列和对应的行情字段列。

代码示例

以下是在 PTrade 策略中使用 get_history 的常见场景:

def initialize(context):
    # 设置股票池
    g.security = ['600570.SS', '000001.SZ']
    set_universe(g.security)

def handle_data(context, data):
    # 示例 1:获取单只股票过去 5 天的收盘价(不复权)
    his_close = get_history(5, '1d', 'close', security_list='600570.SS')
    log.info("恒生电子过去5天收盘价:\n%s" % his_close)

    # 示例 2:获取股票池中所有股票过去 10 分钟的成交量
    his_vol = get_history(10, '1m', 'volume', security_list=g.security)
    log.info("股票池过去10分钟成交量:\n%s" % his_vol)

    # 示例 3:获取单只股票过去 5 天的前复权开盘价和收盘价
    his_multi_fields = get_history(5, '1d', ['open', 'close'], security_list='600570.SS', fq='pre')
    log.info("恒生电子前复权开盘与收盘价:\n%s" % his_multi_fields)

    # 示例 4:使用 is_dict=True 加速获取数据
    his_dict = get_history(5, '1d', security_list='600570.SS', is_dict=True)
    log.info("字典格式返回的历史数据:\n%s" % his_dict)

注意事项

  • get_history 只能获取 2005 年之后的数据。
  • 针对停牌的股票,时间轴不会跳过停牌日,而是使用停牌前的数据填充,且成交量为 0。
  • run_dailyrun_interval 等多线程定时函数中,尽量避免与 handle_data 同一时刻调用 get_history,以免偶发获取数据为空的问题。