切分时间轴
横条从左到右就是时间先后,宽度等于该段占总区间的比例。斜纹那段是间隔期,它不参与训练也不参与验证。
| 区段 | 起止 | 长度 | 占比 |
|---|---|---|---|
| 训练段(样本内) | 第 1 ~ 686 期 | 686 期 | 68.6% |
| 间隔期 | 第 687 ~ 706 期 | 20 期 | 2% |
| 验证段(样本外) | 第 707 ~ 1000 期 | 294 期 | 29.4% |
间隔期在这里起什么作用
训练段与验证段之间空出 20 期不参与任何计算。这几期是隔离带,用来吸收滚动窗口指标的回看长度,让验证段开头第一个信号所依赖的数据完全落在训练段之外。
用之前先记住三件事
- 时间序列不能随机打乱再切。打乱之后训练段里会混进验证段之后发生的行情,等于让模型提前看过答案。
- 样本外只有第一次是真的样本外。用它反复调参、反复重切,它就悄悄变成了另一段样本内。
- 切分只能降低自欺的概率,不能证明策略成立。样本外表现好,充其量是「这一次没被证伪」。
教育演示:本工具只做区间切分的算术,不读取任何行情数据,不评价策略优劣,也不发出任何买卖信号。 回测与样本外检验都基于历史数据,回测≠实盘,历史区间上的结论不构成对未来的承诺。本工具不构成投资建议。
怎么用
5 步- 先选口径:你手上是「多少根 K 线」就选按期数,是「从哪天到哪天」就选按日期。两种口径算出来的东西一样,只是日期口径会顺带把每段的起止日期标出来,对照行情软件更方便。
- 决定切两段还是三段:只想验证一次选两段:训练 + 验证。如果你打算在验证段上反复比较几套方案,那就选三段,多留一段最终测试——那一段留到最后只看一次。
- 定分割位置:按比例就拖动滑块,按日期就直接填训练段的最后一天。两种方式的结果是同一个东西,按日期的好处是能把切口对齐到某个你想避开的行情节点。
- 填间隔期:如果策略里有滚动窗口指标,把最长的那个回看长度填进间隔期。比如用到 60 期均线就填 60,让验证段第一个信号所依赖的数据完全落在训练段之外。
- 看时间轴和提示:横条的宽度就是占比,斜纹那段是隔离带。下方提示会告诉你验证段是不是太短、比例是不是失衡。复制结果链接发给别人,打开就是同一份切分。
这个工具只回答一个机械问题
一段历史,切在哪儿,前面归训练、后面归验证,各多长、各占多少。就这些。 它不读行情、不算收益、不评价策略好坏,纯粹是区间切分的算术。 之所以值得单独做成一个工具,是因为这道算术前面那个决定——到底要不要切—— 才是区分「一份能看的回测」和「一份自我安慰」的分水岭。
不切会发生什么?你在全部历史上把参数调到最优,回测曲线漂亮得不像话, 然后拿这套参数上实盘,表现和回测判若两人。原因不神秘:参数是照着这段历史的答案挑出来的, 它同时拟合了两样东西——真正会重复出现的规律,和只属于这段行情的偶然噪声。 前者能延续,后者不能,而回测结果不会告诉你自己吃到的是哪一份。 切分做的事情,就是硬生生留出一段「调参时看不到」的数据,让它替你回答这个问题。
三个参数怎么理解
分割位置决定训练段和验证段各多长。 按比例切简单直接,按日期切的好处是能把切口对齐到具体的行情节点上—— 比如你想让验证段完整覆盖某一轮牛熊,而不是从半山腰开始。 两种方式算出来是同一个东西,本工具在日期口径下会把每段的起止日期一并标出来,方便你回行情软件里对照。
间隔期是训练段末尾与验证段开头之间刻意空出来的一段,谁都不用。 它存在的唯一理由是堵住指标窗口造成的渗漏:验证段第一天的 60 期均线, 是由它前面 60 期数据算出来的,而那 60 期几乎全躺在训练段里。 不留间隔,训练段的信息就顺着指标窗口流进了验证段,而且这个流量在结果表格里完全看不出来。 填多少?取你所有回看窗口里最长的那一个;如果标签本身还要往后看若干期才兑现,再加上这个持有期。
切两段还是三段取决于你打算在验证段上做几次决策。 只跑一次、跑完就接受结果,两段够了;只要涉及在多套方案之间挑选,就该切三段, 把最终测试段锁到全部定稿之后再打开。第三段的价值全在「锁」这个字上, 跑完不满意又回去改,这一段也就跟着作废了。
几个把切分做废的典型错误
随机打乱再切。 教材里的标准做法在这里是错的。行情数据前后高度相关,一旦打散, 训练段里就混进了验证段之后发生的行情,模型等于提前看了答案,样本外成绩会好得不真实。 时间序列切分只有一条底线:训练段的每一个点,时间上都必须早于验证段的第一个点。
用全段数据做预处理。 拿整段历史算出的均值和标准差去做标准化、或者用全期分位数去分档, 那个均值里已经包含了验证段的信息。归一化、缺失值填充、异常值裁剪,凡是需要统计量的步骤, 统计量都只能从训练段里算,再原样套到验证段上。
股票池用今天的名单。 把已退市、已被剔除的标的从池子里抹掉,等于用现在才知道的信息去做过去的选择。 切分再规范也救不回来——这类问题出在数据准备阶段,比切在哪儿更靠前。
反复重切。 七三分不理想就试八二分,还不行就换个切点,直到某个切法结果好看为止。 这时被挑选的已经不是策略,而是切分方式本身;换来的漂亮结果, 和在同一段数据上反复调参没有本质区别。切法应当在看结果之前就定下来。
一次切分和滚动验证的关系
这里做的是一刀切:整段历史只切一次,验证段固定在最后。它的短板是结论依赖那一刀切在哪儿—— 如果验证段恰好只覆盖了一段单边行情,你测到的其实只是策略在一种市场状态下的表现。 滚动验证换了个思路:训练窗和验证窗一起往前挪,排出很多轮,让历史上不同阶段轮流当验证段。 代价是复杂度和计算量都上去了,而且轮次一多,「在多轮里挑一轮好看的」这种新的自欺方式又会冒出来。 先用一次切分把最基本的问题问清楚,再考虑要不要上滚动,通常是更省力的顺序。
口径与边界
本工具的期数是抽象单位,一期可以是一根日线、一个交易日,也可以是一周或一个月,取决于你自己的数据频率。 日期口径按自然日计算,不扣除周末与休市日——如果你要的是交易日口径,请先自行换算成期数再填。 各段长度按四舍五入取整,间隔期从总长度里先扣除;参数极端时工具会把每段至少保留一期并给出提示, 而不是切出一个长度为零的段。总期数、起止日期填不出有效数字时,工具直接告诉你参数不成立, 不会用一份看似合理的默认切分把问题掩盖过去。
验证段短于 30 期会触发样本不足提示。这个数不是什么统计定理,只是一条方便自查的粗线: 样本少到这个量级,一两笔交易的运气就能决定整段成绩。真正需要多少,取决于你的策略 在这段时间里能产生多少笔独立交易——8 笔和 800 笔是完全不同的证据强度。
风险提示:样本内外分割只是降低自欺概率的工程手段,不能证明任何策略有效。 回测≠实盘,样本外检验同样基于历史数据,历史区间上的结论不构成对未来的承诺, 实盘还会遇到滑点、冲击成本、流动性与规则变化等回测里不存在的问题。 本工具仅为回测方法教学演示,不发出任何买卖信号,不构成投资建议。
常见问题
6 条为什么调参和验证必须用不同的数据?
样本外为什么只能用一次?用它反复调参会怎样?
间隔期该留多久?不留会怎么样?
验证段该占多大比例?七三分还是八二分?
什么时候需要切三段?两段不够用吗?
时间序列为什么不能随机打乱再切?
本工具仅为测算演示,不构成投资建议。计算结果受输入假设影响,实际情况请以官方规定与金融机构公布为准。