问题描述
解决方案
在 PTrade 量化交易平台中,get_history 函数是获取历史 K 线行情数据最常用的接口之一。其中,include 参数扮演着非常关键的角色,它主要用于控制获取的数据结果中是否包含当前周期。
include 参数详解
- 参数类型:
bool(布尔值) - 可选值:
True:包含当前周期的数据。False:不包含当前周期的数据。
- 默认值:
False(如果不填此参数,系统默认不包含当前周期)。
具体作用与场景举例
include 参数的作用取决于你策略运行的频率(frequency):
1. 日线级别策略 (frequency='1d')
假设今天是 周三,你在策略中调用 get_history(count=5, frequency='1d', include=...):
- 当
include=False(默认)时:函数会返回上周三到本周二(昨天)的 5 根日 K 线数据。这确保了你使用的数据都是已经完全收盘、确定的历史数据。 - 当
include=True时:函数会返回上周四到本周三(今天)的 5 根日 K 线数据。此时,今天的数据可能还在盘中变化(如果是在盘中调用),或者包含了今天的最终收盘数据。
2. 分钟级别策略 (frequency='1m')
假设当前时间是 10:05,你调用 get_history(count=5, frequency='1m', include=...):
- 当
include=False(默认)时:返回 10:00 到 10:04 这 5 分钟的完整 K 线数据。 - 当
include=True时:返回 10:01 到 10:05 的数据,其中 10:05 的数据是当前正在生成的、尚未走完的 K 线数据。
⚠️ 重要注意事项:防范“未来函数”
官方将 include 的默认值设置为 False 是有深刻用意的,主要是为了防止在回测中引入未来函数。
- 回测陷阱:在日线回测中,
handle_data通常在每天的特定时间(如 15:00)运行。如果设置include=True,你的策略在判断买卖条件时,实际上已经“提前”知道了当天的最高价、最低价和收盘价。这会导致回测收益曲线极其完美,但实盘中根本无法实现(因为盘中你无法预知当天的最终收盘价)。 - 实盘建议:在实盘交易中,如果你确实需要当前周期的最新价格来辅助判断,建议保持
include=False获取历史均线等指标,同时配合get_snapshot(security)或data[security]['close']来获取当前的最新切片价格,这样逻辑更加严谨且贴合实际交易场景。
总结:除非你有特殊的逻辑需求并且完全清楚自己在做什么,否则在编写 PTrade 策略时,建议保持 include 参数的默认值 False,以确保策略回测的真实性和可靠性。