前视偏差(数据泄漏)

前视偏差(lookahead bias),也叫数据泄漏(data leakage),指的是回测里用到了在模拟决策发生的那一刻根本拿不到的信息。它会不声不响地抬高成绩,因为规则看上去像是预见了什么,其实是有人把答案告诉了它;它可以从数据、指标、价位,甚至从研究流程本身钻进来。

Senzoukria · 术语表 · 更新于 2026 年 9 月


未来从哪些地方渗进来

常见入口,从最明显的到最隐蔽的
入口例子在结果里的样子
K 线时点按某根 K 线的收盘做决策,却按同一根 K 线的开盘成交入场总能吃到催生信号的那一段行情
价位用整个交易时段的数据标出时段 POC 或价值区,再拿它做盘中交易价格对这些价位尊重得可疑
指标居中移动平均,或者用到后续 K 线的平滑处理拐点在发生之前就被识别出来
数据用换月之后的信息拼出的调整后连续合约;标的清单里的幸存者偏差真实路径本有跳空的地方却是一条平滑序列
期权背景用今天的伽马分布去解释过去的某个交易时段一种能解释历史上每一天的市场状态
研究流程检视完结果之后再挑测试期一个名不副实的样本外时期

怎么把它挡在门外

  • 在收盘的 K 线上做决策,并在下一根 K 线的开盘入场;如果要用别的约定,就把它明确写出来并说明理由。
  • 每一个价位、分布和指标,都只用决策 K 线之前可得的 K 线来计算,并在那一刻冻结。
  • 记下每个输入是在什么时刻可知的,包括期权数据的未平仓量日期,并拒绝时间戳晚于决策时刻的输入。
  • 把换月政策写进记录里来处理合约切换,不要在不处理价格差的情况下把一个价位跨到期月带过去。
  • 在检视任何参数之前,先把训练期和测试期的边界定死。

为什么它很难被发现

泄漏不会报错,它只会给出一个更漂亮的数字。测试照跑,曲线照涨,没有任何东西会标出原因。通常的蛛丝马迹是结果太整齐了:入场总在造出行情的那根 K 线上,价位守住的次数多得不像话,样本外曲线长得和样本内一模一样。检验方法是:只用一个实盘流程当时真能拿到的信息,把规则重跑一遍——这往往会让资金曲线大幅缩水。

在 Senzoukria 里

自动回测引擎在收盘的 K 线上做决策,并在下一根 K 线的开盘成交入场,出场按 K 线价格和配置的成本建模,这在结构上就排除了最常见的那种 K 线时点泄漏。前推模式的提示也写明了它自己的护栏:参数在每一片的前段上选出,在后段上评估,而后段完全没有参与选择。

本站的研究指南对价位沿用同一条规则:用第二天的分布才发现的价位会引入前视偏差,所以规则里用到的足迹或分布价位,必须用信号 K 线之前可得的信息来确定。一条读取时段分布或某个价位的策略,应当逐根 K 线确认它读到的是正在生成中的数值,而不是已经完成的数值;引擎的 K 线时点并不能保护你免于一个用后续数据算出来的价位。

常见错误

  • 按信号 K 线的收盘价成交,仿佛委托早就挂在那里。
  • 把一个已经走完的时段的价值区,拿来给这个时段内部的入场用。
  • 用今天的伽马分布去解释历史上的某一天。
  • 在切片边界已经根据结果挪动过之后,仍然把前推分析当作没有泄漏。

其他语言版本

常见问题

前视偏差和过拟合是一回事吗?
不是,尽管两者都会抬高回测成绩。过拟合是用当时确实可得的信息,把规则调得贴合某一段样本的偶然性;前视偏差用的则是当时还拿不到的信息。一条规则可以完全没有其中一个,却满是另一个。检查两者的方法相同:追问在每一个决策时刻,这个流程究竟知道些什么。
在下一根 K 线开盘入场就能消除前视偏差吗?
它能消除 K 线时点那一种,也是最常见的一种。但它挡不住用后续数据算出来的价位或指标,挡不住用换月之后的信息拼成的调整序列,也挡不住一个在看完结果之后才挑定测试期的研究流程。每一个入口都需要自己的检查。
期权数据会泄漏进期货回测吗?
会。未平仓量每天收盘后才发布一次,所以用今天的未平仓量搭出来的伽马价位,描述的是今天盘中根本观察不到的持仓。读取这类价位的历史测试,必须使用决策时刻当时就存在的那个快照,连同它自己的时间戳,而不是后来才可得的那一份。

继续阅读