(来源:建榕量化研究)
报告发布日期:2026-09-13
在量化投资领域,一个因子的构造往往需要经历逻辑梳理、代码实现、回测验证及结果整理等繁杂的步骤。过去,研究员普遍采用耗时费力的手工研发模式,因子产能和迭代速度长期受限于个人的精力与经验。随着机器学习、深度学习算法在因子挖掘领域的应用,量化投研曾迎来一次效率的跃升,非线性特征的挖掘空间也随之大幅拓宽。然而,这类传统自动化方法本质上仍高度依赖人工介入,不仅容易陷入同质化竞争,且生成的因子往往缺乏直观的经济学逻辑。
随着大语言模型能力快速演进,AI Agent开始具备较强的语义理解、任务规划和代码生成能力。与主要依赖数据拟合的传统机器学习方法相比,AI Agent可以围绕研究目标组织假设、生成代码、调用回测工具,并根据反馈继续迭代。
自2024年以来,学界和开源社区陆续推出多种面向自动化因子挖掘的AI Agent框架。本篇报告按首次公开时间依次介绍AlphaAgent、RD-Agent和QuantaAlpha三个具有代表性的开源框架,并对RD-Agent进行实证测试,为智能化投研体系建设提供参考。
01
AlphaAgent
AlphaAgent由2025年2月首次公开的论文《AlphaAgent: LLM-Driven Alpha Mining with Regularized Exploration to Counteract Alpha Decay》提出。该框架将大语言模型的推理能力与正则化探索机制结合起来。相较于只追求样本内回测表现的因子生成方法,AlphaAgent更关注因子的差异性、复杂度和样本外稳定性,力图缓解因子拥挤与过拟合带来的Alpha衰减。
1.1、架构设计
AlphaAgent将整个因子挖掘过程抽象为Idea Agent、Factor Agent和Eval Agent三个功能模块,并通过循环迭代不断优化候选因子。其中,Idea Agent负责根据历史实验结果分析当前因子的优缺点,并提出新的研究方向;Factor Agent负责将自然语言中的因子构思转化为可执行的因子表达式;Eval Agent则负责调用回测框架评估因子的有效性,并将评估结果反馈给下一轮搜索。
从AlphaAgent实现来看,论文中的三个Agent更多是一种逻辑功能划分,而并非工程实现上的三个独立智能体。AlphaAgent通过多个功能模块和模型调用串联完成一轮研发,而非由三个完全自治的智能体并行协作。模型首先根据历史结果完成因子构思,随后直接生成DSL(Domain-Specific Language,领域特定语言)格式的因子表达式,再调用封装好的评估工具完成回测,最后由工具链自动执行并返回评价指标,作为下一轮提示词输入。
这种设计减少了智能体之间复杂的消息传递和上下文同步成本,也便于将因子表达、回测与反馈纳入统一流程。不过,各模块仍主要按照预设顺序工作,交叉审阅和相互质疑能力有限,其协作深度与开放式多智能体系统存在差异。
1.2、因子挖掘核心流程
在AlphaAgent的三阶段当中,Idea Agent负责整个流程中的研究规划工作,其主要任务是根据已有实验结果分析当前因子的优缺点,并提出下一轮探索方向。提示词的行为准则要求模型总结已有因子的共同特征、失败原因以及尚未覆盖的信息维度,并尽可能生成具有差异化的新思路,以避免搜索过程不断重复已有模式。
Idea Agent并不是一个长期独立运行的研究主体,其能力主要由研究假设生成模块及相应提示词实现。模型读取历史实验、已有因子和评价反馈后,在约束条件下提出下一轮研究方向。
在得到因子构思后,Factor Agent进一步完成因子的程序化表达。这一步骤并不直接生成Python代码,而是采用DSL描述因子计算逻辑。DSL预定义了行情变量、时间序列算子、截面算子及数学函数,大语言模型仅需在限定语法空间内组合这些基础算子即可完成因子构建。
Eval Agent负责调用统一回测框架验证候选因子的有效性。对于LLM生成的DSL表达式,系统首先完成语法解析与计算,再自动执行因子回测,计算包括Rank IC、多空收益以及换手率等指标,并根据综合评价判断当前因子是否具有保留价值。
Eval Agent的核心工作由预先封装的评估工具完成,包括表达式解析、因子计算和回测评价;调试或反馈环节则可按配置调用对话模型。评估结果会写入实验记录,并作为下一轮假设生成的输入,由此形成闭环。
02
RD-Agent
RD-Agent是由微软亚洲研究院开源的面向自动化研发任务的AI Agent框架,并在2025年5月发布了相应的技术报告《R&D-Agent: An LLM-Agent Framework Towards Autonomous Data Science》。其目的在于通过大语言模型与多智能体协作机制模拟不同场景的真实研发流程。不同于针对单一任务设计的智能助手,RD-Agent构建了覆盖研究探索(Research)和方案实现(Development)的通用研发Agent体系。在研究阶段,Agent能够围绕目标任务进行信息检索、假设生成与方案探索;在开发阶段,则进一步完成代码实现、验证评估与迭代优化。
2.1、 架构设计
RD-Agent可用于机器学习模型研发、文献复现和量化投研等场景。本节重点讨论其在因子挖掘中的应用,即由Agent串联研究假设、实验设计、代码实现、回测评估和结果反馈。
从工程结构来看,RD-Agent采用模块化代码组织方式,不同目录分别承担任务入口、流程编排、Agent能力封装、场景实现以及基础工具支持等功能。
从工程结构看,core/定义框架的基础抽象和核心接口;components/提供代码生成、任务执行、交互和知识管理等通用能力;scenarios/负责将通用R&D流程落到具体业务场景,目前包括qlib(量化金融)、data_science(数据科学)、finetune(大模型微调)和rl(强化学习);app/提供命令行入口及场景相关工具;oai/封装大模型接口,为假设、方案和代码生成提供能力;log/保存运行日志,并可配合Streamlit界面查看实验过程;utils/则包含健康检查、Blob存储等辅助工具。
前文提到,scenarios目录包含四类场景。其中,qlib模块承担自动化因子挖掘任务。围绕这一任务,RD-Agent设置了运行环境及五个核心流程组件,形成可递归迭代的研发闭环。
在因子挖掘模块QlibFactorScenario中主要包含数据接口、评价指标以及回测配置等信息,负责定义因子挖掘任务的运行环境。整个自动化因子挖掘流程分为以下五个步骤:
1.在研究假设生成阶段, QlibFactorHypothesisGen模块利用大语言模型生成潜在因子构想。
2.QlibFactorHypothesis2Experiment模块进一步将研究想法转换成标准化的实验任务,包括所需数据、计算方式以及代码实现要求等内容。
3.完成任务定义后,QlibFactorCoSTEER负责因子代码生成与优化。该模块基于CoSTEER代码进化框架,生成Python代码,并结合代码执行结果、错误信息以及评价反馈进行循环多轮修正。
4.QlibFactorRunner模块根据生成的因子调用Qlib完成因子计算和历史回测,并输出IC、收益表现以及风险指标等实验结果。
5.QlibFactorExperiment2Feedback负责分析回测结果,并结合当前因子表现判断是否保留该研究方向,同时将实验反馈传递至下一轮探索过程。
通过上述流程,RD-Agent把传统因子研究拆分为多个职责清晰、依次衔接的功能模块,使每轮实验结果能够反馈至下一轮研究假设,在持续迭代中推进因子探索。
2.2、 因子假设生成
在因子挖掘流程的初始阶段,RD-Agent并非直接随机提出因子,而是通过引入历史实验信息、检索知识以及任务约束,为模型提供更加充分的研究上下文,进而生成潜在因子研究假设。
具体而言,QlibFactorHypothesisGen模块主要包含上下文准备与结果转换两个环节。在上下文准备阶段,系统首先读取当前实验历史记录,获取已有因子的生成过程、回测表现以及反馈信息,并将其作为后续因子探索的参考依据。当不存在历史记录时,系统则从初始状态开始探索。
RD-Agent还会按照预设规则调整探索难度:前期优先尝试结构较简单、易于验证的因子;在积累一定实验结果后,再逐步增加数据维度、非线性关系或机器学习方法。需要说明的是,这一变化主要由提示词和轮次规则驱动,并非系统根据市场状态自主判断复杂度。
在生成过程中,RD-Agent进一步通过预设的任务描述和输出格式约束LLM生成内容,使模型按照统一结构输出因子假设及对应研究逻辑说明。其中,因子假设描述具体计算思路,原因说明则用于解释该因子背后的金融逻辑。
概括而言,官方默认提示词包含五项要求:每轮生成1至5个因子;优先提出简单、可解释且可能有效的构造;随着实验推进逐步增加数据维度和非线性结构;在优化既有方向的同时探索新方向;最后补充去重、输出格式等注意事项。
最终,RD-Agent将LLM生成的文本结果转换为标准化的QlibFactorHypothesis对象,并传递至QlibFactorHypothesis2Experiment模块。
2.3、 因子实验任务构建
由于因子研究假设生成的研究想法仅包含因子逻辑描述,而缺少明确的计算方式和实现规范,因此QlibFactorHypothesis2Experiment负责将研究假设转换到实验定义。该模块主要包括上下文准备与实验对象构建两个环节。
在上下文准备阶段,如果已经有历史实验记录,RD-Agent会获取此前生成因子和对应的反馈,并结合当前研究假设共同构建输入上下文。随后,LLM根据预设prompt要求,将因子假设进一步拆解为结构化实验描述,主要包括三个部分:description用于描述因子的基本逻辑,formulation用于定义具体计算形式,variables用于明确所需输入变量。
在结果转换阶段,系统将LLM返回的结构化内容封装为QlibFactorExperiment对象,并传递给代码生成模块。同时,RD-Agent会比较候选因子与历史因子的相关性,避免重复执行高度相似的实验。官方默认阈值为0.99,只有相关性高于该水平时才判定为重复,实际使用时可结合因子库规模和去冗余要求调整。
2.4、 因子代码生成与优化
标准化实验任务构建完成后,RD-Agent进入因子代码生成阶段。它并非只依赖一次提示生成最终代码,而是基于CoSTEER组织代码生成、自动评估、错误分析和知识检索。系统结合历史经验与执行反馈持续修正实现方案,这是其提高代码可执行率和任务匹配度的关键环节。
在代码生成前,RD-Agent首先根据当前实验任务动态检索与之最相似的成功案例、失败案例以及当前任务历史记录,并将这些信息作为prompt的一部分输入模型,从零样本生成转变为基于经验的生成。
完成检索以后,RD-Agent对历史执行过程中产生的错误进行总结分析,输入prompt将运行日志、错误信息以及历史经验归纳为若干条critics。critics总结当前实现存在的问题,例如数据泄露风险、变量定义错误、计算逻辑不一致等,并在进行生成代码步骤之前提示LLM进行规避。
随后,RD-Agent将当前实验任务、历史成功案例、历史错误案例以及critics共同组织为prompt,并输入大语言模型按照预设的JSON格式生成因子代码。
生成的因子代码需要接受多维度的评估,最终由FinalDecisionEvaluator综合所有评估结果判断当前代码是否通过验证,如果没有达到要求,则将反馈重新传递至CoSTEER框架,循环进入下一轮代码演化。
2.5、 因子计算与回测
完成因子代码生成后,RD-Agent进入自动化回测阶段。该阶段主要依托Qlib框架,对生成因子的预测能力及投资价值进行统一验证。
官方流程判断新因子是否进入当前最优结果(state-of-the-art, SOTA)时,关注的是它加入既有特征集合后能否改善模型和组合表现,而不是只考察单因子的收益。评价指标通常包括IC、年化收益和最大回撤等。
在RD-Agent初始设置中,系统将当期生成的因子与基准特征Alpha20一起作为新的全部特征加载到模型中进行训练,利用LightGBM模型预测股票未来一个交易日的收益率。模型训练完成后,系统依据预测收益率对沪深300成分股进行排序,选取Top K构建投资组合并进行回测。
2.6、 结果分析与反馈
完成回测后,RD-Agent会进一步引入LLM对实验结果进行分析,并生成下一轮研究建议。
在反馈阶段,系统首先汇总本轮实验信息,包括研究假设、各因子的名称、描述、计算公式、实现情况以及历史最优实验结果(SOTA),并提取IC、年化超额收益率以及最大回撤等关键评价指标作为分析依据。
随后,系统构建反馈提示词,引导LLM分析实验结果。若本轮结果优于历史最优记录,相关因子将进入当前SOTA特征集合,后续实验在此基础上继续扩展;若与历史最佳结果差距较大,反馈模块则倾向于建议调整或更换研究方向。
最终,LLM输出反馈信息,系统根据反馈判断当前实验是否达到历史最优水平,并决定是否将其纳入SOTA因子库。
保存本轮实验结果和反馈后,下一轮的QlibFactorHypothesisGen会读取历史记录与最新反馈,重新生成研究假设,由此进入下一轮迭代。
03
QuantaAlpha
QuantaAlpha由2026年2月首次公开的论文《QuantaAlpha: An Evolutionary Framework for LLM-Driven Alpha Mining》提出。该框架把一次完整的因子研发过程视为一条研究轨迹,并借鉴遗传规划算法中的选择、变异和交叉机制,对多条轨迹进行持续筛选和重组,以扩大研究方向的搜索范围。
3.1、 架构设计
与RD-Agent围绕单条研发链路循环迭代不同,QuantaAlpha在底层因子研发流程之上增加了演化控制器(Evolution Controller)。底层复用RD-Agent完成假设生成、实验构建、代码生成、回测验证和反馈总结;上层则根据轨迹表现执行选择、变异和交叉,维护多个候选研究方向并推动后续演化。
QuantaAlpha的AlphaAgent Loop主要复用RD-Agent的底层能力。研究假设生成、实验任务构建、代码生成、回测执行和反馈分析等模块总体保持一致,主要改动集中在提示词、实验对象、语义一致性检查和轨迹管理等环节。
QuantaAlpha将一次完整的Agent运行视为一条独立的研究轨迹(Trajectory),多个研究轨迹共同组成轨迹池,并由演化控制器统一管理。系统根据各条研究轨迹的实验表现,持续执行选择、变异及交叉等遗传操作,不断产生新的研究方向,再交由底层Agent完成完整的因子研发流程。
3.2、 演化系统
QuantaAlpha的演化系统引入了遗传规划算法的变异(Mutation)和交叉(Crossover)概念,遵循“Original → Mutation → Crossover → Mutation → Crossover → Mutation → ……”的循环演化流程。
具体来看,Original阶段先生成多个相对独立的研究假设,并分别运行AlphaAgent Loop完成因子研发。随后,演化控制器根据历史实验结果选择候选轨迹:Mutation针对某条轨迹中的薄弱环节进行局部修改,例如调整计算窗口或加入新的输入变量;Crossover则重组两条轨迹中表现较好的步骤或信息,形成新的研究方案。多轮演化后,表现较好的轨迹获得更多后续探索机会。
需要注意的是,由于每轮Mutation和Crossover都会生成新的Trajectory,并保留对应的流程信息,随着演化轮数增加,系统需要维护的历史实验记录不断累积。因此,QuantaAlpha在扩大搜索空间的同时,也会带来更高的计算和存储开销。
04
RD-Agent实证分析
4.1、 细节梳理
上文中,我们从架构设计维度对比了不同的自动化因子挖掘框架的差异,这里我们以最主流的RD-Agent作为切入点进行实证检验,考察Agent自动化挖掘的因子在实际投研环境中的效果。
在开始之前,我们先澄清几个关键信息点,有助于我们后续对RD-Agent框架的应用以及生成结果的理解。
(1)RD-Agent评估的重点并非单个新因子的独立预测能力,而是该因子加入现有特征集合后能否带来增量改善。因此,即使某个因子的单因子表现一般,只要能提升模型或组合的整体表现,仍可能被判定为有效。
(2)RD-Agent进行因子挖掘时,默认是对沪深300指数成分股的未来一个交易日的收益率进行预测。为了放宽预测范围(不同指数)和频率(不同周期),我们对源码进行了修改。(3)RD-Agent样例数据文件daily_pv.h5主要包含日频价量字段。为拓宽因子搜索范围,我们扩充了该文件,加入三大财务报表中的相关字段。财务数据按PIT(Point-in-Time)方式对齐,确保每个时点只使用当时已经披露的信息,避免未来数据泄露。
(4)原始流程在计算单个因子时会加载完整的daily_pv.h5,即使实际只使用少数字段。当文件扩充至较多价量和财务字段后,这种方式会显著增加内存占用。为此,我们修改了数据读取逻辑,仅加载因子计算所需的字段(REQUIRED_FIELDS),从而降低内存压力和内存溢出(Out of Memory, OOM)发生频率。
(5)RD-Agent默认每轮生成1至5个候选因子,并将本轮因子一并加入特征集合训练模型,评估它们对整体预测结果的联合贡献,而非逐一检验每个因子的边际贡献。此外,官方默认股票池为指定指数成分股,而非全市场。
4.2、 环境设置
为提高实证结果的可复现性,本节对RD-Agent的运行架构、模型配置、数据范围及回测参数进行统一说明。本次测试在官方因子挖掘流程基础上,对数据字段读取、预测周期和股票池设置进行了适配;除特别说明外,各组实验采用相同的基础特征、样本划分和评价口径。
RD-Agent整体围绕Linux环境开发。对于Windows设备,本次实验将RD-Agent部署在WSL2提供的Ubuntu环境中,由Ubuntu侧负责项目代码管理、Python依赖安装、模型接口调用和Agent流程调度。相较于直接在Windows环境运行,这种方式能够减少路径格式、Shell命令和依赖编译等方面的兼容性问题,也更接近官方代码的原生运行环境。
因子代码执行和Qlib回测主要依托Docker容器完成。RD-Agent将生成的因子代码、特征数据和回测配置传入容器,在相对独立的环境中执行因子计算、模型训练与历史回测,再将运行日志和评价结果返回主程序。Docker容器统一了Python、Qlib及相关依赖版本,同时能够隔离Agent自动生成代码,降低异常代码或依赖冲突对宿主环境的影响。
为提升部署成功率,建议Windows下的RD-Agent环境配置使用Codex等Agent工具进行辅助安装。除了配置实验环境,我们还需要对RD-Agent运行过程中的模型、数据和回测等维度的参数进行设置。
前文中我们简要展示了官方的提示词模板,但是在实际应用中,为了拓宽RD-Agent因子挖掘的广度和深度,我们对其进行了重新设计,主要包括五个环节,因子构造复杂度从S1到S5环节逐步提升,但阶段划分主要用于控制研究方向和因子结构,并不意味着因子复杂度会随迭代轮数机械增加。
受限于个人电脑的硬件水平,为了提升因子挖掘的效率,我们使用官方默认的Alpha20作为基准特征。一般而言,基准特征越简单,因子挖掘过程越容易产生新的SOTA。
本次测试中,Chat模型采用部署在本地服务器的qwen3.8-27b,Embedding模型采用text-embedding-qwen3-embedding-0.6b。前者用于假设生成、实验设计、代码生成、结果反馈和决策等环节;后者负责将文本映射为向量,用于RAG、CoSTEER知识库检索和语义相似度计算。
回测样本划分为训练集(2016-01-01至2022-12-31)、验证集(2023-01-01至2024-12-31)和测试集(2025-01-01至2026-07-31)。业绩比较基准为中证1000指数,预测目标为未来5个交易日收益率。
4.3、 实证结果
以某次session为例,我们累计运行30轮因子挖掘。与Alpha Base相比,后续轮次的IC和RankIC多数有所抬升,但年化收益、信息比率和最大回撤波动较大,并未随迭代轮次单调改善。第22轮生成的因子与历史因子的相关性超过0.99,被去重机制判定为重复,因此图表中该轮结果为空。
从逐轮结果看,只有Round-12和Round-13更新了SOTA。两轮的IC、RankIC、年化收益和信息比率均高于Alpha Base,其中Round-13整体表现更优。其余轮次即使个别指标较好,也未同时满足系统的综合判定条件。
我们进一步展示最新SOTA结果(Round-13)的时序表现。2026年3月以前,模型累计超额收益总体上行,超额回撤相对可控;此后超额收益明显回撤,至2026年7月附近才开始修复。该阶段与科技风格显著走强、市场分化加剧大体重合,说明模型对市场风格切换较为敏感。
30轮迭代共生成35个可用因子。对比全区间与样本外结果可以发现,因子表现分化较大:部分因子在全区间具有较高RankIC,但进入样本外后明显减弱,另有少数因子保持相对稳定。这表明部分因子有效性对样本区间和市场环境较为敏感。
以全区间RankIC绝对值最高的Lag1IdioVol20WinsorNeg因子为例,该因子先剔除市场共同收益,再计算过去20个交易日的个股特质波动率,经截面缩尾后取负,检验低特质波动股票是否具有更稳定的超额收益。该因子生成于第26轮,对应S5非线性探索阶段。
根据测试结果,Lag1IdioVol20WinsorNeg因子全区间RankIC均值为7.42%,RankICIR为0.60,样本外RankIC均值为7.04%,RankICIR为0.38;五分组累计收益具有较好的单调性。但多空组合在2025年下半年出现较大回撤,说明其样本外稳定性仍需持续观察。
为降低单次session带来的路径依赖,我们启动多个独立session进行因子挖掘,共得到上百个候选因子。剔除数据异常和不可用结果后,保留159个因子。需要说明的是,不同session采用的股票池和基准设置并未全部统一为中证1000指数,因此横向比较时仍需考虑样本范围差异。
我们计算不同因子的时序RankIC相关系数,用于观察其预测能力的同步程度。相关性热力图呈现出若干明显的块状结构,说明部分因子之间存在较强的同向或反向关系,但大多数因子间相关性处于较低水平。
层次聚类结果进一步显示,多数因子只有在较高的聚类距离下才与其他因子合并,表明不同session生成的因子总体仍有一定差异。在绝对相关系数0.7的划分标准下,图中形成了多个小型聚类簇,说明部分因子虽名称和表达式不同,实际捕捉的信息较为接近。
我们还测算了这些因子对Barra CNE-5风格因子的线性暴露。具体做法是:在每个月末,以当期标准化后的待测因子为因变量、标准化后的Barra风格暴露为自变量进行截面多元回归,得到各风格回归系数,再对月度系数取均值。为避免极端值影响热力图的可读性,绘图时将展示范围截断在[-1, 1]。
结果显示,多数因子对Barra风格的平均线性暴露较弱,只有少数因子在个别风格上表现出较明显的倾向。不过,低线性暴露并不意味着因子完全不受风格影响。部分因子采用乘积、分段或滚动窗口等非线性构造,例如因子RoEQualityLowRisk将当期ROE与过去20日波动率结合,这类关系未必能被线性Barra回归充分刻画。
模型基于历史数据测算,未来存在失效风险。
更多交流,欢迎联系: