AI 在量化里能做什么、不能做什么
AI 在量化里的正确用法是当翻译器和检查员,不是当预言家。它能把你的策略想法变成可运行代码、能帮你清洗数据、能挑出代码里的低级错误;它不能判断一条策略在经济逻辑上是否成立,也经常在你不知情时偷偷引入未来函数。
本文要点
- 让 AI 预测下一根 K 线的涨跌是伪需求:价格序列的信噪比极低,模型学到的多半是噪声。
- AI 在量化里最稳定的四项产出:想法转代码、数据清洗、特征工程建议、代码审查。
- AI 最容易犯的错是引入未来函数——它写出的代码语法正确、逻辑却用了当时还不知道的信息。
- 策略是否合理、风控底线是多少,这两件事必须由人决定,不能外包给模型。
- 把 AI 当初级工程师用:你出需求和验收标准,它出实现,你负责验收。
为什么「用 AI 预测价格」是伪需求
几乎每个刚接触 AI 量化的人都会先问同一个问题:能不能训练一个模型,输入历史 K 线,输出明天涨还是跌。这个方向不是完全无效,但它是所有方向里投入产出比最差的一个,原因在数据本身。
金融价格序列的信噪比极低。日线级别上,真正可被解释的信号可能只占价格波动的百分之几,其余是噪声、流动性冲击和随机事件。一个参数量足够大的模型面对这种数据,最容易做到的事情就是把噪声当规律背下来,也就是过拟合。表现出来的症状很典型:训练集准确率 70%,测试集掉到 51%,而 50% 是抛硬币的水平。
更麻烦的是,即使你真的做到 55% 的方向准确率,也未必赚钱。因为准确率不区分幅度——如果你对的 55% 每次只赚 0.3%,错的 45% 每次亏 0.6%,加上手续费你依然是净亏。方向预测这个目标函数,和「赚钱」这个真实目标之间并不等价。
AI 真正擅长的第一件事:把想法翻译成代码
量化的瓶颈从来不是想法不够,而是想法落地太慢。你脑子里有一条规则:五分钟线上,价格突破前 20 根 K 线的最高点,且成交量大于近 50 根均量的 1.5 倍时开仓。把它写成正确的 pandas 代码,一个新手可能要花两小时,还会在索引对齐上出错三次。
这正是大模型的强项。它见过海量的 pandas、numpy、backtrader 代码,知道 rolling、shift、groupby 的标准写法。你把规则描述清楚,它十秒钟给出实现,你的时间从写语法转移到验证逻辑上。这个效率提升是实实在在的,通常能把从想法到回测结果的周期从半天压缩到二十分钟。
关键前提是描述必须精确。含糊的需求会得到含糊的代码,而含糊的代码在回测里会安静地给出错误结果。关于如何把想法写成无歧义的规范,可以看从想法到伪代码那篇的四段式模板。
第二件事:数据清洗与对齐
真实的行情数据比教程里的干净数据脏得多。缺失的 K 线、交易所维护期间的时间断层、成交量为零的僵尸周期、不同交易所的时间戳时区不一致、极端行情下的插针价格——这些问题不处理,回测结果全是假的。
写清洗代码是典型的重复性劳动,规则明确但细节繁琐,AI 做起来又快又准。你只需要告诉它数据的列名、索引类型和你的处理原则,它能生成完整的检查与修补流程。
- 时间连续性检查:按周期重建完整时间索引,找出缺口位置与长度。
- 异常值识别:单根 K 线涨跌超过阈值、最高价小于收盘价这类逻辑矛盾。
- 重复与乱序:同一时间戳出现两次,或时间戳非单调递增。
- 多标的对齐:多个交易对做联合回测时,必须按时间取交集而不是简单拼接。
这里有个原则:缺失数据宁可丢弃整段,不要用插值填补。插值出来的价格在真实市场上不存在,策略如果在插值点上成交,回测收益就是凭空捏造的。这条判断需要你来做,AI 默认往往会给你一个 fillna 了事。
第三件事:特征工程与代码审查
特征工程是 AI 表现最好的场景之一。你给它一个原始数据集和你的交易假设,它能列出二十个可计算的衍生变量:不同窗口的波动率、量价相关性、订单簿失衡度、资金费率的分位数位置。这类头脑风暴人做要半天,模型几分钟给完,你从中挑三五个去验证。
代码审查同样有效,前提是问法要对。直接问「这段代码有问题吗」通常得到一堆无关的风格建议。换成具体清单式提问,命中率会显著提高:这段代码是否在计算信号时使用了当根 K 线的收盘价、是否存在 shift 方向错误、是否在标准化时使用了全样本统计量。
把审查问题写成固定清单反复使用,比每次临时发问可靠得多。相关的 prompt 写法在用大模型写策略代码的正确提示方式里有完整模板。
AI 不擅长什么:判断策略是否合理
AI 没有金钱观念,也没有对市场机制的实感。你让它设计一个策略,它可以给出一套看起来很专业的规则——多因子打分、动态阈值、自适应窗口,术语齐全,逻辑自洽,但完全不考虑这个市场里到底是谁在亏钱给你。
任何能持续赚钱的策略背后都有一个可以说清楚的原因:你承担了别人不愿承担的风险、你提供了流动性、你的执行比对手快、你利用了某种结构性约束。这个问题模型答不了,因为它无法验证。它只能生成听起来合理的解释。
同样,风控底线也不能交给 AI。单笔最大亏损多少、总回撤到多少必须停机、能承受多长的连续亏损期,这些取决于你的资金性质和心理承受力,是主观决策。模型给出的默认值(比如止损 2%)只是训练数据里的常见值,与你的情况无关。
最危险的失误:悄悄引入未来函数
未来函数指的是策略在做决策时用到了当时还无法获得的信息。它是回测虚高最常见的原因,而 AI 生成代码时特别容易犯,因为从纯代码视角看,这些写法没有任何错误。
三种高频出现的形式值得记住。第一种是用当根 K 线的收盘价产生信号,又用同一根 K 线的收盘价成交——现实中收盘价确定的那一刻,这根 K 线已经结束了。第二种是 shift 方向写反,把未来的值移到了当前行。第三种更隐蔽:对整段数据做标准化或归一化,均值和标准差里包含了未来样本的信息。
这些错误的共同特征是回测曲线会突然变得非常漂亮。所以有条经验法则:当回测结果好得让你兴奋时,先假设代码有未来函数,去逐行验证,而不是先去想怎么加杠杆。
| 检查项 | 具体问法 | 正确做法 |
|---|---|---|
| 信号与成交时点 | 信号用了哪根 K 线的数据,在哪根成交 | 用第 t 根收盘计算,第 t+1 根开盘成交 |
| shift 方向 | 所有 shift 的参数是正还是负 | 特征一律 shift(1),禁止 shift(-1) |
| 标准化范围 | 均值方差是全样本算的还是滚动算的 | 用 rolling 或仅用训练段统计量 |
| 标签构造 | 预测目标是否与特征来自同一时刻 | 标签必须严格晚于全部特征 |
| 数据修补 | 缺失值是怎么填的 | 丢弃整段,禁止 bfill 反向填充 |
人做什么,AI 做什么:一张分工表
把职责边界划清楚,AI 的价值才能稳定释放。下面这张表是一个可以直接照用的分工,核心原则是:涉及判断和承担后果的归人,涉及转换和检查的归 AI。
| 环节 | 人负责 | AI 负责 |
|---|---|---|
| 策略立意 | 说清为什么这个规则能赚钱、谁在亏钱 | 不参与,或仅提供参考案例 |
| 规则定义 | 确定入场出场仓位过滤四段式 | 把自然语言补全为无歧义描述 |
| 数据准备 | 决定清洗原则(丢弃还是填补) | 写清洗代码、生成检查报告 |
| 特征构造 | 筛选与假设一致的少数特征 | 批量给出候选特征与计算实现 |
| 代码实现 | 验收、逐行核对时点 | 写 pandas/回测框架代码与单元测试 |
| 回测评估 | 解读指标、判断是否过拟合 | 生成绩效统计与图表代码 |
| 风控参数 | 自己定止损、回撤停机线、单笔上限 | 只做数值计算,不做建议 |
| 实盘上线 | 全部决策与资金分配 | 不参与 |
按这张表走一遍流程,你会发现 AI 承接的都是耗时但不需要担责的部分,节省下来的时间正好用在最该花时间的地方:想清楚策略的逻辑基础,以及能承受多大的亏损。更多完整流程可以参考量化学院的教程序列。
什么是常见问题?
用大模型直接生成一个完整策略能用吗?
可以作为起点,不能直接上实盘。模型生成的策略通常是训练数据里常见写法的组合,参数多为默认值,且未针对你的标的与周期验证。必须自己加成本模型跑回测、检查未来函数、做样本外验证之后才有讨论价值。
机器学习在量化里完全没用吗?
有用,但用在辅助环节比用在方向预测上有效得多。常见的务实用法包括:预测波动率以调整仓位、对特征做降维、识别市场状态分类、检测异常成交模式。这些任务的信噪比都高于预测涨跌。
怎么判断 AI 给的代码有没有未来函数?
最可靠的方法是逐行核对每个变量的可用时点:这一行用到的数据,在信号产生的那一刻是否已经确定。此外可以做一个对照实验——把所有特征额外 shift 一格再跑一次回测,如果收益大幅下降,原代码很可能存在时点泄漏。
AI 写的策略回测年化很高,可以加大资金吗?
不建议。回测数字漂亮首先应当怀疑代码错误,其次怀疑过拟合,最后才考虑策略真的有效。正确顺序是:核对时点、加入手续费与滑点、做样本外与 Walk-Forward 验证、小额实盘运行数周比对偏差。所有回测收益均为历史数据,不构成收益承诺。