问题描述
/
解决方案
在 ptrade 量化交易平台中,使用 get_history 函数获取 K 线数据时,include 参数用于控制是否包含当前尚未结束的 K 线周期。当获取 5 分钟线(frequency='5m')时,include=True 和 include=False 的具体区别如下:
1. include=False(默认值)
含义:不包含当前正在进行的周期,只返回已经完全走完的 K 线数据。
举例说明:
假设当前时间是 10:03,你请求获取 5 分钟线数据。
- 5 分钟线的周期划分通常是 09:30-09:35, 09:35-09:40 ... 09:55-10:00, 10:00-10:05。
- 此时 10:00-10:05 这个周期的 K 线还没有走完。
- 如果设置
include=False,函数返回的最新一根 K 线将是 09:55-10:00 这一根已经确定的完整 K 线。
2. include=True
含义:包含当前正在进行的周期,返回的最新一根 K 线是当前未走完的 K 线的实时快照。
举例说明:
同样假设当前时间是 10:03,请求获取 5 分钟线数据。
- 如果设置
include=True,函数返回的最新一根 K 线将是 10:00-10:05 这一根 K 线。 - 注意:这根 K 线的数据(如收盘价、最高价、最低价、成交量)是截至 10:03 的实时数据,随着时间推移到 10:05,这根 K 线的数据还会不断变化。
💡 实际应用建议与注意事项
-
避免未来函数(回测场景):
在回测中,通常建议使用默认的include=False。因为如果你在 10:00 触发了handle_data,此时如果用include=True获取 10:00-10:05 的数据,实际上你提前获取了未来 5 分钟的信息,这会导致严重的回测失真(未来函数)。 -
实时信号计算(实盘/模拟盘场景):
如果你在实盘交易中,策略逻辑需要基于当前正在形成的 K 线的最新价格来计算某些动态指标(例如盘中突破),你可以使用include=True。但必须清楚,此时最新一根 K 线的close实际上是当前的最新价(price),而不是最终的收盘价。
代码示例:
# 获取过去5根已经走完的5分钟K线(推荐,安全)
history_closed = get_history(5, frequency='5m', field='close', security_list='600570.SS', include=False)
# 获取包含当前未走完的共5根5分钟K线(最新一根为动态数据)
history_current = get_history(5, frequency='5m', field='close', security_list='600570.SS', include=True)