3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,get_history 接口的 include 参数决定了是否在返回的历史行情数据中包含当前周期。默认情况下,include 为 False。
针对您关心的“在盘中设为 True 会不会拿到还没收盘的未来 K 线数据”这一问题,答案是:在盘中(实盘/模拟盘)运行或回测时,如果 include=True,确实会获取到当前尚未结束(未收盘)的周期数据。这在某种意义上属于“当下即时数据”,但在回测中如果不注意使用方式,极易引入“未来函数”导致回测失真。
以下是 include 参数对日线与分钟 K 线的实际影响及避坑指南:
1d)K 线的实际影响include=False(默认):获取的是历史已收盘的日 K 线。例如,在 2023-10-27 的 handle_data 中调用,获取的最新一根 K 线是 2023-10-26 的收盘数据。include=True:会包含当前交易日的日 K 线。由于股票回测的日线 handle_data 默认在 15:00(收盘时)执行,此时获取的当前日 K 线基本等同于最终收盘 K 线。include=True:如果在盘中(例如 10:30)调用,返回的最新一根日 K 线将是当天从 9:30 到 10:30 的累积数据(此时的 close 字段为 10:30 的最新价,volume 为早盘一小时的成交量)。include=True 的日线数据来计算指标(如 MA、MACD),而回测引擎在日线级别只在收盘时撮合,就会导致回测时使用的是完美的收盘价,而实盘中在盘中触发时该价格还在变动,从而产生严重的“未来函数”偏差。1m / 5m 等)K 线的实际影响include=False(默认):获取的是已经完全结束的分钟 K 线。例如在 09:32:00 执行时,获取的最新一根分钟 K 线是 09:31:00 结束的那一根。include=True:会包含当前正在走的这一分钟 K 线。例如在 09:31:30 调用,会获取到 09:31:00 ~ 09:31:30 这 30 秒内临时生成的分钟 K 线。include=False,确保计算指标所用的 K 线全部是已经“定型”的收盘数据。data[security]['close'] 或 get_snapshot 获取,无需通过 get_history(include=True) 去解析未完结的分钟 K 线。False:编写技术指标策略(如双均线、MACD)时,强烈建议保持 include=False。这样可以确保回测与实盘逻辑高度一致,避免“盘中未收盘数据”参与指标计算导致回测虚高。data[sid]['close'](在 handle_data 中)或 get_snapshot(sid)(在 run_interval 或 tick_data 中),而不是依赖 get_history 的最后一根未完结 K 线。get_history 遇到停牌标的时会用停牌前的数据填充,成交量为 0。如果 include=True 且当天停牌,获取的当天数据也是填充数据,需注意通过 volume == 0 或 get_stock_status 进行过滤。