发布 2026-10-27
未来函数
未来函数,指代码读取了在成交那一刻根本不存在的数据 —— 它是前视偏差在代码层面的形态,也是伪造回测最快的办法。
是什么
未来函数,指代码读取了在成交那一刻根本不存在的数据。
它造成的失真有个正式名字:前视偏差。但两者不是一回事。前视偏差说的是结果被污染了;未来函数说的是代码里哪一行在偷看未来。
这个区别很实用。「有没有前视偏差」是个判断题,容易扯皮;「这一行是不是读了整个数组」是是非题,一分钟就能答。
为什么在 AI 量化里更常见
让大模型写一段回测,它会主动写出未来函数 —— 你没要求,它也会。因为它默认的归一化、排序、算阈值方式,都是在整个数组上做的,而整个数组里就包含了未来。
模型不算“犯错”,它只是按你问的答了。「写一个能证明这个策略有效的回测」和「写一个在当时就能跑出来的回测」是两个不同的要求,只有后者才算测试。
常见形态
| 形态 | 代码在干什么 |
|---|---|
| 全样本归一化 | 除以整段时期的均值或标准差 |
| 同根收盘价成交 | 用收盘价做决策,又在同一个收盘价成交 |
| 重述财报 | 用后来修正过的数字,而不是当时首次披露的 |
| 今天的成分股 | 遍历现在的指数成分,而不是当时的 |
| 前复权序列 | 用前复权价,于是后来的分红被算进了过去的价里 |
| 未来的股票池 | 把测试期之后才退市的股票提前剔掉 |
怎么检查
把数据按每个决策日截断,重跑一遍。
如果某一天的数字,在加上后面的数据之后变了,那这段代码就在读未来。 这一个测试能抓出绝大多数情况,成本只是一层循环。