← 返回教程库

用 AI 跑出一条漂亮曲线,不等于 AI 有效

最后更新 2026-08-19
📚 量化与 AI 投研 📖 AI 投资祛魅 ⏱ 约 17 分钟 R2 · 注意风险
你将学到
  • 说得出「AI 让试错成本趋近于零」为什么会系统性地抬高「好看但无效」的概率,而不是笼统地说一句「回测不可信」
  • 指得出 AI 参与之后,「你一共试了多少次」这个分母藏进了哪三个你看不见的地方
  • 用四个固定动作把分母重新记回账上:开工前写死判定标准、给对话编号记账、跑变体离散度自测、把 AI 从发明家换成质检员

你花了一个晚上跟 AI 来回聊。你说了句「帮我想个能吃住震荡行情的规则」,它给了三种思路;你挑了一种让它写成代码,跑出来一般;你说「加个成交量的过滤条件试试」,它改了;你说「止损再紧一点」,它又改了;中间它自己主动建议换了两次指标组合。四十来轮之后,屏幕上是一条挺像样的曲线。

你截图发群里,配文「AI 是真好用」。

群里有个人只回了一句话:你今晚一共试了多少个版本?

你愣了一下。你答不上来。不是记不清具体数字,是你从头到尾就没在数——因为每一轮都只是「再改一点点」,感觉像是在打磨同一个东西,不像是在换新的东西。

这一节要讲的就是这个答不上来的数字。它不是一个统计洁癖问题,它决定了你屏幕上那条曲线到底值不值钱。

生活层:一台每秒试一万次的开锁机

先把股票放一边。

你面前有一把四位数密码锁。你决定硬试。手动拨轮,一次试一个,一分钟试五六个,试到手指发酸。假设你试了三个小时,锁开了。这时候你心里很清楚一件事:我不是猜中的,我是穷举穷到的。 你不会觉得自己对这把锁有什么洞察,也不会觉得自己能靠这个本事去开下一把锁。

现在换个场景。有人给了你一台机器,插上去,每秒能试一万组。你按下按钮,三秒钟,锁开了。

问题来了:这三秒钟,说明你懂这把锁吗?

当然不说明。锁的难度一点没变,你的理解一点没增加,唯一变的是「试的速度」。可是从体验上,这两件事天差地别——穷举三小时的人绝不会误以为自己有天赋,按了三秒按钮的人却很容易产生一种错觉:这么快就成了,说明这方法对路。

关键就在这儿:当试错的过程被压缩到你感觉不到的程度,你就会把「试出来的」误当成「想出来的」。

再补一句更扎心的。手动试三小时的你,至少知道自己试了大约一千组。按按钮三秒的你,连自己试了多少组都不知道——机器没告诉你,你也没问。而「试了多少组」这个数字,恰恰是判断结果值不值钱的唯一线索。

投资层:这件事对你的决策意味着什么

把上面那把锁换成历史行情,把开锁换成「找一条好看的资金曲线」,故事一模一样。

先说清楚一件事:这不是 AI 带来的新问题。 「在同一份历史上反复试探,试的次数越多,越容易撞出一条好看但无效的规律」,这件事有名字,叫数据窥探,本站 数据窥探 那篇已经把它的原理、以及「分母根本数不清」这个要害讲透了。参数寻优这个动作如何自动生产噪音,过拟合 那篇也拆过一轮。

AI 没有发明这个问题。AI 做的事情只有一件:把它的量级往上抬了好几个数量级。 但量级变化到了某个程度,性质就变了——这就是本节要补的那半边。

对你的决策来说,具体后果有三条。

第一条,分母从「懒得记」变成了「无从记」。 从前你手动改参数,一晚上改十几次,虽然没写下来,但你心里大致有数。现在一个晚上四十轮对话,每轮里 AI 可能已经替你横向比较过好几种写法、悄悄换掉了一个你没注意的默认值。你连「一轮算几次尝试」都定义不了。

第二条,你的信心涨得比证据快。 曲线越跑越漂亮,对话越聊越顺,你会不自觉地把「过程很顺畅」当成「思路很正确」。可这两件事之间没有任何因果关系——顺畅只说明工具好用。

第三条,也是最贵的一条:你手里最珍贵的那份「没见过的数据」,正在被你以极快的速度烧掉。 样本内与样本外 那篇讲过一条反直觉的纪律:样本外只能用一次,看过一眼它就不再干净了。人工调参时代,你一个月才舍得动它一次;跟 AI 聊天时,你可能一个晚上就把它翻出来看了六遍,每一遍之后又回去改了改。改完再看,它已经不是样本外了。

机制层:AI 从四条路加剧了既有的偏差

下面四条是本节的正题。它们各自对应一种早就存在的回测偏差,说的都是同一件事——AI 参与之后,这条偏差原本的防线为什么失效了。

一、试错成本掉到接近于零,搜索空间被撑爆

先看看工程界是怎么对待「试了多少次」的。

在开源交易框架 freqtrade 里,参数寻优这个功能有一个明确的计数单位叫 epoch,一次 epoch 就是「用一组参数完整跑一遍回测」。你可以在命令行里直接指定要跑多少个 epoch,跑完之后每一个 epoch 的成绩都在结果列表里躺着,可以事后逐条翻。它的文档里还有两句话很值得琢磨:一句是经验上跑到某个量级之后,再多跑收益就不大了;另一句更直白——换一个随机种子重跑几遍,大概率会得到不一样的「最优结果」(随机种子就是决定「从哪几组参数开始试」的那个初始随机数,文档里可以显式指定,用来复现同一次搜索)。

第二句话请读三遍。这是这套工具的官方文档在告诉你:它选出来的冠军,有相当一部分是随机性的产物。 换个起点,冠军就换人了。

还有一处细节:这个框架把可搜索的小数参数限制到了三位小数,文档给的理由是——比这更精细的取值通常只会带来过拟合的结果。主动把搜索空间阉割掉一截,就是为了防止你试得太细。

现在对照你跟 AI 的那个晚上。参数寻优再猛,它至少还被关在同一个策略骨架里——变的只是几个数字。而 AI 帮你做的事情,是换骨架:换指标、换逻辑、换持有周期、换品种池、换整套思路。这是完全不同量级的搜索空间,而且没有任何一个计数器在数它。

二、分母不只在你手上,还有三份藏在你看不见的地方

这一条是本节最想让你记住的。

第一份藏在对话记录里。 参数寻优工具被设计成记账:多少个 epoch、每个 epoch 什么成绩、用了哪个随机种子,全都落在盘上。聊天窗口被设计成流畅:你只会保存最后那版能跑的代码,中间被否掉的三十几个想法随着窗口关闭一起蒸发。一个记账,一个不记账,这不是谁好谁坏,是产品形态不同——但后果全部由你承担。

第二份藏在别人的历史里。 你问 AI「有哪些常用的选股因子」,它报给你的那几个,为什么是那几个?因为公开文本里它们被写得最多。而它们之所以被写得最多,很大程度上是因为——它们在过去某段历史上表现好过,所以被反复讨论、反复写进教材和文章。

请把这句话捋清楚:你以为你在做第一次尝试,其实你拿到的是一份已经被几万人筛选过的冠军名单。 那几万次失败的尝试没有出现在语料里,也不会出现在 AI 的回答里。你的分母,有一大块在别人手上,而你连它的存在都不知道。

第三份藏在训练语料的时间范围里。 这一条我要把话说得谨慎些:下面是从「这类模型学的是公开文本」这个已知前提推出来的机制推断,不是我跑实验测出来的结论。

假设你让 AI 帮你设计一套规则,然后拿某一段已经过去很久的历史行情来检验它。问题在于,那段历史后来发生了什么,早就被无数复盘文章、总结帖子、教科书案例写过一遍了,而这些文字大概率就在它读过的东西里。于是它给你的建议,天然带着一股后见之明的味道——它不是在预判,它是在复述那段历史的标准答案。

你再拿这段历史去验它的建议,等于拿答案去验答案。这在回测里有个正经名字叫 前视偏差,就是「算的时候用到了当时还不存在的信息」。只不过它平时通过代码里的一行错误潜进来,这次是通过一段看起来很有道理的自然语言建议潜进来的。后者你根本没法用查代码的办法查出来。

三、样本外只能用一次,而对话是有记忆的

这一条很短,但它是所有纪律里最容易破功的一条。

正经流程是:把历史切两段,前一段随便折腾,后一段封存起来,等你觉得想法成熟了,只拆封一次,成绩如何就是如何。

现在看看跟 AI 协作时实际会发生什么。你把想法调好了,拿样本外一测,不理想。你顺手把这个结果告诉了它:「在 2019 到 2021 这段表现很差,帮我看看为什么。」

就这一句话,样本外没了。

因为它接下来给你的所有建议,都会绕着「让 2019 到 2021 好看起来」这个目标转。你再去测那段,测出来的成绩已经不干净了——你等于把答案抄给了出题人,然后让他重新出一道题。

人工时代这条纪律也会破,但破得慢,因为你脑子里的记忆是模糊的、会衰减的。对话不衰减。 你说过的每一句关于样本外的话,都完整地留在上下文里,持续影响后面每一轮的输出。

🚧 避坑

坑:把样本外的具体结果说给 AI 听,然后继续让它改进方案。 怎么避:定一条硬规矩——样本外的成绩不进对话框。想改进就回到样本内去改,改完了如果还想再测一次样本外,就必须承认「这已经是第二次拆封了,它的说服力比第一次低得多」,并且把这个次数明明白白记下来。

四、AI 写的回测代码,肉眼审不出未来函数

最后一条是工程层面的。

freqtrade 文档里有一句关于未来函数的话,意思大致是:这类偏差有时候极其容易被无意引入,却非常难被发现。所以那个框架干脆提供了一个专门的检测命令——而且这个命令的做法很有意思,它压根不去读你的策略代码,而是通过反复改变喂给策略的数据范围、再对比指标值和买卖点有没有跟着变,来把这个毛病逼出来。

为什么不读代码?因为读代码这条路走不通。逻辑绕两层,肉眼就看不出哪一步偷偷用到了后面的数据。

现在把这个放到 AI 场景里。你自己一行行敲出来的代码,逻辑好歹在你脑子里过了一遍;AI 生成的代码,你多半只是从上到下扫了一眼,觉得「看着挺对」。

而「看着挺对」,恰恰是这类模型最擅长制造的东西。

所以结论很硬:AI 写的回测代码,必须过机器检测,不能只过肉眼。 如果你用的工具没有这类检测能力,那至少手动做一件事——把数据的结束时间往前砍掉一段再跑一遍,看看已经过去那部分的指标值和买卖点有没有变。变了,就有问题。

那到底该怎么办:四个把分母拿回来的动作

不用戒掉 AI。要做的是把它抹掉的那个计数器,人工装回去。

动作一:开工之前,先把判定标准写死。

在你敲下第一句提问之前,先在一张纸上(或者一个不会被 AI 读到的文件里)写四行:

  1. 我要验的假设是什么,用一句话说清;
  2. 什么样的结果算通过,什么样的算不通过,写具体的门槛;
  3. 我允许自己试多少次,写一个上限数字;
  4. 我的样本外是哪一段,从哪天到哪天。

写完再开始。这四行的作用不是约束 AI,是约束你自己——当判定标准写在动手之前,你就没法在看到结果之后偷偷把标准挪一挪。

动作二:给对话编号记账。

准备一个最简单的表,四列就够:编号、这一轮改了什么、样本内成绩、我当时觉得为什么该这么改。每问一轮记一行。

这件事无聊到你一定会想跳过。但它是整套方法的核心:记账的唯一目的,就是让你在最后看到那条漂亮曲线时,同时看到「37」这个数字。 一条从 37 次尝试里挑出来的最佳曲线,和一条第一次跑就长这样的曲线,是完全不同的两样东西——即使它们看起来一模一样。

动作三:跑一次变体离散度自测。

这个动作能把「你选的是规律还是噪音」直接摆到眼前,做法是:让 AI 就同一个想法生成十几个近亲变体(改改周期、改改阈值、换个类似的指标),然后全部跑一遍,全部保留成绩,不许只看最好的那个。

然后看两个数:最好的那个成绩,和这一堆成绩的中位数。

  • 如果最好的那个远远甩开中位数,那说明这个成绩高度依赖某几个具体取值——换句话说,你选中的很可能是这段历史里的偶然,而不是一条稳健的规律。
  • 如果这一堆变体的成绩都差不多,虽然没那么惊艳,反而更值得继续研究——因为它说明规律不挑参数。

冠军的绝对成绩没有意义,冠军和全体的差距才有意义。 这也是前面那句「换个随机种子冠军就换人」的实操版。

动作四:把 AI 从发明家换成质检员。

前三个动作都是防守。这一个是把它用对地方。

让 AI 生成策略,它给你的是「像样的东西」,而像样正是你最难识别的陷阱。反过来用——把你已经做出来的东西丢给它,让它扮演一个刻薄的审稿人:这套逻辑里哪一步可能用到了未来信息?这个结论换一段行情还成立吗?我这个样本外的划分方式有什么问题?它这时候产出的是问题清单,而问题清单错了你一眼能看出来,结论错了你看不出来。

这套角色分工怎么固化成流程,AI 在投研里该扮演什么角色 讲得更细;本卷里还有一节专门列它真正擅长的那几件事,可以配着看。至于回测和实盘之间还有哪些跟 AI 无关的机制差异,回测好看实盘亏,差的到底是哪三件事 是正主。

⚠️ 风险提示

特别提醒一类东西:市面上打着「AI 智能选股」「大模型策略」旗号、直接展示一条漂亮历史曲线来招揽用户的服务。按本节的框架去问它一个问题就够了——这条曲线是从多少个方案里挑出来的? 答不上来、或者顾左右而言他的,这条曲线就没有说服力。本站所有内容只讲原理与方法,不推荐任何标的,不构成投资建议,也不保证任何收益,完整边界见 免责声明

小结

  • 试错成本趋近于零之后,「找到一条好看的历史曲线」从不容易变成了几乎必然。锁的难度没变,变的只是试的速度——而试的速度恰恰是判断结果值不值钱的唯一线索。
  • 数据窥探不是 AI 带来的新问题,AI 只是把它的量级抬高了好几个数量级。参数寻优还被关在同一个骨架里,AI 帮你换的是整副骨架。
  • 分母有三份藏在你看不见的地方:蒸发在对话记录里的那三十几个被否想法;AI 的建议本身就是别人筛选过的冠军名单;训练语料覆盖了你要回测的那段历史,建议里带着后见之明。
  • 样本外只能用一次,而对话是有记忆的。把样本外的成绩说给它听,这份数据当场作废。
  • AI 写的回测代码,「看着挺对」正是它最擅长制造的东西,必须过机器检测不能只过肉眼;最土的办法是把数据末尾砍掉一段重跑,看已经过去那部分的信号有没有变。
  • 四个动作把分母拿回来:开工前写死判定标准、给每轮对话编号记账、跑变体离散度自测(看冠军和中位数的差距而不是冠军的绝对值)、把 AI 从发明家换成质检员。

一句话总结:机器帮你试得快,不等于你想得对;那条曲线好不好看,取决于你为了挑出它扔掉了多少条——而这个数,只有你自己能记。

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明