投资理财

过拟合自查与参数高原

把同一策略在不同参数下的结果排成一张表,看它是一片高原还是一根尖峰——参数动一点就崩,多半是过拟合。

  • 免费免注册
  • 结果可分享链接
  • 浏览器本地计算

逗号、制表符、空格、竖线分隔都认,「8.4」和「8.4%」都能识别,表头行会自动跳过。 绩效填年化收益、总收益率、夏普比率都行,只要整列口径一致——工具全程只做比值运算。

0.602
参数高原指数
邻域均值 ÷ 最优值,越接近 1 越像高原
61.11%
邻域最大衰减
参数动一格,最惨掉这么多
20 ~ 20
稳健区间(≥最优值 80%)
宽 0,含 1 个点,占扫描区间 0%
20
最优参数
绩效 21.6,共试了 7 组
判定:尖峰最优点是根孤峰,参数动一格就塌。这通常是曲线拟合的典型形态——你找到的很可能是这段历史特有的巧合,而不是可重复的规律。
全部 7 组参数的平均绩效只有最优值的 44.0%。 你事先并不知道哪一组会是最优,随手挑一组的期望更接近这个平均数,而不是那个最高分—— 把最优值当成对未来的预期,是回测最常见的自我欺骗。

参数 → 绩效形状图

实心深色是最优点,浅色是稳健区间内的参数,灰色是区间外。虚线是稳健阈值线。 看形状比看数字快:一整排差不多高是高原,一根戳天是尖峰。

5101520253035
参数值绩效相对最优位置
56.228.7%区间外
107.132.9%区间外
158.438.9%区间外(邻域)
2021.6100.0%最优点
25941.7%区间外(邻域)
307.836.1%区间外
356.429.6%区间外

风险提示:这个工具只能证伪,不能证明策略有效

  • 形状是尖峰,基本可以判定这组参数没有信息量;形状是高原,也只是「没被这一关筛掉」,离「策略有效」还差样本外验证与实盘摩擦成本这两关。
  • 回测不等于实盘。同一份参数在真实交易里还要吃滑点、手续费、冲击成本与流动性限制,这些都没有体现在你贴进来的绩效里。
  • 你试过的参数组合越多,撞出一个漂亮最优值的概率就越高。请把「一共试了多少组」当成折价系数看待,而不是当成努力的证明。

教育演示:参数高原指数 = 最优点邻域窗口(含最优点)绩效均值 ÷ 最优点绩效;稳健区间取绩效不低于最优值指定比例的连续参数段。 本工具仅为策略诊断教学,不评价任何具体策略或标的,不发出任何买卖信号,不构成投资建议。

链接带当前参数,发给别人打开就是同一份结果。

怎么用

5 步
  1. 先把参数扫描结果导出成两列:第一列是你调的那个参数(均线周期、持仓天数、止损百分比都行),第二列是该参数下的回测绩效。年化收益、总收益率、夏普比率都可以,只要整列口径一致——工具全程只做比值运算,不关心量纲。
  2. 粘进文本框:逗号、制表符、空格、竖线分隔都认,「8.4」和「8.4%」都能识别,表头那一行读不出两个数字会被自动跳过。参数值会自动按升序重排,因为「邻域」这个概念只有在相邻时才成立。
  3. 看参数高原指数,别只看最高分:这个数是「最优点邻域绩效均值 ÷ 最优点绩效」。越接近 1 说明最优点周围也差不多好,是一片高原;越小说明它是根孤峰,邻居全趴着。工具会直接给出高原 / 缓坡 / 尖峰的判定。
  4. 调邻域半径和稳健阈值,看结论稳不稳:半径从 1 调到 2、3,如果判定从高原一路滑向尖峰,说明所谓的高原其实很窄。阈值默认按最优值的 80% 划线,你也可以调成 90% 收紧标准——结论经不起这两个旋钮的轻微扰动,本身就是个信号。
  5. 记下你一共试了多少组:结果区会显示参数组数和「全部参数平均绩效 ÷ 最优值」。试的组合越多,撞出一个漂亮最高分的概率越高,那个最高分就越该打折。把这个数字抄进你的策略笔记,比记住最优值有用得多。
深入讲解

最优参数是被挑出来的,这就是问题所在

回测报告里最常见的一句话是「最优参数下年化 21.6%」。这句话的信息量比多数人以为的低得多, 因为「最优」这两个字意味着它是从一堆候选里选出来的冠军。选拔本身会把两样东西一起选进来: 真正的规律,和恰好合拍的噪音。你没法在数字上把它俩分开,但可以换个角度问—— 如果起作用的是规律,那么参数稍微偏一点,成绩应该只是略微下滑; 如果起作用的是噪音,参数偏一点就会原形毕露。

这就是「参数高原」这个说法的来历。把参数当横轴、绩效当纵轴画出来, 稳定的策略呈现的是一片起伏不大的台地,最高点只是台地上一个不起眼的小凸起; 拟合噪音的策略呈现的是一根孤零零的尖峰,左右两边直接坠到地面。 本工具把这个形状压缩成一个数:最优点邻域窗口(含最优点自己)的绩效均值, 除以最优点的绩效。全平时等于 1,邻居越差这个数越小。

三个输出分别在回答什么

参数高原指数回答的是「形状扁不扁」。 不低于 0.9 判高原,0.75 到 0.9 判缓坡,低于 0.75 判尖峰。 这三档不是行业标准,只是两个便于口算的整数比例,你可以按自己的容忍度重新解读。 需要留意的是它对邻域半径很敏感:半径调大会把更远的点拉进均值,指数必然下降。 判定从高原滑向尖峰有多快,本身就是「高原有多宽」的另一种度量。

邻域衰减幅度回答的是「动一格最惨掉多少」。 工具分别取左右邻域里最差的那个点,算它相对最优点掉了百分之几,再取两侧较大者。 这个数比高原指数更贴近实盘体感——实盘里你不会正好用在最优点上, 参数总会因为数据源差异、复权方式、开盘价还是收盘价成交而偏移一点点。

稳健参数区间回答的是「能放心用的范围有多宽」。 算法是从最优点往两边扩,只要绩效不低于最优值的指定比例就继续,一破线立刻停。 必须是连续的一段:中间掉下去、更远处又好起来,那是两片区域,不能算一个区间。 区间宽度和它占整个扫描范围的比例,比单个最优值更值得抄进策略笔记。

几个常见误区

把最优点当成参数取值。 即便判出高原,直接取最高点也不是好习惯。最优点在下一段数据上几乎必然漂移, 而高原的中部对漂移的容忍度最高。取稳健区间中部损失的那点回测收益, 换来的是实盘里不会因为峰顶挪了一格就掉下悬崖。

用密集步长造出假高原。 如果相邻两组参数其实覆盖着几乎同一批交易,绩效当然接近,画出来一片平坦, 但那是数据重叠造成的错觉。识别办法很直接:把步长调粗一倍再扫一遍,真高原不会消失。

在多维参数上用一维结论。 本工具只处理单参数扫描。两个参数联动时,参数面上的「山脊」在任何一条切片上看都可能像尖峰, 需要固定其中一个再逐条看,或者干脆把二维结果按行分批贴进来对比。

拿分类型选项当参数扫。 「用哪个技术指标」「选哪个板块」这类选择没有天然的大小顺序, 它们的相邻关系是你人为排出来的,换个排法形状就变了,邻域也就失去了意义。 这类比较该做的是分组对比,而不是找高原。判断标准很简单: 把这一列的取值打乱重排,如果结论跟着变,说明它压根不该走这套算法。

忘了自己一共试了多少组。 三个参数各试十档就是上千种组合,很多人心里以为「只调了三个参数」。 搜索空间越大,撞出漂亮最高分的概率越高,那个最高分就越该打折。 结果区显示的「全部参数平均绩效 ÷ 最优值」就是这个折价的粗略参照。

口径、边界与风险提示

解析规则:每行取前两个数字,第一个当参数值,第二个当绩效; 读不出两个数字的行(比如表头)会被跳过;参数值重复时保留先出现的那条; 百分号只被剥掉,不做除以一百的换算——两列口径由你自己保证一致。 有效数据点少于三个、或者最优绩效不是正数时,工具会直接说算不了, 而不是给一个会翻号失真的比值。数据点上限四百个,再多也读不出更多信息。

更要紧的是这件事:回测不等于实盘。 你贴进来的绩效来自历史数据的重放,里面没有滑点、冲击成本、流动性限制、 也没有停牌与涨跌停带来的无法成交。同一组参数在真实交易里通常比回测差一截, 交易越频繁差得越多。所以本工具的结论只能往「淘汰」的方向用: 形状是尖峰,可以放心淘汰;形状是高原,只说明它没被这一关筛掉, 还得过样本外验证、成本敏感度、容量这几关。

风险提示:本工具只做描述性统计,不评价任何具体策略、标的或参数取值, 不发出任何买卖信号,也不对未来表现作任何暗示。历史回测数据不代表未来, 任何参数优化都无法消除亏损的可能。本工具仅为策略诊断教学演示,不构成投资建议。

常见问题

6 条
为什么参数高原比最优参数的绩效更重要?
因为最优值是被「挑」出来的,而挑选这个动作本身就会把运气挑进来。你扫了 30 组参数,其中总有一组恰好踩中了这段历史里的几次巧合,它的回测成绩自然最漂亮——但那部分成绩来自不会重演的噪音,实盘里不会跟着你走。邻域就不一样了:如果参数往左挪一格、往右挪一格,绩效都还在同一水平上,说明起作用的是一条对参数不敏感的规律,而不是某个具体数字的魔力。反过来,最优点比邻居高出一大截,恰恰说明那点超额来自参数的精确取值,而精确取值在未来复现的概率很低。所以老手看回测报告时,第一眼往往不看最高分是多少,而是看最高分周围那一圈长什么样。这个工具把「那一圈长什么样」压缩成一个数:邻域绩效均值除以最优点绩效,越接近 1 越像高原。
高原、缓坡、尖峰是按什么划的?多少算尖峰?
工具用参数高原指数划线:不低于 0.9 判为高原,0.75 到 0.9 之间判为缓坡,低于 0.75 判为尖峰。这三个分界不是什么行业标准,就是两个便于口算复核的整数比例——邻域平均还有最优点九成水平,参数偏一点基本无感,算高原;掉到七成半以下,参数动一格就少赚四分之一,那已经是断崖了。你完全可以按自己的容忍度重新解读这三档,重点从来不是「0.75 还是 0.7」这条线画在哪,而是让你养成同时看两个数的习惯:最高分是多少,以及它周围掉得有多快。另外提醒一句,指数受邻域半径影响很大:半径 1 时只看紧邻的两个点,半径 3 时会把更远的差点拉进均值,指数必然下降。判定从高原滑向尖峰的速度,本身就是高原有多宽的另一种度量。
试的参数组合越多,为什么反而越危险?
这是多重检验问题在回测里的翻版。假设某组参数纯靠运气跑赢基准的概率是 5%,你只试一组,撞上的概率就是 5%;你试 20 组,至少撞上一组的概率会跳到六成以上;试 100 组,几乎必然能挑出一个「显著跑赢」的参数。问题在于,你事后只汇报那个最好的,不汇报被淘汰的 99 组,报告读起来就像是精心设计的成果,实际上是一场大规模抽奖的中奖记录。更隐蔽的是,参数不止一个:三个参数各试 10 档就是 1000 种组合,很多人心里以为自己「只调了三个参数」,实际搜索空间已经上千。这个工具在结果区显示「全部参数平均绩效 ÷ 最优值」,就是想让你直观感受到这件事——你事先并不知道哪一组会赢,随手挑一组的期望更接近那个平均数,而不是那个最高分。把最优值当成对未来的预期,是回测里最常见的自我欺骗。
看到一片漂亮的高原,是不是就能证明策略有效了?
不能。这个工具的作用是证伪,不是证明。形状是尖峰,基本可以判定这组参数没有信息量,可以直接淘汰,省下大量后续工作;形状是高原,只说明它「没被这一关筛掉」,离「策略有效」还隔着好几关:样本外表现如何、加上真实滑点和手续费后还剩多少、换个市场阶段还成不成立、容量能不能承接你的资金量。高原本身也可能是假的——如果你的参数扫描步长过密,相邻两组参数其实覆盖着几乎同一批交易,绩效当然接近,画出来一片平坦,但那是数据重叠造成的错觉,不是稳定性。判断办法很简单:把步长调粗一倍再扫一遍,真高原不会消失。这个工具只做描述性统计,不评价任何具体策略或标的,也不会给出任何买卖信号。
这个和样本外验证是什么关系?能互相替代吗?
不能替代,两者查的是不同的病,顺序上一般是先高原后样本外。参数高原查的是「结果对参数敏不敏感」,用的还是同一段历史数据,成本极低,适合放在最前面做粗筛,把明显靠撞的参数一次性淘汰掉。样本外验证查的是「结果对时间段敏不敏感」,需要一段你在调参时完全没碰过的数据,成本高但更接近实盘。两关的失败模式也不一样:有的策略参数高原很宽,样本外照样失效,因为整个策略逻辑依赖的是那段历史特有的市场结构;也有的策略参数是尖峰,但样本外碰巧还行——那多半是运气,别拿它当反例。实际做法是先用本工具筛掉尖峰,再把活下来的参数拿去做样本内外分割或者滚动验证。站内的样本内外分割计算器和 Walk-forward 滚动验证切分器就是干这个的,可以接着往下走。
什么时候这套算法不适用?有哪些常见误用?
有四种情况这个工具会给出误导性的结论。第一,参数不连续或没有顺序,比如「用哪个指标」「哪个板块」这类分类型选择,它们的相邻关系是你人为排出来的,邻域也就没有意义。第二,绩效指标可正可负且最优值本身接近零或为负,比值会翻号失真,工具会直接拒绝计算并提示你换指标。第三,两个参数联动的情况——本工具只处理一维扫描,二维参数面上的「山脊」在任何一条切片上看都可能像尖峰,需要固定其中一个参数再逐条看。第四,你贴进来的绩效如果已经是扣费后的净值口径,那没问题;如果是不含成本的毛口径,参数越密集交易越频繁的那一侧会被系统性高估,形状会向那边歪。最后一个常见误用是拿它当选参依据:即便判出高原,也别直接取最优点,通常取稳健区间中部更稳妥——最优点在下一段数据里几乎必然漂移。

本工具仅为测算演示,不构成投资建议。计算结果受输入假设影响,实际情况请以官方规定与金融机构公布为准。

回到计算器