🚀 AI 一键生成 ptrade 策略代码
立即体验

ptrade 中的 get_history 设 include=True 会不会在盘中拿到还没收盘的未来 K 线数据?

ptrade | 发布时间: 2026/8/9
以下内容由 EasyQuant 生成。

问题描述

ptrade 行情获取:get_history 中 include 参数对日线与分钟 K 线的实际影响
ptrade 中的 get_history 设 include=True 会不会在盘中拿到还没收盘的未来 K 线数据?

解决方案

在 ptrade 量化交易平台中,get_history 接口的 include 参数决定了是否在返回的历史行情数据中包含当前周期。默认情况下,includeFalse

针对您关心的“在盘中设为 True 会不会拿到还没收盘的未来 K 线数据”这一问题,答案是:在盘中(实盘/模拟盘)运行或回测时,如果 include=True,确实会获取到当前尚未结束(未收盘)的周期数据。这在某种意义上属于“当下即时数据”,但在回测中如果不注意使用方式,极易引入“未来函数”导致回测失真。

以下是 include 参数对日线与分钟 K 线的实际影响及避坑指南:


一、 对日线(1d)K 线的实际影响

1. 回测环境

  • include=False(默认):获取的是历史已收盘的日 K 线。例如,在 2023-10-27 的 handle_data 中调用,获取的最新一根 K 线是 2023-10-26 的收盘数据。
  • include=True:会包含当前交易日的日 K 线。由于股票回测的日线 handle_data 默认在 15:00(收盘时)执行,此时获取的当前日 K 线基本等同于最终收盘 K 线。

2. 实盘/模拟盘环境(盘中运行)

  • include=True:如果在盘中(例如 10:30)调用,返回的最新一根日 K 线将是当天从 9:30 到 10:30 的累积数据(此时的 close 字段为 10:30 的最新价,volume 为早盘一小时的成交量)。
  • 风险提示:这根 K 线是未定型的。随着盘中价格波动,这根 K 线的开高低收和成交量会持续变化,直到 15:00 收盘。如果在回测中使用了 include=True 的日线数据来计算指标(如 MA、MACD),而回测引擎在日线级别只在收盘时撮合,就会导致回测时使用的是完美的收盘价,而实盘中在盘中触发时该价格还在变动,从而产生严重的“未来函数”偏差。

二、 对分钟(1m / 5m 等)K 线的实际影响

1. 回测与实盘环境

  • include=False(默认):获取的是已经完全结束的分钟 K 线。例如在 09:32:00 执行时,获取的最新一根分钟 K 线是 09:31:00 结束的那一根。
  • include=True:会包含当前正在走的这一分钟 K 线。例如在 09:31:30 调用,会获取到 09:31:00 ~ 09:31:30 这 30 秒内临时生成的分钟 K 线。

2. 影响分析

  • 在分钟级别策略中,如果需要绝对精确的指标计算(如突破前一分钟高点),建议保持 include=False,确保计算指标所用的 K 线全部是已经“定型”的收盘数据。
  • 如果需要获取最实时的即时价格,通常直接通过 data[security]['close']get_snapshot 获取,无需通过 get_history(include=True) 去解析未完结的分钟 K 线。

三、 最佳实践与避坑指南

  1. 回测防骗,默认设为 False:编写技术指标策略(如双均线、MACD)时,强烈建议保持 include=False。这样可以确保回测与实盘逻辑高度一致,避免“盘中未收盘数据”参与指标计算导致回测虚高。
  2. 实时价格获取:如果策略需要在盘中获取最新价格进行限价单委托,应使用 data[sid]['close'](在 handle_data 中)或 get_snapshot(sid)(在 run_intervaltick_data 中),而不是依赖 get_history 的最后一根未完结 K 线。
  3. 停牌过滤get_history 遇到停牌标的时会用停牌前的数据填充,成交量为 0。如果 include=True 且当天停牌,获取的当天数据也是填充数据,需注意通过 volume == 0get_stock_status 进行过滤。