一分钟线与多分钟周期线数据get_history取值逻辑。
/
问题描述
解决方案
在 ptrade 量化交易平台中,获取分钟级别的历史行情数据是编写日内高频策略或波段策略的基础。get_history 函数提供了强大的历史数据获取能力,支持从1分钟到多分钟(如5分钟、15分钟等)的周期线数据获取。
1. get_history 函数基础语法
get_history(count, frequency='1d', field='close', security_list=None, fq=None, include=False, fill='nan', is_dict=False)
2. 分钟线取值逻辑与参数设置
要获取分钟级别的数据,核心在于设置 frequency 参数。ptrade 支持以下分钟级别的频率:
- 1分钟线:
frequency='1m' - 5分钟线:
frequency='5m' - 15分钟线:
frequency='15m' - 30分钟线:
frequency='30m' - 60分钟线:
frequency='60m' - 120分钟线:
frequency='120m'
关键参数解析:
- count: 需要获取的K线根数。例如
count=10表示获取最近的10根K线。 - include: 是否包含当前尚未结束的周期。如果
include=False(默认),则只返回已经走完的K线;如果include=True,则会包含当前正在运行的这一根K线的数据(数据会随行情变动)。 - fill: 当获取不到某一时刻的分钟数据时(如停牌或无成交),是否用上一分钟的数据进行填充。
'pre'表示用上一分钟数据填充,'nan'表示用 NaN 填充(仅交易模块有效)。
3. 代码示例
示例一:获取单只股票过去10分钟的1分钟线收盘价
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取过去10分钟的1分钟线收盘价,不包含当前分钟
history_1m = get_history(10, frequency='1m', field='close', security_list=g.security, include=False)
log.info("过去10分钟的1分钟线收盘价:\n%s" % history_1m)
示例二:获取多只股票的5分钟线开盘价和收盘价
def initialize(context):
g.security = ['600570.SS', '000001.SZ']
set_universe(g.security)
def handle_data(context, data):
# 获取过去5根5分钟线的开盘价和收盘价
history_5m = get_history(5, frequency='5m', field=['open', 'close'], security_list=g.security)
# 提取特定股票的数据 (Python 3.11 环境下返回 DataFrame)
if history_5m is not None:
df_600570 = history_5m.query('code in ["600570.SS"]')
log.info("恒生电子的5分钟线数据:\n%s" % df_600570)
4. 注意事项
- 数据范围:
get_history只能获取2005年以后的数据。 - 停牌处理:针对停牌场景,时间轴依然为二级市场交易日日历,停牌时使用停牌前的数据填充,成交量为0。
- 多线程限制:在
run_daily或run_interval等定时函数中,不要与handle_data等框架模块在同一时刻调用get_history或get_price接口,否则可能会偶现获取数据为空的现象。 - 性能优化:如果对取数速度有较高要求,可以将
is_dict参数设置为True,返回字典格式的数据,解析速度会更快。