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脚本跑了整整两个小时,吐出来一组最优参数:

MA=17, MACD=(11,28,8), 配上RSI<35时买入, RSI>78时卖出。

回测结果让你心跳加速:胜率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线排列在一起,你几乎一定能在里面找到某只股票在某段时间里,对你那套MA=17, 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线上雕花。你需要的是建立一套对长期趋势有正期望值敞口的、极其简单且容错性强的系统,然后让它自己在时间中发酵。

在下一节,我们将进入让你频繁操作的另一个心理机制——控制幻觉。你会看到,你之所以停不下手中的交易,不是因为机会太多,而是因为你不肯接受一个事实:你无法像调试代码一样调试市场。而这个心态本身,正在吃掉你所有的利润。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值