论文:QuantaAlpha: An Evolutionary Framework for LLM-Driven Alpha Mining

GitHub:QuantaAlpha/QuantaAlpha

如果对QuantAlpha的代码感兴趣,可以试试配套互动代码教程

如果你听说过"量化基金"“AI 炒股"这类词,可能会好奇:AI 究竟是怎么在股市里找到赚钱机会的?它找到的方法可靠吗?能持续有效吗?

这篇文章想借一篇 2026 年的论文——QuantaAlpha——来回答这些问题。这篇论文做了一件有意思的事:不只是让 AI 去预测股价,而是让 AI 像一个量化研究员一样自己想出预测方法,然后不断进化改进

我会从量化研究是什么讲起,一路讲到这篇论文的核心机制和实验结果。涉及公式的地方会附上直觉解释,不需要数学背景也能理解。


量化研究在做什么?

从"选股"说起

普通投资者选股,靠的可能是新闻、财报、直觉。量化研究员则不同——他们的工作是找到可以被数学描述、可以被计算机执行的选股规律

这类规律叫做因子(factor)。一个因子本质上是一条规则:给市场上所有股票打一个分,然后买高分股票、卖低分股票,看这样做长期下来能不能赚钱。

最简单的因子:过去一个月涨幅最大的股票,下个月继续跑赢的概率更高(动量因子)。这条规律在很多市场里真的存在,背后有经济学解释(机构资金买入需要时间,趋势会延续),也有大量实证数据支持。

因子本身通常是一个数学表达式,作用在价格、成交量等原始数据上,输出一个分数。比如:

$$f_t(i) = \frac{P_t(i) - P_{t-20}(i)}{P_{t-20}(i)}$$

这就是一个 20 日动量因子——用今天的价格除以 20 天前的价格再减一,得到这 20 天的涨跌幅,作为对股票 $i$ 的打分。

“Alpha”是量化圈里的另一个核心词。它指的是扣除市场整体涨跌之后,策略额外赚到的收益(超额收益)。如果大盘涨了 10%,你的策略涨了 16%,那多出来的 6% 就是 Alpha。挖掘 Alpha,就是寻找能持续产生超额收益的因子。

量化因子挖掘的传统流程

在大语言模型(LLM)出现之前,量化研究员找因子的方式主要有两种:

人工驱动:研究员根据金融理论提出假设,手动设计数学表达式,回测验证。速度慢,但每个因子背后有清晰的经济学逻辑。

机器搜索:用遗传算法或强化学习在因子空间里暴力搜索,速度快,但搜出来的因子往往是无法解释的"天书"公式。

LLM 的出现提供了第三条路:它既理解金融语义,又能生成代码,理论上可以结合两者的优点。

现有 LLM Agent 方法是怎么做的?

大多数现有的 LLM Agent 因子挖掘方法,流程大致如下:

  通用 LLM Agent 方法
  ─────────────────────────────────────────

  市场数据 ──→ [LLM] 提出假设 ──→ 生成因子代码
                  ↑                     │
                  │                     ↓
              修改假设 ←──── 回测评估(IC等)
                                        │
                                        ↓
                              搜索空间逐渐收缩 
                         (反复修改,越来越像)
  ─────────────────────────────────────────

这个流程有一个隐藏的问题:LLM 每一轮都根据上一轮的回测结果"打补丁”,慢慢地,所有的修改方向都指向同一片区域,搜索空间在不断收缩。结果是生成了大量长相相似的因子,整体多样性越来越差。

QuantaAlpha 的流程设计与此截然不同:

  QuantaAlpha
  ─────────────────────────────────────────

  多样化规划:同时生成 10 个互补方向
      ↓
  [10 条轨迹各自独立运行]
      ↓
  假设生成(Idea Agent)← 评估历史库反馈
      ↓ 语义一致性检查
  形式化描述
      ↓ 语义一致性检查
  符号表达式(AST)──→ 复杂度检查 / 冗余过滤
      ↓
  可执行代码
      ↓
  回测评估(Evaluation Agent)
      ↓
  轨迹存入轨迹池 ──→ 评估历史库(每轮结束后更新)
      ↓
  ┌─ Mutation:定位最差步骤,冻结前缀,重写后续
  │       ↓(新轨迹入池)
  └─ Crossover:跨轨迹合并高贡献片段
      ↓(新轨迹入池,重复 5 轮,搜索空间持续扩张)
  因子池筛选(Rank IC 降序,相关系数 < 0.7)
      ↓
  LightGBM → 策略

  ─────────────────────────────────────────

下图展示了三代方法的对比,核心区别一目了然:现有 Agent 方法的搜索空间越来越窄,QuantaAlpha 的搜索空间持续扩展:

三代方法对比
三代方法对比:ML 黑箱(左)、现有 LLM Agent 搜索空间收缩(中)、QuantaAlpha 搜索空间持续扩展(右)

最核心的差异有两点:质量约束在生成时就执行(而非最后过滤),以及在轨迹层面做进化(而非只优化单个因子)。下面我们逐一展开。


股票市场为什么难预测?

在介绍论文方法之前,先搞清楚为什么这件事本来就很难。论文开篇点明了金融市场的三个本质特性:

重尾分布:极端事件比你想象的多得多

我们日常生活中的很多现象服从正态分布(Normal Distribution,也叫钟形曲线)。比如人的身高,大多数人集中在均值附近(170cm 左右),极端矮或极端高的人很少。

$$p(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)$$

股票的日收益率看起来也像正态分布,但如果你仔细看尾部,会发现股市的极端涨跌出现的频率,远高于正态分布的预测。这种现象叫做重尾分布(Fat-Tailed / Heavy-Tailed Distribution)。

下面是正态分布和重尾分布的示意对比:

概率密度
  ↑
  │   正态分布:中间高,两边快速归零
  │         ████
  │        ██████
  │       ████████
  │     ████████████
  │   ████████████████
  ├──────────────────── 收益率
   -3σ   -σ   0   σ   3σ
  
概率密度
  ↑
  │   重尾分布:中间更尖,但两边下降更慢
  │           ██
  │          ████
  │         ██████
  │       ██████████
  │ ▓▓▓████████████████▓▓▓  ← 尾部比正态分布"厚"
  ├──────────────────────── 收益率
   -3σ   -σ   0   σ   3σ

用数字来感受一下:在正态分布下,单日涨跌超过 3 个标准差的概率约为 0.27%,平均每 370 个交易日才出现一次。但在实际股市中,这种"3 倍标准差"的事件每隔几十天就可能出现一次——比理论预测高出数十倍

对量化研究的影响是:

  • 回测结果充满噪声,某个因子今天看起来很好,可能只是碰上了一次极端行情
  • 基于正态分布假设的统计方法(比如普通线性回归)会严重低估风险
  • 因子有效性的判断需要更长的时间周期才能稳定

这也是为什么论文要用 Rank IC(用排名代替原始数值)而不只是普通 IC——排名操作把极端值压制下来,对重尾分布更鲁棒。

时变波动率:规律本身会变

不仅股票收益率的均值难以预测,就连波动的剧烈程度也在不断变化。平静期里,每天涨跌 0.5%;动荡期里,每天涨跌 3-5%。因子信号在这两种环境下的"有效期"完全不同,一个在低波动环境里有效的因子,搬到高波动环境可能完全失灵。

截面依赖:股票之间相互影响

同一时刻,市场上的 500 只股票不是独立行动的。行业联动、宏观消息、资金流向——这些因素会让相关行业的股票同涨同跌。如果你的因子忽略了这种相关性,就会高估持有多只股票的分散化效果,实际承担的风险比你以为的大得多。


QuantaAlpha 的框架

论文把整个系统设计为四个模块,像流水线一样串联:

QuantaAlpha 四模块流水线总览
QuantaAlpha 四模块流水线总览:多样化规划 → 因子构建 → 三重约束门 → 自进化

第一步:多样化规划——从 10 个方向出发

系统首先生成 10 个互补的初始研究方向,覆盖不同的信号来源和逻辑类型:

维度 两端
信号来源 价格类 ↔ 成交量类
时间尺度 短期(1-5日)↔ 长期(20-60日)
机制类型 动量 / 均值回归 / 波动率结构 / 隔夜信息

表0:多样化规划强制覆盖的三个正交维度

为什么要强制多样化?因为 LLM 有"偷懒"的倾向——你让它想 10 个假设,它可能给你同一个想法的 10 种说法。显式的多样性约束能逼迫它真正覆盖不同方向,为后续进化提供广阔的起点。

第二步:因子构建——从想法到代码的四层翻译

每个假设由三个 AI 角色协作完成:

想法 AI 提出带有经济学逻辑的假设,比如"机构投资者在收盘前集中建仓,导致收盘价与开盘价的差距能预测第二天的交易量变化"。

构建 AI 把假设变成可运行的因子公式,经过四层翻译:

假设(自然语言)
    ↓
形式化描述(用哪些数据特征、哪类操作、参数怎么设)
    ↓
数学表达式(像乐高积木一样拼装起来的符号公式)
    ↓
可执行代码(可以直接跑的 Python/Qlib 代码)

每层之间有语义一致性检查——如果假设说的是"动量效应",最终的公式却变成了"均值回归",系统会发现这个矛盾并要求修改,而不是放任这种偷偷走样的情况发生。

评估 AI 负责回测并记录结果,同时维护一份"成功和失败因子的规律库",反馈给想法 AI,让下一轮假设更有针对性。

一个具体例子:从假设到代码的四步翻译

假设 Idea Agent 提出了这样一个假设:

“机构资金在收盘前集中买入,导致收盘价相对开盘价偏高;同时,成交量同步放大说明资金参与真实。这种’价涨量增’的组合能预测次日的延续性动量。”

Factor Agent 接着完成四步翻译:

第一步:形式化描述(把假设翻译成"用什么数据、做什么操作")

特征:close(收盘价)、open(开盘价)、volume(成交量) 操作:计算日内收益(close-open)/close;计算成交量变化率 Δvol/vol;对两者取 20 日滑动相关系数;截面排名

第二步:符号表达式(把描述翻译成数学公式)

$$f = \text{RANK}\Big(\text{TS\_CORR}\Big(\frac{\text{close}-\text{open}}{\text{close}},\ \frac{\Delta\text{vol}}{\text{vol}},\ 20\Big)\Big)$$

20 日价量相关性高,说明"涨的时候成交量也大"——正是机构资金参与的特征。截面排名把所有股票拉到同一标尺上比较。

第三步:语义一致性检查

系统检查:假设说的是"价涨量增",表达式用了价量相关性——语义对齐,通过。

第四步:生成可执行代码

def factor(close, open_, volume):
    intraday_ret = (close - open_) / close
    vol_chg = volume.pct_change()
    corr = intraday_ret.rolling(20).corr(vol_chg)
    return corr.rank(axis=1, pct=True)

代码和表达式语义再次核验:rolling(20).corr 对应 TS_CORR(…, 20),rank(pct=True) 对应 RANK,通过。

整个过程每一步都有"锚点",LLM 不会悄悄把"动量因子"改成"均值回归因子"而没人发现。

第三步:三重约束门——质量管控在生成时就执行

这是 QuantaAlpha 与通用 Agent 方法最重要的设计差异之一。

传统方法是在最后过滤掉不合格因子。问题在于:AI 根本不知道有这些标准,会反复生成同类问题的因子,计算资源白白浪费。而且 AI 的优化目标(预测准确)和约束条件(低换手率、低复杂度)之间存在矛盾,事后过滤无法解决这个矛盾,只会让搜索方向反复跑偏。

QuantaAlpha 的做法是把三道约束门嵌入生成过程,因子一生成就检查,不通过则当场修改:

第一道:语义一致性。检查假设 $h$ 和描述 $d$ 之间、符号表达式 $f$ 和代码 $c$ 之间有没有语义漂移。不一致则只修改不一致的那一层,其余已验证的内容保留。

第二道:复杂度控制。论文用一个加权公式量化因子的复杂程度:

$$\mathcal{C}(f) = \alpha_1 \cdot SL(f) + \alpha_2 \cdot PC(f) + \alpha_3 \cdot \log(1 + |F_f|)$$

三项分别控制:

  • $SL(f)$(Symbol Length):因子公式的长度,即数学表达式里的节点个数,上限 250
  • $PC(f)$(Parameter Count):自由参数数量(比如"20 日窗口"里的"20"),自由参数占比不超过 50%
  • $|F_f|$(Feature Count):用到的原始数据特征数量,上限 6 个

这道关卡的消融实验结果最为显著:去掉复杂度控制后,年化超额收益下降 8.44%,最大回撤上升 2.57%——典型的过拟合症状:训练期把历史噪声"背"下来了,测试期一遇到新环境就崩。

第三道:冗余过滤。通过比较两个因子的数学结构相似度,过滤掉和已有因子高度重复的新因子:

$$s(f_i, f_j) = \max_{\substack{S_i \subseteq T(f_i),\; S_j \subseteq T(f_j) \\ S_i \cong S_j}} |V(S_i)|, \quad S(f) = \max_{\phi \in \mathcal{Z}}\, s(f, \phi)$$

这里比较的是因子公式的"骨架结构",术语叫抽象语法树(AST,Abstract Syntax Tree)

什么是 AST?

任何数学公式或代码,都可以被解析成一棵树形结构——每个操作是一个节点,操作数是它的子节点。比如公式 RANK(TS_MEAN(close, 5)) 对应的树是:

      RANK
        │
    TS_MEAN
      /   \
   close    5

再复杂一点,RANK(TS_CORR(close, volume, 20) * TS_MEAN(close, 5)) 对应:

         RANK
           │
          MUL
         /   \
    TS_CORR   TS_MEAN
    /  |  \    /   \
close vol 20 close   5

这棵树就是因子的"骨架"——不管用哪只股票的数据算,骨架是固定的。

冗余检测是怎么做的?

把两个因子的 AST 都画出来,然后找"最大的公共子树"——也就是两棵树里结构完全相同的最大片段。

举个例子。假设因子库里已有因子 A:

$$f_A = \text{RANK}(\text{TS\_CORR}(\text{close}, \text{volume}, 20))$$

现在新生成了因子 B:

$$f_B = \text{RANK}(\text{TS\_CORR}(\text{close}, \text{volume}, 20) \times \text{TS\_STD}(\text{close}, 5))$$

两者的 AST 对比:

  因子 A                     因子 B
    RANK                       RANK
      │                          │
  TS_CORR                       MUL
  /  |  \                      /   \
close vol 20              TS_CORR   TS_STD
                          /  |  \    /  \
                        close vol 20 close 5

最大公共子树是 TS_CORR(close, vol, 20),包含 4 个节点。如果这个数字超过阈值(论文设为 5),系统就认为因子 B 与 A 高度重叠,直接拒绝。

为什么不用数值相关系数来判断冗余?因为两个因子的数值相关性需要先跑完回测才能算,代价很高;而 AST 比对在生成阶段就能完成,几乎没有计算成本。而且结构冗余比数值冗余更能反映"同质化"——两个结构相似的因子,即使在某段时间数值相关性不高,在新市场上也很可能同时失效。

消融结果:去掉冗余过滤后,ARR 几乎不变(-0.62%)。论文指出多样性是泛化能力而非预测力的来源——因子冗余会降低跨市场迁移时的鲁棒性,但不直接影响样本内预测准确度。

下面是约束门消融的完整结果:

三重约束门消融实验结果
三重约束门消融实验结果(CSI300)

表1:三重约束门消融结果(CSI300,括号内为与完整模型的差值)

消融条件 IC ARR(%) MDD(%)
完整模型 0.149 28.99 9.42
去掉语义一致性 0.130(-0.019) 23.51(-5.48) 9.75
去掉复杂度控制 0.125(-0.024) 20.55(-8.44) 11.99(+2.57)
去掉冗余过滤 0.122(-0.027) 28.37(-0.62) 9.44
三道全去掉 0.122(-0.027) 17.55(-11.44) 10.69

第四步:自进化——Mutation 和 Crossover

通过三道关的因子进入轨迹池,接下来进行核心的进化操作。

什么是"轨迹"?

一条轨迹 (trajectory) 是一次完整的 alpha 挖掘工作记录:从最初的假设,到每一步的因子生成和修改,到最终的回测结果,全程都保存下来。就像一个研究员从灵感到结论的完整笔记——可以回头翻阅,可以找到哪一步写错了,也可以把两份笔记里最精彩的部分摘出来组合成新的研究。

论文把优化目标形式化为:

$$\pi^* = \arg\max_{\pi} \mathbb{E}_{\tau \sim \pi}[R(\tau)], \quad R(\tau) = \mathcal{L}(f_\tau(\mathbf{X}), \mathbf{y}) - \lambda\mathcal{R}(f_\tau)$$

$\tau$ 就是一条轨迹,$R(\tau)$ 是这条轨迹的奖励。奖励同时包含预测准确性 $\mathcal{L}$(IC、ICIR 等)和正则项 $\mathcal{R}$(复杂度 + 因子间相关性),$\lambda$ 控制二者的权衡。

变异(Mutation):找到最弱的一步,精准修复

$$\tau_{\text{child}} = (s_0, a_0, \ldots, s_k, \text{Refine}(a_k), s'_{k+1}, \ldots, s'_n)$$

AI 回顾一条轨迹,找出最拖累结果的步骤 $k$,冻结 $k$ 之前的所有内容(已验证的好内容不动),只重写第 $k$ 步及其后续。可以更换经济机制(动量→波动率结构)、调整时间窗口(5日→20日)、引入条件判断(“只在成交量上升时触发”)。

为什么这是四个组件里消融效果最显著的(ARR -9.81%,IC -0.0292)?因为变异同时做了两件事:修复已知的错误,以及通过机制级别的修改跳出局部最优

交叉(Crossover):从多条成功轨迹里提取精华

$$\tau_{\text{child}} = \text{Crossover}(\tau^{(1)}, \ldots, \tau^{(k)})$$

从上一轮效果最好的几条轨迹里,各自提取贡献最大的片段(某条轨迹的假设特别好、另一条的因子结构特别巧妙),组合成新的轨迹。

这模拟的是研究员之间的协作:研究员甲擅长捕捉隔夜跳空信息,研究员乙擅长建模波动率结构,两人合作能产生"用隔夜信息触发波动率结构判断"的新思路。

额外价值:每个因子都有可追溯的来源谱系——假设从哪条轨迹来,结构参考了哪个父轨迹,全程可审计。这是解决"AI 黑盒"问题的一个具体手段。


一个因子的完整成长史

论文追踪了因子 Institutional_Momentum_Score_20D(机构驱动 20 日动量评分)从第 1 轮到第 5 轮的完整进化过程,可以清晰看到整套机制是如何运作的:

Institutional_Momentum_Score_20D 五轮进化轨迹
`Institutional_Momentum_Score_20D` 五轮进化轨迹,ARR 从 13.27% 提升至 29.63%。Y 轴为因子池整体累计超额收益,括号内 ARR/MDD 为单条轨迹回测指标。

Iter 1(初始化):假设是"低成交量 = 市场噪声少,此时做均值回归效率更高"。生成因子 RegimeFiltered_Reversal_5D。ARR=13.27%,MDD=7.67%。回测反馈:缺少幅度信息和风险控制。

Iter 2(变异):定位问题——缺少方向确认。修改为:把 1 日、5 日、20 日三个时间尺度的动量信号对齐,再加上波动率门控。ARR 仅 7.35%,但 MDD 暴涨到 18.7%——过度工程化,过拟合了。

Iter 3(交叉):从其他轨迹里借来更简洁的结构,大幅简化,用标准的 5日/20日波动率比率加动量,线性加权替代复杂嵌套条件。ARR 提升到 22.38%,MDD 大幅回落。第 2 轮复杂化、第 3 轮简化的来回,正是交叉纠正过拟合的直观演示。

Iter 4(变异):在简洁结构基础上,融合波动率机制与更精准的嵌套动量。ARR=27.85%。

Iter 5(交叉):整合两条父轨迹的精华——父轨迹 1 擅长识别"零售投机型脆弱动量",父轨迹 2 擅长识别"机构支撑的可持续动量"。最终因子:

$$f = \text{RANK}\Big(\underbrace{\text{TS\_CORR}\big(\tfrac{\Delta\text{close}}{\text{close}},\, \tfrac{\Delta\text{vol}}{\text{vol}},\, 20\big)}_{\text{20日价量相关性}} \times \underbrace{\text{TS\_MEAN}\big(\tfrac{\text{close}-\text{open}}{\text{close}},\, 5\big)}_{\text{5日平均日内收益}}\Big)$$

经济含义:价量同步变动说明机构资金真正参与(而非散户跟风),这种情况下的持续上涨才是可信的动量。ARR=29.63%,每个组件都有清晰的经济学解释,来源可追溯。


实验

一篇量化方法论文,需要回答四个核心问题:

  1. 整体效果:比现有方法强多少?
  2. 各组件贡献:哪些设计真正有效,哪些是多余的?
  3. 泛化能力:在没见过的市场上能用吗?
  4. 收敛性:跑多少轮最合适,会不会越跑越差?

实验设置对应这四个问题:三个市场(CSI300/CSI500/S&P500),训练期 2016-2020,验证期 2021,测试期 2022-2025。测试期故意覆盖了 2023 年的 A 股风格切换,这是对因子鲁棒性的严苛考验。

评估指标

在看数字之前,我们需要理解这些指标的含义和计算方式。

所有策略指标的基础是超额收益

$$r_{\text{excess},t} = r_{\text{portfolio},t} - r_{\text{benchmark},t} - c_{\text{transaction},t}$$

买入手续费 0.05%,卖出手续费 0.15%(扣掉这个之后,那些靠频繁买卖刷 IC 的策略就原形毕露了)。

IC(Information Coefficient,信息系数):衡量因子打分和股票实际涨跌幅的一致程度。

$$\text{IC}_t = \frac{(\mathbf{f}_t - \bar{f}_t\mathbf{1})^\top(\mathbf{r}_{t+1} - \bar{r}_{t+1}\mathbf{1})}{\|\mathbf{f}_t - \bar{f}_t\mathbf{1}\|_2 \cdot \|\mathbf{r}_{t+1} - \bar{r}_{t+1}\mathbf{1}\|_2}$$

本质是因子值向量和次日收益率向量的 Pearson 相关系数,每天算一个,最后取平均。IC > 0.03 认为有实用价值,> 0.05 相当不错。绝大多数机构量化因子 IC 在 0.03~0.06 之间,QuantaAlpha 达到 0.1501 属于顶级水平。

举个例子:某天对 300 只股票打分,分数最高的 10 只,平均第二天涨了 0.8%;分数最低的 10 只,平均跌了 0.3%。这个"高分股票涨、低分股票跌"的分离程度,就是 IC 在衡量的东西。

ICIR(IC Information Ratio):IC 的稳定性。

$$\text{ICIR} = \overline{\text{IC}} / \sigma(\text{IC})$$

只看平均 IC 不够——一个因子可能某几个月 IC 极高,其余月份接近 0,平均值看起来不错,但实盘完全没法用。ICIR 把均值除以标准差,高 ICIR 意味着这个因子每个月都比较稳定地有效。ICIR > 0.5 认为稳定,> 1.0 属于非常优秀。QuantaAlpha 达到 0.9110。

Rank IC(排名信息系数):对重尾分布的鲁棒版 IC。

$$\text{RankIC}_t = \text{Pearson}\big(\text{rank}(\mathbf{f}_t),\ \text{rank}(\mathbf{r}_{t+1})\big)$$

把因子值和收益率都换成各自的排名,再算相关系数。这样做的好处:某只股票当天暴涨 30%(极端值),在普通 IC 里会对结果产生巨大影响;换成排名之后,它只是"排名第一",和排名第二的股票差距被压缩,极端值的影响被大幅削弱。

ARR(Annualized Excess Return Rate,年化超额收益率):策略每年平均跑赢大盘多少。这是最直观的盈利指标。

MDD(Maximum Drawdown,最大回撤):从策略净值的历史峰值,到之后某个谷底,超额收益累计下跌的最大幅度。衡量的是"赚钱过程中最痛苦的那段时间有多痛",直接影响实盘能不能坚持下去。

IR(Information Ratio,信息比率)

$$\text{IR} = \frac{\bar{r}_{\text{excess}}}{\sigma(r_{\text{excess}})} \times \sqrt{252}$$

年化超额收益除以超额收益的波动率。衡量"每承担一单位风险,能换来多少超额收益",是衡量策略质量的综合指标。IR > 1.0 在业界被认为是优秀策略的门槛。

IR 与夏普比率(Sharpe Ratio)的区别在于分母:夏普比率除以的是组合总收益的波动率(含市场 beta),IR 除以的是超额收益(相对 benchmark)的波动率。量化选股策略通常用 IR 而非夏普,因为 IR 剔除了市场整体涨跌的影响,更纯粹地衡量选股能力。

CR(Calmar Ratio,卡尔玛比率)

$$\text{CR} = \text{ARR} / |\text{MDD}|$$

年化收益率除以最大回撤。衡量"每忍受一单位的最大痛苦,能换来多少年化收益",对最大回撤有心理承受要求的投资者特别看重这个指标。

这些指标为什么要同时看? 因为它们互相制约,任何一个单独好看都可能是"作弊":

作弊方式 被哪个指标识破
高频交易刷高表面收益 扣手续费后 ARR 崩塌
激进加仓博短期高收益 MDD 暴露极端风险
靠运气赚几次大的 ICIR 显示收益不稳定
只在牛市有效 超额收益相对 benchmark,牛市 alpha 被剥离

主要实验结果

表2:各方法在 CSI300 测试期(2022-2025)的对比,使用各自最优 backbone

方法 IC ARR (%) MDD (%)
TRA(最佳深度学习) 0.0421 6.81 8.51
经典因子库最优 4.63
RD-Agent(GPT-5.2) 0.0531 9.91 14.82
AlphaAgent(Claude-4.5-Sonnet) 0.1092 16.48 8.14
QuantaAlpha(GPT-5.2) 0.1501 27.75 7.98

两个关键对比值得细看:

同为 GPT-5.2,QuantaAlpha vs RD-Agent:IC 提升 183%,ARR 提升 17.84 个百分点,MDD 从 14.82% 降到 7.98%。差距几乎全来自约束机制——没有生成阶段质量管控的 RD-Agent,因子会越来越复杂越来越过拟合,实盘波动大、回撤深。

QuantaAlpha vs AlphaAgent:AlphaAgent 已有生成阶段正则化,所以优于 RD-Agent,但缺少轨迹级进化。ARR 差了 12.21 个百分点,MDD 差了 4.91 个百分点——这个差距量化的就是 Mutation + Crossover 的贡献。

QuantaAlpha 在全部五个 backbone LLM(Qwen3-235B、DeepSeek-V3.2、Gemini-3-Pro、Claude-4.5-Sonnet、GPT-5.2)上均优于对应的 AlphaAgent 和 RD-Agent,说明提升来自框架本身,与用哪个 LLM 无关。

进化组件各自贡献多少?

表3:各进化组件消融结果(括号内为与完整模型的差值)

消融条件 IC ARR(%) MDD(%)
完整模型 0.1493 28.99 9.42
去掉多样化规划 0.1488(-0.0005) 21.21(-7.78) 12.15(+2.73)
去掉变异(Mutation) 0.1201(-0.0292) 19.18(-9.81) 8.99
去掉交叉(Crossover) 0.1423(-0.0070) 26.17(-2.82) 10.63(+1.21)

三个观察:变异是最核心的组件,IC 和 ARR 降幅最大;多样化规划对 IC 影响极小,但对 MDD 影响最大(策略稳定性的主要来源);交叉的贡献中等但稳定存在。

迭代到第几轮最合适?

收敛性分析:ARR 与 MDD 随迭代轮次的变化
随迭代轮次增加,ARR 先升后降,MDD 先降后升,第 11~12 轮(约 350 个因子)为最优区间,ARR 峰值 36.02%,MDD 最低 7.58%

最优区间在第 11~12 轮(约 350 个因子),此时 ARR 峰值 36.02%,MDD 最低 7.58%。第 12 轮之后,新因子开始引入冗余信息,策略稳健性下降。这给复现提供了一个实用的早停条件。

2023 年 A 股风格切换:一次严苛的现实考试

测试期选在 2022-2025 年是有意为之,因为中间发生了一次 A 股的重大风格切换。

切换之前(2023 年前):大盘蓝筹股(茅台、宁德时代等"核心资产")主导市场,机构持股比例高,日内价格变化平滑,动量信号持续性强,传统量价因子整体有效。

切换触发因素(2023 年)

  • 外资大规模净流出,核心资产估值体系重构
  • 中特估(央企估值重估)政策驱动主题轮动
  • ChatGPT 引爆 AI 概念,A 股 AI 相关小盘股快速轮动,涨停板大量出现
  • 百亿量化私募大量使用相似的高频量价因子,因子拥挤集中爆发

新的市场特征:隔夜跳空频繁(集合竞价信息极为重要),趋势持续性减弱,小盘主题快速轮动,板块内部快速分化。

传统因子模型的两个隐含假设被同时打破:①日内价格动态是平滑的(隔夜跳空一来,前一天的动量信号开盘瞬间被推翻);②趋势具有一定持续性(小盘主题轮动里,“均值"本身在漂移)。

论文分析了 QuantaAlpha(QA)和 AlphaAgent(AA)在 2023 年全年的代表性因子表现,结果非常鲜明:

表4:QuantaAlpha 2023 年表现最好的因子(集中在隔夜竞价信息和有条件趋势两类)

因子名称 Rank IC IC 信号类型
GapZ10_Overnight_vs_TR 0.0793 0.0335 隔夜跳空 / 竞价信息
Gap_IntradayAcceptanceScore_20D 0.0744 0.0330 隔夜竞价接受度
Gap_IntradayAcceptance_VolWeighted_20D 0.0606 0.0314 成交量加权竞价信息
CleanTrend_Continuation_Score_RS10_WMA5 0.0590 0.0267 有条件的趋势延续
OrderlyTrend_x_Absorption_10D_5D_20D 0.0465 0.0271 有序趋势×筹码吸收

表5:QuantaAlpha 在 2023 年失效的因子(依赖"平滑日内价格"或"趋势持续"假设)

因子名称 Rank IC IC
KineticLength_AbsRetSum_Z_10D -0.0720 -0.0246
Drawdown_Gated_NegCorr_60D_28D_thr20pct -0.0282 -0.0095
HighClose_Shock_With_VolSync_60_20 -0.0274 -0.0090

表6:AlphaAgent 2023 年表现最好的因子(集中于耗竭型反转,Rank IC 量级明显偏低)

因子名称 Rank IC IC
Exhaustion_Intensity_Index_10D 0.0323 0.0159
Climax_Exhaustion_Intensity 0.0242 0.0160
Exhaustion_Volume_Instability_Index 0.0121 0.0117

表7:AlphaAgent 在 2023 年失效的因子(主要依赖流动性稳定假设)

因子名称 Rank IC IC
Relative_Volume_Calm_Reversal -0.0279 -0.0188
Volume_Stability_Momentum_Divergence_40D -0.0247 -0.0155
LVR_Bottom_Fishing_20D -0.0190 -0.0144

对比非常鲜明:QuantaAlpha 的强因子集中在隔夜竞价信息有条件的趋势两类——前者在集合竞价主导的新市场环境里依然有效(Rank IC 0.0793),后者通过"流动性条件"过滤掉了小盘股的噪声趋势。AlphaAgent 的强因子是耗竭型反转(Rank IC 只有 0.03 量级),在快速轮动的小盘主题市场里远不如隔夜信息类因子稳健。

QuantaAlpha 之所以能存活,根本原因是多样化初始化和冗余过滤共同保证了因子池覆盖多种不同的信号来源,总有一批因子与当前市场微结构对齐。

零样本跨市场迁移

CSI300 上挖出的因子,不做任何修改,直接部署到 CSI500 和 S&P500

零样本跨市场迁移:累计超额收益对比
CSI300 因子直接迁移至 CSI500 和 S&P500 的累计超额收益,QuantaAlpha 在 2023 年底后持续领先,截至 2025 年末 CSI500 约 160%、S&P500 约 137%

2022-2023 年各方法差距不大,2023 年底后 QuantaAlpha 持续上扬,其余方法趋于平缓或微降。截至 2025 年末:

  • CSI500:累计超额收益约 160%
  • S&P500:累计超额收益约 137%

这是整篇论文最有力的泛化性证明:挖掘到的是金融市场普遍存在的规律(价量协同动量、隔夜信息等),而非 A 股大盘股特有的历史模式。


设计哲学

论文最后把 QuantaAlpha 的设计提炼为三个核心属性,也是对"好的 AI 因子挖掘系统应该具备什么"的回答:

多样性(Diversity):广泛探索 + 冗余过滤,保证因子池覆盖多信息渠道。市场风格切换时不会全军覆没。

可控性(Controllability):AST 中间表示 + 生成时执行的三重约束,每一步都有语义锚点,不会偏离预设的经济学逻辑。

可信度(Trustworthiness):轨迹级继承让每个因子都有可追溯的谱系,AI 的工作过程可以被审计,而不是面对黑盒输出。

这三个属性恰好对应论文开篇诊断的三个缺陷:因子拥挤 → 多样性,语义漂移 → 可控性,无法审计 → 可信度。问题和解法一一对应。

现有局限:目前主要在股票资产上验证,商品/债券/外汇尚待探索;进化机制不显式感知当前市场 regime(牛熊/高低波动),未来可以让 Mutation 策略根据市场状态自适应切换;因子生成和组合构建目前相对独立,更紧密的整合理论上还有优化空间。

但不管如何,让 AI 像有经验的研究员一样思考、记录、反省、协作,并保持完整的工作谱系——这个方向本身,已经相当值得期待。