问题描述
/
解决方案
在 ptrade 量化交易平台中,get_history 函数是获取历史 K 线行情数据的核心接口。其中,include 参数用于控制返回的数据中是否包含当前周期的数据。
include 参数详解
- 参数含义:是否包含当前周期的数据。
- 数据类型:布尔值 (
bool)。 - 可选值:
True:包含当前周期。False:不包含当前周期。
- 默认值:
False(如果不显式传入该参数,系统默认不包含当前周期)。
什么是“当前周期”?
“当前周期”取决于你调用 get_history 时所处的环境(回测/实盘)以及你请求的数据频率(frequency)。
1. 日线级别 (frequency='1d')
假设今天是 2023年10月20日,你在 handle_data 中调用 get_history(count=5, frequency='1d'):
include=False(默认):返回过去 5 个已结束的交易日数据,即 10月13日、16日、17日、18日、19日的日 K 线。include=True:返回包含今天在内的 5 个交易日数据,即 10月16日、17日、18日、19日、20日的日 K 线。注意,如果是在盘中调用,10月20日的数据是截至调用时刻的未走完的 K 线数据。
2. 分钟级别 (frequency='1m')
假设当前时间是 10:05:00,你在 handle_data 中调用 get_history(count=3, frequency='1m'):
include=False(默认):返回 10:02、10:03、10:04 这三根已经走完的分钟 K 线。include=True:返回 10:03、10:04 以及当前正在运行的 10:05 这三根分钟 K 线。同样,10:05 的 K 线数据是截至调用时刻的动态数据。
代码示例
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
# 获取过去 5 天的收盘价(不包含今天)
history_without_today = get_history(5, '1d', 'close', g.security, include=False)
log.info("不包含今天的历史数据:\n%s" % history_without_today)
# 获取过去 5 天的收盘价(包含今天当前的最新价)
history_with_today = get_history(5, '1d', 'close', g.security, include=True)
log.info("包含今天的历史数据:\n%s" % history_with_today)
使用建议
- 避免未来函数:在回测中,如果你使用日线频率并在盘中(如 14:50)进行交易决策,通常建议使用
include=False获取昨天的收盘价作为参考,或者使用data[security]['close']获取当前时刻的最新价。如果使用include=True获取日线数据,可能会提前获取到当天的最终收盘价(取决于回测引擎的撮合机制),从而引入未来函数。 - 计算技术指标:在计算 MA、MACD 等技术指标时,通常需要使用已经确定的历史数据,因此默认的
include=False是最常用的选择。