滚动验证、交叉验证到底是什么?普通人也能看懂吗?

交叉验证是在换考卷,滚动验证是在让时间往前走。看懂数据怎么切,就能发现回测有没有偷看答案。

滚动验证、交叉验证到底是什么?普通人也能看懂吗?
直接答案:能,而且没那么玄乎。 交叉验证是换几张卷子考,滚动验证是严格按时间考试。你只要盯住一件事:策略有没有提前见过答案。

量化报告有个毛病。

你明明只问一句:“这策略到底靠不靠谱?”

它先给你扔过来四个英文缩写:K-FoldWalk-ForwardPurged CVEmbargo

我只是想看个回测,它怎么突然开始考英语了?

别急着关页面。这几个词说到底,都在查同一件事:这套策略是真会做题,还是提前背过答案?

先留一张没见过的卷子

假设你手里有 2024 年到 2025 年的交易数据。

最简单的验证方法,是把最后几个月先藏起来。前面的数据拿去研究,入场条件、止损、参数全都定死。等什么都不能改了,再把最后几个月拿出来考一次。

前面那部分叫训练数据。最后藏起来的那部分叫测试数据。

这不难理解。难的是忍住不偷看。

很多回测嘴上说测试,实际流程是这样的:考一次,不赚钱,回去改参数;再考一次,还不赚钱,再加个过滤条件。改到曲线终于抬头,然后宣布策略“通过测试”。

这不是考试。这是拿着答案改卷子,改完还给自己批了个满分。

只留一张卷子也有问题。假如最后三个月刚好是大牛市,趋势策略可能闭着眼都赚钱。换到震荡市,裤衩子说没就没。

所以,不能只考一次。

交叉验证:换几张卷子再考

先别管术语,想象一下学校月考。

把数据分成几份。每一轮藏起其中一份,用剩下的数据准备,再去考被藏起来的那份。几轮都做完,看看好成绩是不是只靠某一张卷子撑着。

研究里把这种“轮流换卷子”的办法叫 交叉验证(Cross-Validation)

普通机器学习里经常用 K 折交叉验证。数据分成 K 份,轮流拿一份测试。有时还会先把顺序打乱。

图片、用户表格这类数据,打乱可能没事。交易数据不行。交易数据有昨天、今天和明天。

你不能拿 2025 年的数据训练,再回头证明自己会预测 2024 年。那不叫预测。那叫穿越以后回来参加高考。

scikit-learn 的 TimeSeriesSplit 文档也专门提醒:普通交叉验证可能出现“用未来训练、拿过去测试”的问题。时间序列切分时,训练数据必须在测试数据之前。scikit-learn:TimeSeriesSplit

滚动验证:时间不许倒着走

交易数据既然不能乱洗,那就按时间往前考。

例如,先用过去 12 个月准备策略,拿接下来的 3 个月考试。考完以后,时间整体往前挪 3 个月,再考下一段。就这么一轮一轮走到最新数据。

每次考试时,策略只能看见当时已经发生的事。明天的答案,今天一眼都不许瞄。

滚动验证按时间顺序分成四轮训练与测试
每轮只用过去准备,再考下一段没见过的数据。平均成绩不是重点,哪一轮开始翻车才是。

研究里常把它叫 滚动起点时间序列交叉验证。交易圈更常说 滚动验证Walk-Forward Validation

名字听起来很高级,做法却不一定相同。

有人把旧数据一直留着,训练区越积越长;有人只看最近一段,太老的数据直接丢掉。有人每一轮允许重新调参数,也有人从头到尾不许改。

所以别看见 Walk-Forward 就自动放心。先问清楚它怎么滚。轮子装反了,滚得越勤,离谱得越远。

Forecasting: Principles and Practice 对这件事的解释也很清楚:每一个测试点,只能使用它之前发生的数据训练;然后评估起点继续往前移动。OTexts:时间序列交叉验证

一句话记住:交叉验证是在换卷子,滚动验证是在保证时间不倒流。

这几种验证,到底差在哪?

方法怎么考能回答什么最容易藏住什么
留出一段前面准备,最后考一次最终版本能否过一张陌生卷子只考一次,可能碰巧押中行情
普通 K 折分成 K 份,轮流考试模型换一批样本是否还稳定交易数据一打乱,未来可能混进过去
滚动验证用过去准备,考下一段,再往前走换时间、换行情还能不能活每轮偷偷改规则,照样能把卷子刷熟
带隔离的验证切分边界留出空档持仓跨期时能否挡住信息泄漏空档太短,答案还会从墙缝里钻过去

表不用背。记住一句就够:考卷和答案挨得越近,成绩越值得怀疑。

为什么两段数据中间还要留空?

假设一笔交易周一开仓,周五才平仓。你却在周三把训练数据和测试数据一刀切开。

左半边嘴上说“我没见过未来”,右脚已经踩进周五了。

这就是边界上的信息泄漏。表面分成了两间考场,中间那堵墙却漏音。

研究里通常会把跨过分界线的样本清出去,这叫 Purging。有时还会在两边再空出一点距离,这段隔离期叫 Embargo

普通人不用先学公式。拿到报告,只问一句就够:一笔交易如果跨过训练和测试的分界线,你们怎么处理?

对方要是开始东拉西扯,墙大概率不太隔音。

验证做得越复杂,就越靠谱吗?

不一定。

假设有人测了 500 组参数。第一轮亏钱,改止损;第二轮还亏,加个过滤条件;哪段翻车,就针对哪段补规则。最后总算找出一组历史收益特别漂亮的参数。

不容易。毕竟给历史行情 500 次机会,它总得配合一次。

参数调到第 500 版,终于把历史行情盘问到招供了。

测试数据本来是期末考试。每亏一次就回去改规则,它慢慢变成了练习册。再改几十次,这张卷子比自家族谱还熟。

研究里把这种问题叫 回测过拟合(Backtest Overfitting):试过的策略和参数太多,手里的数据却太少。最后选中的“冠军”,可能不是真会赚钱,只是最会背这段历史。

Bailey、Borwein、López de Prado 和 Zhu 的研究专门讨论了这个问题:从大量策略或参数里挑最好看的结果,很容易把运气当成能力。The Probability of Backtest Overfitting

所以,滚动验证不是免死金牌。它能让作弊更难,但拦不住有人把期末考试刷成五三题库。

普通人看报告,先问这六句

别急着看年化收益,也别先数夏普比率后面有几个零。先问:

  1. 数据按时间排好了吗? 训练必须在前,测试必须在后。
  2. 测试数据真的没被看过吗? 调参数、挑指标、改规则,都算看过。
  3. 每一轮成绩都给了吗? 只给平均数,可能是把几场惨败揉没了。
  4. 每轮都扣费用了吗? 手续费、点差、滑点和资金费率,一个都不能等上线再想。
  5. 一共试过多少个版本? 只展示冠军、不公布参赛人数,这比赛多少有点贴心。
  6. 最后还有一张完全没碰过的卷子吗? 所有选择结束后,再考一次,才算真考试。

一份报告要是连数据怎么切都不肯讲,却把收益曲线画得比心电图还激动,先别跟着激动。

什么样的结果更值得信?

不是每一轮都赚钱。

每一轮都赚钱,反而容易让人想看看答案藏在哪只袖子里。

更值得信的报告,会老老实实告诉你:哪段赚钱,哪段失灵;最差一轮亏了多少;利润是不是只靠一场大行情;成本稍微加一点,结果会不会当场翻脸。

最好再换一种切法。如果结论没怎么变,可信度才会上去一点。

注意,只是“一点”。历史切得再漂亮,还是历史。市场结构会变,真实成交可能更差,数据本身也可能有偏差。

验证不能保证未来赚钱。它只能先把那些靠偷看答案才成立的策略揪出来。

用 EdgePilot Research 把卷子摊开

把策略规则、历史数据、费用和切分方式放进 EdgePilot Research。不要只看一条总收益曲线,逐段看每一轮发生了什么。

哪一段开始亏?费用加上以后还剩多少?收益是不是只靠某一种行情?换个时间切法,结论还站得住吗?

这些问题摆出来,你自然会知道下一步该继续测、修改规则,还是趁早放弃。

工具负责把卷子摊开。它不负责替策略作弊,也不负责替你相信。

EdgePilot Research 将规则和历史数据分段测试并输出继续、修改或放弃的决定
输入规则和历史数据,逐段找出哪段翻车,再决定继续、修改还是放弃。

常见问题

交叉验证轮数越多越好吗?

不是。轮数越多,计算越重,每一段测试数据也可能越少。样本太少,单轮成绩会晃得厉害。怎么分,要看数据长度、持仓周期和你想检查的行情,不能拿轮数当勋章。

滚动窗口和扩展窗口有什么区别?

滚动窗口只保留最近一段数据,老数据会被丢掉。扩展窗口则把过去的数据一直攒着。前者更看重近期市场,后者利用的历史更多。策略容易过时,滚动窗口可能更合适;规律比较稳定,扩展窗口可能更有用。

做了滚动验证,还需要模拟盘吗?

需要。滚动验证考的是历史卷子。模拟盘还要查数据延迟、下单错误、滑点和程序掉链子。笔试过了,不等于真到考场就不会出岔子。

不会写代码,也能判断报告吗?

能。你不必亲手实现算法,但必须问清楚:数据怎么切,时间有没有打乱,测试集看过几次,每轮成绩给没给,费用扣没扣。

检查费用时,可以继续算一遍手续费会吃掉多少净利润,再测试加入真实滑点后回测还剩多少

这几句都答不明白,代码写一万行也只是把问题藏得更深。

最后的判断

交叉验证是在换卷子。滚动验证是在保证时间只能往前走。Purging 和 Embargo,是不让答案从考场边界漏进来。

名字可以一个比一个高级,问题一直没变:这套策略是真会做题,还是把同一张卷子背熟了?

所以,下次再看到“已通过严格滚动验证”,先别鼓掌。

问问卷子怎么出的,考了几次,改过几回,最后那张有没有提前见过。

真本事不怕换卷子。只会背答案的,最怕你问考试过程。


研究与风险说明:本文为量化研究教育内容,不构成投资建议、收益承诺或交易指令。文中的时间切分仅用于解释机制;实际方案应根据数据频率、持仓周期、标签重叠和策略用途设计。