1.2 过度拟合(Overfitting):你在K线上做的“死循环”

发布时间:2026/6/25 14:01:36

1.2 过度拟合(Overfitting):你在K线上做的“死循环” 2019年一家美国量化基金遭遇了一场教科书级别的打脸。他们的策略回测表现极其优异年化收益35%夏普比率2.8最大回撤不到10%。团队里不乏常春藤的数学博士和硅谷的AI工程师模型经过了极其严格的交叉验证。金主们排着队把钱送进来。实盘第一年策略亏了22%。最大回撤不是10%是34%。投资者质问原因基金经理的回答堪称经典“模型没有错错的是市场这段时间太不正常了。”这句话你听起来耳熟吗你每一次扛着亏损单的时候心里是不是也在说“不是我的策略有问题是这段时间大盘不好”、“这只股票的庄家太坏了”、“都是美联储加息的错”让我用你一秒就能理解的语言翻译这个现象你的模型在训练集上得了100分但你的训练集根本不包含“未来”这个类别的样本。你其实是在用机器学习最忌讳的方式做投资每一个学过机器学习的工程师都知道一个最基础的禁忌不能用测试集的数据来调参。如果你用测试集的信息污染了训练过程那么你最后得到的那个看起来很美的准确率其实什么都不代表。它只是记住了考试答案但没有学到任何真正的规律。一旦来一道没见过的题直接零分。这就是过拟合。而你一个正在炒股的技术人员正在用比这更粗暴的方式做投资。你打开Tushare拉了某只股票过去三年的日线数据。你写了一个双重循环把MA的参数从5试到60把MACD的三根参数从6,13,5到24,52,18排列组合了一遍。你的Python脚本跑了整整两个小时吐出来一组最优参数MA17, MACD(11,28,8), 配上RSI35时买入, RSI78时卖出。回测结果让你心跳加速胜率71%三年累计收益420%最大回撤只有8%。你觉得自己找到了《股票作手回忆录》里杰西·利弗莫尔说的那根“最小阻力线”。你甚至给策略起了个名字叫“Alpha-Extractor v1.0”。然后把积蓄投了进去。后面的剧情我已经在1.1节预告过了——它亏了。但你至今没有真正理解为什么亏。你觉得可能是参数还不够优化。于是你又拉了一遍数据这次加入了更多指标——布林带、KDJ、OBV、筹码集中度甚至把你从某篇量化论文里看到的Hurst指数也加了进来。你的策略从三个条件变成了十七个条件回测胜率从71%提升到了89%你满意地再次入场。然后它又亏了。你陷入了无尽的自我怀疑是我Python写得不够好是数据源不够准还是我遗漏了什么隐藏因子不。你犯的错误在机器学习里有一个精确的名字你把训练集上的噪声当成信号来拟合了。为什么那根最优均线是一条死路假设你现在闭上眼睛随机生成一串完全随机的价格序列——每一日的涨跌由一个均值为0的随机数决定没有任何趋势没有任何规律纯粹的白噪声。然后你开始在这串白噪声上做“技术分析”。你会发现它有时会走出一个很完美的头肩底有时会连续8连阳有时MACD金叉之后确实“涨”了一段。你会画出支撑线和阻力线而且有时候价格真会“打到支撑线就反弹”。如果你不信你可以现在就写几行Python验证。用numpy.random.randn生成一组纯随机数做模拟K线然后把你所有的技术指标往上套。你一定会找到某些参数在某些时间段里表现得“极其精准”。这就是金融学界在过去半个多世纪里反复证明的一个冷酷结论技术分析在统计意义上不比占星术更能预测未来。这句话非常刺耳。你可能会反驳不可能我用某些技术形态确实赚过钱你没有说谎。但你在做一个经典的认知错误——选择性记忆。你记住了均线金叉之后大涨的那些案例却忘了或者根本没统计同样金叉信号出现后大跌的案例。你记住了头肩底之后的反转行情却忘了头肩底失败、变成下跌中继的那些图形。更重要的是你可能忽略了一个致命的统计事实在一个足够大的随机数据集里一定存在某些子区间它们在事后看起来极其“有规律”。如果你把过去十年A股所有股票的所有日K线排列在一起你几乎一定能在里面找到某只股票在某段时间里对你那套MA17, MACD(11,28,8)的策略表现出了极高的匹配度。但这只能说明两件事一你找得够努力二你在事后挑选样本。这不是策略有效。这是你在垃圾堆里翻出了一块长得像金子的石头。维数灾难你每加一个条件就在加速策略的死亡工程师的直觉是参数越多模型越精细结果越准确。但在投资领域这条直觉是一条死亡斜坡。让我给你一个简化版的数学直觉。一只股票过去三年大约有750个交易日。如果你设计一个策略只有1个条件——比如“MA金叉买入”——你大概需要用掉这750天里的1到2个自由度去估计这个条件的效果。你还有748个自由度可以用来做样本外检验你的策略在统计上还有些许可信度。但如果你像刚才那样塞进17个条件——MA参数、MACD三参数、RSI两参数、成交量比率参数、布林带偏移参数、大盘相对强度参数……你的参数数量可能膨胀到20个以上。20个参数对应750个样本点。这已经不是建模了这是对着点直接画一条线穿过去。你的策略没有学到任何“规律”它只是用20个自由度把750个点里的噪声纹丝不差地描摹了下来。当自由度接近样本量的时候你的模型在数学上就是一个插值器而非预测器。它对样本内数据的拟合度会高到令人发指——这就是为什么你的回测能做到89%胜率。但它的泛化误差——用机器学习术语说样本外误差——也会大到令人发指。你每往策略里多塞一个条件你就离破产近了一步。这不是修辞这是数学。学术界管这个叫维数灾难。在金融里它意味着越复杂的择时模型未来失效的速度越快。你有没有想过为什么那些真正赚大钱的量化基金——比如西蒙斯的大奖章——从来不提自己用什么策略除了商业机密更本质的原因是任何公开的策略一旦被足够多的人执行就会像1.1节说的那样自我毁灭。而简单、低频、基于长期经济规律的策略反而因为没人愿意慢慢变富活得更久。对策从精确到模糊从“买点”到“总线”读到这里你可能会问如果我不用技术分析那我靠什么做决策难道扔飞镖不。从第四章开始我会教你一套完整的、用你工程师的强项重新构建的投资决策框架——如何做技术尽调、如何写调试日志、如何利用你的专业技能识别真正的技术护城河。但在本章在结束这节内容之前我想先给你一个方向性的认知转变让你至少先停下手上的“回测-优化-破产”死循环。这个转变只有一句话放弃预测精确价位转向寻找模糊而正确的趋势总线。什么是总线在一个复杂的计算机系统里你不关心总线上的每一个比特在每一个时钟周期是高电平还是低电平。你只要知道这条总线的带宽是多少方向是什么协议稳不稳定然后你设计你的系统去适配这条总线的特性。投资也应该这样。你不要再关心“这只股票明天是涨0.5%还是跌0.3%”。这个问题和你职业生涯里的99.999%的日K线一样是噪声。你要关心的是“中国未来十年的经济趋势是什么半导体国产替代的确定性有多高这家公司的技术护城河在五年后还在不在”这些是低频的、模糊的、很难精确量化的——但却是真正决定长期投资收益的总线级信号。你不需要在K线上雕花。你需要的是建立一套对长期趋势有正期望值敞口的、极其简单且容错性强的系统然后让它自己在时间中发酵。在下一节我们将进入让你频繁操作的另一个心理机制——控制幻觉。你会看到你之所以停不下手中的交易不是因为机会太多而是因为你不肯接受一个事实你无法像调试代码一样调试市场。而这个心态本身正在吃掉你所有的利润。

相关新闻