← 返回教程库

用大白话说一个策略让 AI 写成代码,它替你猜掉的正好是最要命的部分

最后更新 2026-08-19
📚 量化与 AI 投研 📖 AI 交易与 Agent ⏱ 约 17 分钟 R2 · 注意风险
你将学到
  • 看懂一句大白话策略里到底藏了多少个没说清的空,以及哪几个空最贵
  • 理解「成交在哪根 K 线、按什么价、涨跌停基准怎么取」这三处默认值为什么最容易悄悄制造出好看的历史成绩
  • 学会用行为验收代替读代码验收——在你完全看不懂那段程序的前提下,仍然能判断它是不是在偷看未来

有个体验现在几乎人人都试过:你在对话框里敲一句「短期均线上穿长期均线就买入,下穿就卖出,帮我在过去三年的数据上回测一下」,几十秒之后,你拿到一段能跑的程序,还有一张一路向上的资金曲线。

你读不懂那段程序。但你看得懂那张曲线。

这件事的诱惑力太大了——过去要把一个念头变成能检验的东西,你得先学语言、学数据接口、学回测框架,一路学下来一个月过去,热情早凉了。现在几十秒就有结果。门槛是真的塌了,这不是营销话术。

但你手上那张曲线,和一个专业的人做出来的曲线,中间隔着的东西,恰恰是你刚才那句话里没说的部分。而你之所以没说,是因为你压根不知道那些地方需要说。

先说人话:你跟装修师傅说「客厅装个灯」

你跟师傅说「客厅装个灯」。师傅不会站在那儿追问你二十个问题,他会开工。

开工之前他心里已经替你定了十几件事:灯装在天花板正中还是沙发上方、开关放门口还是床头、走明线还是开槽走暗线、用几平方的线、要不要留双控。这些他都按自己的习惯定了,没跟你说,因为在他看来这些是常识。

灯亮了。你验收,你只会看一件事:亮不亮。

你不懂装修,所以你的验收标准里根本不包含那些他替你定的东西。 而三年后墙里那根线出问题的时候,出问题的正是他替你定的那一项。

让 AI 把一句话写成策略代码,是同一个结构,而且更糟。装修至少灯亮了是真亮了;策略这边,那条曲线好看,可能纯粹是因为它替你定的那几件事,方向全部朝着「让历史成绩好看」那一侧倒。

投资层:这条路的价值和天花板,各自在哪

先把价值说足,否则就是另一种偏见。

价值在于试错成本。 一个投研的人一年会冒出几十上百个念头——「财报发布后三天有没有惯性」「成交量突然放大的那批标的后面怎么走」「行业里最弱的那几只会不会补涨」。这些念头里绝大多数是废的,但你不试就不知道哪个废。过去试一个的成本是好几天,于是你一年只能试三五个,而且会舍不得否掉自己花了三天做出来的那个。现在试一个的成本掉到几十分钟,你终于敢大方地把废的扔掉了。 这个变化的价值比它看起来大——投研的产出不取决于你想法多好,取决于你能多快地把坏想法筛掉。

天花板在于:你说得不清楚的地方,它一定会替你猜,而它猜的地方恰好是最关键的。

这句话得掰开讲。一个策略从「一句话」到「一段能跑的程序」,中间至少要填这些空:

  • 在哪批标的上做(标的就是你要买卖的那个东西,一批标的合起来叫标的池)
  • 用什么周期的数据(K 线就是一段时间里的开盘、最高、最低、收盘四个价,日线一天一根,分钟线一分钟一根)
  • 信号出现之后,在哪根 K 线上成交
  • 按那根 K 线的哪个价成交
  • 滑点算不算(滑点就是你下单时看到的价,和最后真正成交的价之间那点差额)
  • 手续费、印花税算不算
  • 每次买多少、总共同时持有几只
  • 什么时候卖:靠反向信号、靠持有天数、还是靠止损
  • 那天要是涨停买不进、跌停卖不掉、干脆停牌了,怎么算

你那句「金叉买死叉卖」,只回答了第三行和第八行的一半。剩下的全是空。

AI 不会把这份清单摊开问你。它会一路填下去,填得又快又顺,然后交给你一段看起来非常专业的代码。它填的每一个默认值都是合理的,但「合理」和「和你想的一样」是两件事,「和你想的一样」和「和真实市场一样」又是第三件事。

机制层:最贵的三个空格

上面那张清单里,有三处的杀伤力远远超过其它。它们的共同点是:填错了,历史成绩会变好看,而且不会报任何错。

一、信号出现在哪根 K 线,你就在哪根成交吗

这是最经典的那一处。

今天收盘之后你才知道今天的收盘价,也才算得出今天的均线,也才知道今天出了金叉。可回测程序里的今天,全部数据早就摆在那儿了——开盘、最高、最低、收盘一应俱全。如果程序在「今天出了信号」的同一根 K 线上,按今天的收盘价记一笔买入,那它用的是一个当时还不存在的信息。

这就叫前视偏差:程序在算历史的时候,偷看了未来。 它不报错、不崩溃,只是安静地把你的曲线画得更漂亮。这件事本身的来龙去脉,前视偏差 那篇拆得更细。

认真的回测引擎会怎么处理?开源项目 Vibe-Trading 的回测底座里,把信号矩阵整体往后挪一根 K 线,代码里的说法叫「次根 K 线开盘价语义」——今天的信号,明天开盘才生效。这一挪不是可选项,是写在数据对齐这一步里的默认行为。

注意这个动作意味着什么:这是一条工程默认,不是你的策略决定。 你说「金叉买」的时候,你脑子里那个买入动作发生在哪一刻,你自己都没想清楚。挪一根是保守做法,不挪是作弊做法,还有中间做法(当天收盘前若干分钟估算信号提前下单)。三种做法的历史成绩能差出一大截,而这三种在你那句话里长得一模一样。

二、按什么价成交,滑点往哪个方向走

同一个项目里还有一个函数,专门回答「这一笔要是成交,成在什么价」。它的答案是:这根 K 线的开盘价,再按交易方向加上滑点——买的时候往贵了滑,卖的时候往便宜了滑。

「按方向滑」这四个字是重点。滑点不是随机的正负抖动,它是系统性地咬你一口:你急着买的时候市场就是贵一点,你急着卖的时候就是便宜一点。一个默认「不算滑点」或者「滑点对称随机」的回测,长期看会把成本这一项整段吞掉。交易频率越高,被吞掉的越多。

而这一项在你那句大白话里,连影子都没有。 你不会想到要说「我的成交价要按开盘价加万分之几的滑点算」,因为你要是能想到这句话,你也就不需要 AI 帮你写代码了。

至于「那天到底成不成得了、成多少」,这是另一整套假设,回测里的成交假设 那篇把常见的几种按乐观程度排成了一把尺子,值得对照着看你手上这份代码站在哪一格。

三、连「涨跌停算到哪」都能偷看未来

这一处最能说明问题的深度。

要判断某天某只标的能不能成交,得先知道当天的涨跌停价在哪。涨跌停价是按一个基准价算出来的,那么这个基准价从哪儿取?

上面那个项目的代码里,取基准价的函数写了一段很长的注释,大意是:涨跌停的区间必须从一个「下单那一刻市场已经知道的价格」推出来;这个引擎在当根 K 线的开盘价成交,所以当根 K 线的收盘价属于还不存在的信息,用它就是前视偏差。 于是它按顺序去找严格属于历史的来源——先看数据里有没有现成的前收盘或前结算价,没有就回头取上一行的收盘价,再没有就用当天的涨跌幅倒推出前一天的收盘价(倒推出来的仍然是历史值)。全都取不到的时候,它返回空,而调用方被明确要求:这时候不许凭空捏一个拦截出来。

停下来体会一下这个细节的精细程度。这不是策略逻辑,这是「判断能不能成交」这个辅助动作里的一个中间变量。就连这么深的一层,写这套东西的人都专门盯着「这个数当时知不知道」这个问题。

你那句大白话里,这一层根本不存在。 AI 替你填的时候,它填对了你不知道,填错了你也不知道。

你读不懂那段代码,那还怎么验收

这才是这条路上真正的难题。前面三处你现在知道了,可你打开那段程序,看到的还是一片你不认识的东西。你没法用「读一遍」的方式验收。

开源回测框架 freqtrade 提供了一条专门检测前视偏差的分析命令,它的思路给了一个很好的启发。文档里写得很直白:这个命令不去看策略代码本身,它的做法是——先完整跑一遍拿到基准,再针对每一次进场和出场分别重跑一次切了片的回测,然后比对两次结果里指标的数值和进出场的位置有没有发生移动。如果一段策略在「只喂给它信号之前的数据」时表现变了,那它原来就是在用后面的数据。

同一份文档还提到,这个命令会强制关掉缓存、把资金拉到几乎无限大、把下单方式统一成市价单等等,理由是避免用户误产生假阳性

这两件事合起来给你的启发是:

第一,验收方式是行为验收,不是阅读验收。 你不需要读懂代码,你需要设计能让它露馅的对照实验。同一段逻辑,把数据的最后一段砍掉重跑,前面那段的成绩应该一模一样;如果变了,那它在用后面的数据。这个实验你完全可以让 AI 帮你做,因为验收的判据是你定的,不是它定的。

第二,验收本身也会出假阳性。 一个严肃的检测工具要专门锁死一堆参数来防止误判,说明「测出来有问题」和「真的有问题」之间还隔着一层。别一看到差异就下结论,先想想是不是别的东西变了。

把话说清楚的四个动作

如果你决定用这条路,下面四件事能把「它替你猜」的比例压下去一大截。

第一,先写规格,再让它写代码。 不要一句话丢过去。把上面那张空格清单当成表格,逐项填,填不了的那几项就明确写「我不知道,请你列出常见做法和各自的偏乐观/偏保守方向,我来选」。这一步会逼出你自己都没想清楚的地方——而想不清楚的地方,本来就不该由一个机器替你决定。

Vibe-Trading 里有一个纯本地、不依赖任何模型的「研究假设登记表」,它规定一个想法至少要有这么几个字段:适用的标的范围、信号的文字定义、用了哪些数据源,以及一个我认为最要紧的字段——作废说明:什么情况下这个想法算是被推翻了。

最后这一项在你那句大白话里从来不会出现,但它是整件事里最贵的一句话。一个说不清「怎样算它错了」的想法,你永远无法把它从你的清单里删掉,它会一直挂着,一直消耗你。

第二,逼它把默认值列出来。 写完代码之后追问一句:这段程序里,凡是我没有明确指定、由你选择的地方,逐条列出来,每条写清你选了什么、还有哪些常见选项、以及你的选择在偏乐观还是偏保守的方向上。这个问法有效,是因为它把「猜」这个动作从暗处拽到了明处。

第三,同一句话让它写两遍,比对差异。 两次生成不一致的地方,就是你没说清楚的地方。这个办法粗暴但极其有效,而且不需要你懂代码——你只要让它把两版的默认值清单摆在一起看哪几行对不上。

第四,永远用能证伪的方式验收。 曲线好看不是结论,是提问的开始。至少要问:把时间段换一半还成立吗?把成本调高一档还剩多少?交易次数是不是少到根本不构成证据?这一整套「回测好看之后该做什么」的动作,回测好看实盘亏,差的到底是哪三件事 那篇是正主。

🚧 避坑

最危险的用法不是让它写代码,是让它帮你改代码直到曲线好看。 你说「收益不够高」,它调参数;你说「回撤太大」,它加条件。这个来回做上二十轮,你会得到一条极其漂亮的曲线,和一个只在这段历史上成立的东西。真正在做过拟合的不是那个模型,是坐在椅子上不停说「再优化一下」的你——它只是把这件事的成本降到了几乎为零。这类「同一份数据被反复试探」的问题,数据窥探 那篇讲得很清楚。反过来说:恰恰因为现在改一版只要一分钟,你更需要在第一版之前就把「怎样算失败」写下来。

边界在哪,什么绝对不该做

这条路的合理终点是「一个可以被检验的想法」,不是「一个可以下单的程序」。

从一句话到一段回测代码,隔着一层认知——你没说清的地方它替你猜了。从一段回测代码到真的往市场里发委托单,中间隔着的东西还要多得多:委托类型、数量取整、账户状态、断线重连、部分成交、当天限制,任何一处出错都是真钱。从一句话到一张委托单,中间隔着多少步 专门拆这一段。

尤其不要因为「代码是它写的、跑得也挺顺」,就顺手把下单这一步也交给它。 一段你读不懂的程序,配上一个连不上任何人工确认的执行通道,这个组合的风险不是「可能亏钱」,是「你在事后连发生了什么都复原不出来」。真要往那个方向走,把下单权交给 AI 之前,先问自己这几个问题 里的授权边界、额度上限、随时可中断、全程可审计这四条,是先决条件而不是加分项。

还有一类误用值得单独点出来:把「AI 能写策略代码」读成「AI 能给你一个赚钱的策略」。 它帮你完成的是从想法到检验之间的翻译工作,翻译得再好,也不会让一个本来不成立的想法变成立。你想法的质量、你对市场的理解、你愿意为一个负面结果放弃自己心血的诚实程度——这三样,一行代码也替不了。

小结

  • 门槛塌了是真的:把一个念头变成可检验的东西,成本从几天掉到几十分钟。真正的收益不是省时间,是你终于敢把废想法扔掉了。
  • 一句大白话至少留下十几个空:标的池、数据周期、成交在哪根 K 线、按什么价、滑点、成本、仓位、退出条件、涨跌停与停牌。你只回答了其中一两个。
  • 最贵的三处默认值是成交时点、成交价与滑点方向、涨跌停基准价的取法。它们的共同点是:填错了历史成绩会变好看,而且一个错误都不会报。
  • 验收方式必须是行为验收,不是阅读验收。砍掉后半段数据重跑、比对前半段成绩是否一致,这个对照实验不需要你懂代码。
  • 让它把「我替你猜的地方」逐条列出来,同一句话写两遍看哪里不一致——这两招把暗处的假设拽到明处,成本几乎为零。
  • 一个说不清「怎样算它错了」的策略想法,你永远删不掉它。作废条件要写在第一版代码之前,不是之后。
  • 这条路的终点是可检验的想法,不是可下单的程序。这两者之间的距离,比代码跑通与否大得多。

一句话记住这篇:它帮你把话变成了代码,但它没帮你把话说清楚——你没说的那些,它全都替你决定了,而且不会告诉你。

本文所述机制来自上述源码与文档快照的阅读,是对代码结构与文档说明的转述,不是运行结果,也不代表任何做法有效或能带来收益。本文不推荐任何策略、工具或平台,更不建议读者据此进行任何实盘操作。回 量化与 AI 投研概念库 看各个概念分别在说什么;本站内容为投资教育,不构成任何投资建议,完整边界见 免责声明

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

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