3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 PTrade 量化交易平台中,get_history 是一个非常核心的 API,用于获取指定股票或标的的历史 K 线行情数据。它可以获取单只或多只股票在不同周期(如分钟线、日线、周线等)下的开盘价、收盘价、最高价、最低价、成交量等信息。
get_history(count, frequency='1d', field='close', security_list=None, fq=None, include=False, fill='nan', is_dict=False)
'1d'。表示 K 线周期。支持的周期包括:
'1m', '5m', '15m', '30m', '60m', '120m''1d' (日线), '1w' 或 'weekly' (周线), 'mo' 或 'monthly' (月线), '1q' 或 'quarter' (季线), '1y' 或 'yearly' (年线)['open','high','low','close','volume','money','price']。指明需要获取的行情字段。支持的字段有:
'open':开盘价'high':最高价'low':最低价'close':收盘价'volume':交易量'money':交易金额'price':最新价'is_open', 'preclose', 'high_limit', 'low_limit', 'unlimited' 等字段。'600570.SS' 或 ['600570.SS', '000001.SZ'])。如果为 None,则默认获取上下文中 set_universe 设定的股票池中的所有股票。None。数据复权选项:
'pre':前复权'post':后复权'dypre':动态前复权None:不复权False。是否包含当前周期的数据。True 表示包含,False 表示不包含。'nan'。当获取不到某一时刻的分钟数据时,是否用上一分钟的数据进行填充。'pre' 表示用上一分钟数据填充,'nan' 表示用 NaN 填充(仅交易有效)。False。是否返回字典格式 {str: array()}。设置为 True 时取数速度相对较快。返回值的类型取决于传入的参数(特别是 is_dict、security_list 和 field 的数量):
OrderedDict,格式为 OrderedDict([(股票代码, array([时间, 开, 高, 低, 收, 量, 额, 最新价]))])。pandas.DataFrame,行索引为时间(datetime),列索引为行情字段。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 年之后的数据。run_daily 或 run_interval 等多线程定时函数中,尽量避免与 handle_data 同一时刻调用 get_history,以免偶发获取数据为空的问题。