get_history函数取五分钟线,include使用true和false有什么区别?
/
问题描述
解决方案
在 ptrade 量化交易平台中,使用 get_history 函数获取历史 K 线数据时,include 参数用于控制是否包含当前正在进行的、尚未结束的 K 线周期。默认情况下,include=False。
当您获取五分钟线(frequency='5m')时,include=True 和 include=False 的具体区别如下:
1. include=False(默认值)
- 含义:不包含当前尚未结束的五分钟周期,只返回已经走完的、完整的历史五分钟 K 线。
- 举例说明:假设当前时间是 10:03。五分钟的 K 线周期划分通常是 09:30-09:35, 09:35-09:40... 09:55-10:00, 10:00-10:05。
- 此时 10:00-10:05 这个周期的 K 线还没有走完。
- 如果设置
include=False,get_history返回的最新一根 K 线将是 09:55-10:00 这一根完整的 K 线。
- 适用场景:适用于需要使用确定性、已收盘的 K 线数据计算技术指标(如均线、MACD 等)的策略,避免因为当前 K 线价格跳动导致指标不断变化(即避免“未来函数”或“信号闪烁”)。
2. include=True
- 含义:包含当前正在进行的、尚未结束的五分钟周期。这根 K 线的数据是截至调用函数那一刻的最新快照数据。
- 举例说明:同样假设当前时间是 10:03。
- 如果设置
include=True,get_history返回的最新一根 K 线将是 10:00-10:05 这一根。 - 注意:这根 K 线的
close(收盘价)实际上是 10:03 这一刻的最新价,high、low、volume也是截至 10:03 的数据。随着时间推移到 10:04、10:05,这根 K 线的数据还会继续变化,直到 10:05 才最终定型。
- 如果设置
- 适用场景:适用于需要结合当前最新价格动态来判断突破、止损止盈,或者对实时性要求极高的策略。
代码示例对比
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 假设当前时间是 10:03
# 1. include=False (默认)
# 获取过去 5 根已经走完的 5 分钟线
hist_false = get_history(5, '5m', 'close', g.security, include=False)
# hist_false 的最后一条数据时间戳是 10:00
# 2. include=True
# 获取包含当前未走完周期的 5 根 5 分钟线
hist_true = get_history(5, '5m', 'close', g.security, include=True)
# hist_true 的最后一条数据时间戳是 10:05(代表 10:00-10:05 这个周期),其 close 值为 10:03 的最新价
总结建议
- 如果您编写的是基于收盘价触发的经典技术指标策略,强烈建议保持默认的
include=False,这样可以保证回测和实盘信号的一致性。 - 如果您需要盘中实时突破的逻辑,可以使用
include=True获取包含最新价的 K 线,但需注意处理好信号可能反复闪烁的问题。