跳转至

第 17 节 · 17 个策略全失败

导读

这一节要交的账,很难看。

一批 17 个候选策略。跑完回测,一个都没过线。及格线是样本外夏普比率不低于 1.0;这批里成绩最好的一个,只有 0.69。

在这批之前,还有一批 14 个候选。那批里有一个"看着过了"——回测数字漂亮到像是终于挖到了金子。后来,它被一道独立质疑打了回去,没能进池。

这一节讲的就是这两件事:一支队伍全军覆没长什么样;以及那个被否掉的策略,为什么反而是这套系统最值钱的一次产出。

先交代一个词。夏普比率,衡量的是一个策略"每承担一份风险,能换回多少收益",越高越稳。接近 1.0 通常算及格;接近 0,说明你冒了险,却没换到东西。后面所有数字,都围着它转。

真正让我在意的,从来不是这批策略有多差。是一群 AI 干了一整轮,没有一个人替它们说一句"这个不算数"。 那才是会要命的事。


一、17 个候选,一个都没过线

这 17 个不是随便凑的。它们是同一个批次、按同一套筛选流程一起跑出来的——都拿到了进回测的资格,然后在同一条及格线面前,一起倒下。

过了这一关的,进回测。回测的及格线我定得很硬:样本外夏普比率到 1.0。

17 个,一个都没到。最强的一个,0.69。这不是"差一点",是差着一整截。

我刻意不把这 17 个策略一个个列出来。不是因为记不清,是因为列出来会骗人。 每一个单看,背后都有一套像样的理由;把理由排成一列,读者会本能地以为"这里面总有一个是对的,只是没测准"。恰恰相反:它们全都错得干脆利落——这种"集体干脆",才是这批数据真正值钱的地方。

图 B-17-1(待出):17 个候选的样本外夏普比率分布——及格线 1.0 横在头顶,17 个点全部落在下面,最高那个是 0.69

全军覆没当然难受。但比难受更值得记下来的,是它旁边的那个念头:碰到"零通过",人最容易做的第一件事,是想把线挪低一点。"要不 0.8 也算?"你看——及格线是给策略定的,不是给我改的。我一动它,它就不再是及格线,只是一张废纸。

所以这 17 个记下的账,不是"运气差",是一条纪律:过线就是过线,没过就是没过,不许当场挪线。


二、唯一一个"看着过了"的

在这批 17 个之前,是更早的一批,14 个候选。

14 个里,只有一个通过了回测门槛。一个"质量动量"策略:按 ROE(净资产收益率,衡量一家公司拿股东的钱赚了多少)和营收增速给股票排序,选排名最前的 5 只,等权持有。

它的成绩单是:样本内夏普 1.55,样本外夏普 1.43,最大回撤 -11.6%。最大回撤,指的是从最高点一路跌到最低点的最大跌幅——-11.6% 在当时看,是个相当体面的数字。

样本外能有 1.43,在当时的我眼里,这就叫"成了"。样本内做出来不稀奇,样本外还能站住,才叫本事。回测那道关,判它过。

如果故事到这儿就停,这就成了一个"终于挖到好策略"的励志故事。

它没停。

生成策略的是一拨 agent,回测判分的是另一拨。回测判它过关之后,还有一道独立的风控关卡——它要做的不是把数字再核一遍,而是换一个目标,专门来找它死。

结论来得很快,形式却极其干脆——一份正式的阻断级质疑。不是"建议考虑"、不是"或许可以优化",是阻断:不许进池、不许交易、不许碰一分钱。

这在当时的我看来几乎是荒谬的。数字全过了,凭什么不让它活?


三、风控的四层打回

那份质疑打得很深,四层,每一层单独拎出来,都够判它死刑。

第一层:因子自相矛盾。

这个策略靠"ROE + 营收增速"选股。可是同一套因子面板——拿同一批股票、独立跑过一遍的评估——早就把这两个因子判成了"淘汰"。它们的 IC(信息系数,用来衡量"因子排名"和"未来收益"到底有没有关系)接近于零——0.011 和 0.015,远在 0.02 的入库线之下——等于没有预测力。

一个没有预测力的因子,怎么可能选出一批会涨的股票?

没有预测力的因子,不可能通过组合产生预测力。 这是四层里最硬的一句逻辑。就像一份成绩单上每门课都不及格,你把这些分数加在一起,它不会突然变成一个优等生。

那它的 1.43,究竟是从哪来的?

第二层:一只票的问题。

这个组合几乎百分之百会选中某一只消费龙头——因为它的 ROE 最高,按排名规则永远排在前面。

而这只票,在样本外那段时间,跌了大约 10%。一个系统性地选中"一只会跌的票"的策略,不能叫因子策略。它不是在选"谁收益高",它是在选"谁的 ROE 高"。这两件事,被我习惯性地当成了一回事,可它们根本不是一回事。 因子成功地挑出了"谁 ROE 高",却对"谁收益高"一无所知。

第三层:一只资源股的集中度。

这个策略一半以上的收益,来自一只资源股——它正好赶上大宗商品的超级周期,利润被商品价格顶到了天上。

一旦这只票的贡献被抽走,那点超额收益就所剩无几。

说白了,它那点"超额收益"根本不是策略挣来的,是商品周期这个时代借给它的。周期一转身,就要还。

第四层:数据窥探。

这一层最伤人。这一批 14 个候选里,只有它一个通过了。

统计上,测 14 个假设、取 5% 的显著性水平,本来就"期望"撞上假阳性——骰子扔得够多,总有一把看着像天意。

14 个里出一个"成功",和"其实根本没有任何真实效果",是完全一致的。 它更可能是这一批里运气最好的那一个,而不是真的挖到了金子。

四层,任何一层都够否决;四层叠在一起,这份质疑成了这套系统里最清楚的一次打回。

图 B-17-2(待出):四层打回——因子自相矛盾、个股反复入选、资源股集中、数据窥探,四道各自独立就能否决的理由


四、三关验证:数值过了,逻辑没过

风控没有扔下一句"不行"就走。

它给了三条路:这个策略想被重新讨论,先过三关。

第一关,蒙特卡洛。 固定住那两只每次都会入选的票,再从剩下的票里随机挑三只,重跑 1000 次,看它原来的夏普,是不是排在所有这些随机结果的 99.7 分位以上。结果:过了。它的分数,在"完全没有真实效果"这个假设下,确实罕见。

第二关,把最重要的两只票拿掉,再跑一遍。 结果:数值上过了——样本外夏普不但没掉,反而升到了 1.47。

这一关最刺眼。

你把一个策略里最重要的两只票拿掉,它的成绩反而更好。 这只能说明一件事:它的收益根本不来自那套选股逻辑,就来自那两只票——一只在硬撑,一只在拖后腿。拿掉硬撑的那只、也顺手甩掉拖后腿的那只,数字自然好看了一截。

一个"去掉主心骨反而变强"的策略,不是稳健。是根本没长在因子上。

第三关,滚动样本外。 结果:样本外还是 1.43,但样本内只有 0.22——样本外比样本内,好了 6.4 倍。

一个样本外比样本内好 6 倍多的策略,不是稳健,是不稳定。真正结实的策略,样本内外应该是一条大致平的线;而它是一条翘起来的线,翘起来的那一头,很可能只是运气。

结论:数值过了,逻辑没过。

三关的数值门槛是过了。可是风控那四层致命问题,一层都没被推翻。最终判定:不准入池。

这两件事必须分开看:数值,和逻辑。 回测管的是"数字对不对",风控管的是"逻辑成不成立"。一个数字过关、逻辑破产的策略,是最危险的那一类——它长得太像一个成功,以至于只有第二道关卡拦得住它。

图 B-17-3(待出):三关验证留下的悖论——拿掉最重要的两只票,成绩反而更好;样本外成绩是样本内的 6.4 倍


五、为什么必须让 AI 互相质疑

回到这一节开头那个被我一笔带过的小事:生成策略的是一拨 agent,判它过关的是另一拨,最后把它打回的,是风控。

为什么不让同一拨从头干到尾?

因为生成它的人,几乎不可能把这个孩子判死。

这不是懒惰,也不是不诚实。这是确认偏差——人做一件事的时候,脑子优化的是"自洽",不是"正确"。一个自己相信的假设,会不自觉地被放宽举证标准;一个反驳它的信号,会被不自觉地解释成"这是个例外"。

AI 也一样。而且更麻烦:AI 是被 prompt 推着走的。你对它说"帮我看看这个策略行不行",它天然倾向于替你找出"行"的理由。

所以在这套系统里,质疑不是礼貌的建议,是一套有规则的对抗。五条:

第一,生成的和审的,必须是两个 agent。 提出方案的人和反对方案的人,不能是同一个。这不是官僚,是结构完整性。核弹发射要两个人同时拧两把钥匙,同一个道理。

第二,审的人只负责击穿,不负责修。 它不改参数、不重写策略。让它一边挑错一边改,它会本能地朝着"改得好看"去,而不是"改得对"。审的人唯一的任务,是把这个东西弄死。

第三,每一份质疑都要留档。 谁质疑的、质疑什么、严重到什么程度,全记下来。不许有"看不见的否决"——一个没写下来的反对,等于没发生,它只会变成日后"我早就说过"的幽灵。

第四,被质疑的一方必须回应。 要么改,要么给一个站得住的反驳理由。不许一句"我觉得没问题"就翻篇。 不落地的"我觉得",不是回应,是沉默。

第五,质疑必须分级,而且必须有阻断一级。 一份从来没有"阻断"记录的质疑日志,不是一套严格的流程,是一枚橡皮图章。

反过来,最容易失效的,也是这六种:

  • 根本不质疑——产出直接就被采用。
  • 走过场——"我看没问题",然后放行。
  • 被质疑了不改——"我觉得原来挺好"。
  • 全是"建议",从不"阻断"——说明你根本没往下挖。
  • 质疑了,没人回——质疑变成装饰品。
  • 只凭感觉,不凭数据——"我觉得不对"是感觉,不是质疑。

这六种之外,还有一个最要命的:把生成的人和审的人合并成一个。那样你就有了一个自己审自己交易的交易员,一个自己给自己校稿的作者。这不是省了一个 agent,是拆掉了整套系统的免疫系统。


六、失败怎么变成资产

回到那 17 个全军覆没的候选,还有那个被打回的策略。

在账本上,它们都记在"失败"那一栏。但我越来越不这么看。

这不是失败,是排除。

打个比方:在雷区里排雷。今天你挖出 17 颗雷,一颗金子都没捡到——但你不是白干,你是把这 17 个地方,从"可能有宝贝"改成了"确定是雷"。你的地图因此变清楚了。 下一步,你不必再走这 17 条路。

一个策略被打回,等于有人替你说了一句:"这条路上没有钱。"

一次试验的价值,从来不只是"找到了什么",更是"排除了什么"。 在还没找到之前,排除本身就是进度。它真正的用处,是缩小搜索空间:每失败一次,就是在图上划掉一条路。划掉的路足够多,剩下那片没被划掉的地方,就是你的方向。

失败不是"没找到答案",是"排除了错误答案"——后者,更接近科学本来的样子。

这也是我专门给这一类失败留一整章账的原因。大多数团队把失败当垃圾扔掉;我把它记进账本。因为一人公司最缺的从来不是聪明,是不在同一个坑里摔两次。

至于这一节真正留下的产出——不是那 17 个候选里的任何一个,也不是那个被打回的策略,而是那套"让 AI 互相质疑"的规则。策略会过期,规则不会。


尾声

最后说一层。

这一节从头到尾,压的其实是两层。根子在 L7 意图层——什么算"成功",是人定的;落地机制在 L5 协作层——生成与审,必须分开。

表面上,这是一节技术活:因子、回测、夏普比率。但它真正考的,是方向判断:你允许什么样的东西,被叫做"成功"。

及格线定在 1.0,是判断;看到 0.69 就想把线挪到 0.8,是软弱;把一个"数字过关、逻辑破产"的策略拦住,是制度。

机器负责把每一条路都跑一遍;人负责说,哪条路算数。

一群 AI 可以在一晚上测完 17 个策略,比我快一百倍。但让这 17 个失败真正有价值、让那个假成功真正死掉的,不是它们跑得有多快,而是我在一开始就定下的一件事:审的和生成的,不能是同一个人。

口径说明:本节的策略、回测、交易与仓位均为模拟盘/回测结果,不是实盘。回测表现不代表未来。这里记录的是研究过程,不构成任何投资建议。