# 12小时自动迭代年化14%：微软这套AI选股系统太完美了，直到我看到论文里那个细节

- URL: https://davidyin.dev/writing/227-20260729-rd-agent-quant-factor/
- 作者: David Yin
- 发布: 2026-07-29
- 标签: RD-Agent、量化因子、AI 选股、回测、数据复用、NeurIPS
- 摘要: 微软 RD-Agent 用两个 AI 角色自动挖量化因子：自己提假设、写代码、跑回测，12 小时跑完一轮，模型调用费不到 10 美元，论文被 NeurIPS 2025 接收。但论文里一个细节几乎没人提：同一份 test 集在循环里被反复读四遍，选出的公式更像被同一份考卷反复筛出来的结果。年化 14.21% 与 IC 0.0532 也别焊在一起，10 美元账单只算了 Token，不含四块 A6000 的硬件成本。

你花了两周，试了三十几种选股公式。每条公式都要写成代码、接进历史数据、跑一遍回测看看过去十年效果怎么样。效果好的留着，效果差的丢掉，参数微调一下再跑一遍。两周下来，能用的就一两个。

如果有这样一个工具：你对它说「帮我找一些能预测股票涨跌的公式」，它自己提想法、自己写代码、自己接数据跑回测、自己从失败里学习。十二小时跑完一整轮。模型调用费不到 10 美元。

微软把它做出来了，叫 RD-Agent。论文已经被 NeurIPS 2025 接收。

然后我翻到了论文里的一个细节。越看越不对劲。

## 那个细节：同一份考卷，它看了四遍

论文里有一个细节，几乎所有转发和报道都没提。这套系统在自动优化的过程中，会把同一段历史数据反复拿来用——打分用它、排序用它、择优用它、下一轮迭代还是用它。打个不太精确但好懂的比方：你拿一份考卷反复测同一批学生，每次考完还告诉他们分数，让他们照着改答案。几十轮下来，分数肯定越来越高——但这不代表学生真的变聪明了。

量化圈子把这段历史数据叫 test 集。正常的用法是最后一次才看，像高考——考完交卷，看一眼分数就结束了。但在 RD-Agent 的工作流里，test 集在循环里被反复读了四遍：在上面算预测值、在上面算相关性分数、在上面跑模拟交易、然后把这些结果喂回系统让它决定下一轮往哪个方向优化。几十上百轮转下来，选出来的公式在这段 test 上好看，本质上是被这段数据反复筛出来的结果。

这不等于论文造假，也不等于代码偷看了未来数据。更准确的说法是：这套系统的公开实现，在设计上就没有把 test 封存起来当单次终裁——**它被反复读了。**

这不是 RD-Agent 一个项目的问题。自适应数据分析领域 2015 年就有过系统性的讨论——Cynthia Dwork 等人的 foundational paper 证明过，任何反复读取同一个 test 集来做模型选择和参数调优的过程，都会让 test 集上的分数系统性地偏乐观。你每读一次 test 的分数，就等于在那张卷子上抿了一笔。抿的次数多了，卷子上自然全是你的指纹。

先把这个最要紧的问题钉在这儿，回头看看这套系统本身。

## 它到底是个什么东西

RD-Agent 是一个通用的自动研发框架——你可以把它理解成两个 AI 角色搭班子干活：一个叫 R，负责研究（提想法、出假设）；一个叫 D，负责开发（把想法写成能跑的代码）。量化金融是它的一个专版，命令行敲 `rdagent fin_quant` 进去。论文挂在 arXiv 上（2505.15155 v2）。

它跟传统自动化工具最大的区别，在于对待失败的方式。一轮实验跑砸了——某个公式在验证数据上表现平平，或者代码根本没跑通——系统不会把这次实验丢掉。它会记住这个公式的表达式、它在哪些股票上不行、回撤曲线长什么样。下一次提新假设的时候，分析调度模块会把这条记录翻出来：「上次用 20 日动量搭配沪深 300 不行，这次试试 60 日动量，或者换到中证 500 上跑。」它不是在随机试，是沿着上一次的失败定向试。

一整轮拆下来是五步。定规格：明确这轮要找什么样的公式、搜什么样的模型。提假设：给出一个具体的、可验证的猜想——比如「反转因子，过去 5 日收益率倒数加权」。写实现：交给一个叫 Co-STEER 的组件，把假设翻译成能跑的代码。代码跑崩了它会自己读报错、改逻辑、再跑，反复几次直到跑通。做验证：写完的公式拿去去重、做健康检查，再塞进一个叫 Qlib 的回测引擎里跑一遍。最后分析调度：把验证结果咀嚼一遍，决定下一轮是继续找新公式还是回头改模型。学到的东西顺着这个循环往前滚。

三种玩法。R&D-Factor 只找公式、模型固定不动；R&D-Model 反过来，公式固定、只搜模型；还有个联合版，自己判断这一轮该补公式还是该换模型。论文的实验是三种分开报结果的，后面的数字别混着看。

## 不到 10 美元，买的是哪一段

花多少钱。论文 Figure 11 给了账单，5 次试验平均：只找公式的分支跑 6 小时，o3-mini 花了 9.48 美元（约 68 块人民币），GPT-4o 花了 7.86 美元；联合版跑 12 小时，分别是 8.11 和 7.28 美元。完整跑一次联合实验，模型调用费确实不到 10 美元。

但这个数字只是 Token Cost——模型调用费，**不是总成本。**跑这套东西背后是一台装了 112 个线程 CPU 和 4 块 RTX A6000 显卡的服务器，硬件成本不在这张账单里。还有数据准备、容器构建、缓存预热、人工检查和工程维护，全都不在里面。而且这是论文当时的 GPT-4o 和 o3-mini 价格——不是你今天重跑一遍的报价，模型 API 的定价早变了几轮了。

## 两个数字，别焊在一起

看效果。这套系统产出的公式好不好用，量化圈用两个指标来评判。一个是 IC——你可以把它理解成「预测排名跟真实排名的吻合度」。联合配置在沪深 300 上的 IC 是 0.0532。它不是收益率，不是胜率，也不是准确率——就是一个约 0.05 的相关系数，别当成 5% 收益去读。在量化圈，IC 能稳定在 0.05 以上算有信息量，但能不能真的赚钱，还得看换手频率、资金容量和真实交易成本。

另一个是年化收益率。同一个联合配置的历史回测年化是 14.21%。训练数据用 2008 到 2014 年的行情，验证用 2015 到 2016 年，测试用 2017 年初到 2020 年 8 月。注意，IC 和年化是两条线上的东西——IC 讲的是「预测有多准」，年化讲的是「在历史上能赚多少」，中间还隔着你怎么建投资组合、怎么做交易。

论文里那句「约两倍」也有前提。它比的是两个传统静态公式库：Alpha158 年化 5.70%，Alpha360 年化 4.38%。14.21% 大概是它俩的两倍——不是「吊打所有模型两倍」。换一套已经在实盘跑了两年的公式组合来比，这个倍数就不一定了。还有个更容易被顺手拼上去的数字：14.61%。那是另一套配置跑出来的，它的 IC 是 0.0489。**最高 IC 和最高年化不在同一行**，谁把它们焊成「又准又赚的同一套系统」就是读错了表。

## 团队自己也知道，搭了两道防线

回到卷子的问题。团队自己也清楚这个风险，搭了两道防线。一是让 AI 看数据时只看结构不看具体数值——就像只看试卷的题型分布，看不到题目本身。二是 v2 版本补上了中证 500 和纳斯达克 100，把测试窗口往后推到 2024–2025 年，这段时间已经接近甚至超过 AI 训练数据的截止日期了。这两条能缓解一部分担忧，但**缓解不等于消除**。真想放心用，更稳的做法是留一份从没进过循环的最终数据，或者直接拿真金白银做前向实盘验证。

数据这头还有几个没盖住的洞。底层引擎 Qlib 技术上能做退市处理、调仓剔除，但论文没给出这次实验实际用的股票成分股清单，只能说「有能力处理」、不能说「已经消除」。交易成本是显式建了的——买入收 0.05%、卖出收 0.15%、每笔最低 5 块——可真实交易里还有两样东西没建模：市场冲击（你下的单太大，会把价格推开）和容量约束（策略规模上去后，能成交的量会缩）。

## 想自己跑一遍

想自己动手跑的话，源码留了三个可以人为干预的入口，时间窗要配在 `.env` 文件里——直接改配置文件是不生效的，这在官方 Issue 1319 里有记录。官方也写着：这套工具不能直接拿去做金融投资，不替代专业人员。

装起来跑一遍：

```bash
docker run hello-world              # 确认 Docker 免 sudo
conda create -n rdagent python=3.10 # 建独立环境
conda activate rdagent              # 进环境
pip install rdagent                 # 装包
# 在 .env 里配好 CHAT_MODEL、EMBEDDING_MODEL 和 API key
rdagent health_check                # 查依赖和 Docker
rdagent fin_quant                   # 启动，会产生付费模型调用
```

几个前提：官方目前只承诺 Linux；Python 3.10 或 3.11；多数场景要能免 sudo 跑 Docker。第一次跑会自动下载沪深市场日频数据、准备 Docker 环境。

跑完之后，看着那份 14.21% 的历史回测报告，剩下的是四个问题：这份数据在当时真的拿得到吗？test 已经被循环读过几遍？成本、容量和成交假设能不能扛住真实市场？这条回测曲线够不够格进入模拟盘、前向验证和风控审批？

RD-Agent 没有证明 AI 已经会替你赚钱。它证明的是另一件事：量化研发里大量「提一个设想、写代码、跑失败、再改」的力气活，已经能被塞进一个自动转的循环里。等实验本身变便宜了，**贵的那部分就换成了判断**。

## 主要来源

- arXiv 论文：Yuante Li 等《R&D-Agent-Quant: A Multi-Agent Framework for Data-Centric Factors and Model Joint Optimization》（arXiv:2505.15155 v2，NeurIPS 2025 接收，Poster 121804）
- 微软 RD-Agent 官方仓库（GitHub）：README、Legal Disclaimer（含 `fin_quant` 入口、Figure 11 成本图、附录 C.4.2 交易成本配置）
- 微软研究院：RD-Agent(Q) 论文页
- RD-Agent 官方文档：Finance Quant Agent 量化场景快速上手（quant_agent_fin）
- 官方 GitHub Issue #1319：`fin_quant` 时间窗应通过 `.env` 配置，改 YAML 不生效
- Cynthia Dwork 等：《Generalization in Adaptive Data Analysis and Holdout Reuse》
