一分钟线与多分钟周期数据get_history 取值逻辑
/
问题描述
解决方案
在 ptrade 量化交易平台中,get_history 函数是获取历史 K 线数据的核心接口。对于高频或日内交易策略,准确获取一分钟线及多分钟周期数据至关重要。以下是 get_history 在处理分钟级数据时的取值逻辑详解:
1. 支持的分钟周期频率 (frequency)
get_history 的 frequency 参数支持多种分钟级别的周期,包括:
1m:1分钟线5m:5分钟线15m:15分钟线30m:30分钟线60m:60分钟线120m:120分钟线
2. 核心取值逻辑与参数
- K线数量 (
count):指定返回的 K 线根数。例如count=10且frequency='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_daily或run_interval等定时函数中,不要与handle_data等框架模块在同一时刻调用get_history,否则可能会偶现获取数据为空的现象。 - 返回格式:根据 Python 版本和查询股票数量的不同,返回格式可能是
DataFrame、Panel或dict。建议在策略中明确指定is_dict=True以获得更快的取数速度和一致的字典格式返回。