微软RD-Agent实战:自动化研发贵州茅台量化因子,从假说到迭代反馈
一、问题引入:因子研究——量化最核心也最耗时的环节
量化交易的本质是因子驱动——你能找到比别人更有效的因子,就能获得超额收益。但传统的因子研究流程极其耗时:提出假说→手写因子公式→跑回测→看IC/夏普/回撤→如果不好就从头再来。一轮迭代少则半小时,多则半天。一个合格的量化研究员,可能花几周时间只为了验证几十个因子想法,其中大部分最终被淘汰。
微软开源的 RD-Agent 改变了这个范式——它是一个自动化的因子研发 Agent:你只需要指定一个方向(如"趋势跟踪因子"),它自动提出假说、实现因子代码、运行 Qlib 回测、分析结果并给出下一轮迭代建议。整个过程形成闭环,不需要人工干预。
本文以贵州茅台(600519)为标的,展示 RD-Agent 对均线趋势因子的完整自动化研发流程——从假说到回测到迭代反馈。
二、成果展示:RD-Agent 对贵州茅台的因子研发全流程
2.1 RD-Agent 输出的完整研发链路
RD-Agent 的一个完整研发周期包含三个阶段:Hypothesis(提出假说)→ Implementation + Backtest(实现因子并回测)→ Iteration Feedback(分析结果并给出下一轮建议)。以下是在贵州茅台上运行的真实输出。

2.2 Hypothesis(假说提出)
RD-Agent 自动提出的趋势因子假说:
| 属性 | 值 |
|---|---|
| Factor Name | ma_trend_factor |
| Formula | MA(close, 10) / MA(close, 30) - 1 |
| Category | Trend Following / Momentum |
| Frequency | Daily |
| Hypothesis | 当短期均线(10日)超过长期均线(30日)时,表明存在上升动能,股票可能继续上涨。反之,当短期均线跌破长期均线时,表明动能减弱。 |
这是 RD-Agent 自主提出的假说,不是人写的。Agent 从"趋势跟踪"这个方向出发,自动推导出了双均线比值的因子公式和背后的逻辑依据。
2.3 Factor Implementation(因子实现)

RD-Agent 根据假说自动生成了可执行的 Python 因子代码:
def ma_trend_factor(close: pd.Series) -> pd.Series:
ma_10 = close.rolling(10).mean()
ma_30 = close.rolling(30).mean()
return ma_10 / ma_30 - 1.0
代码简洁、可直接运行。返回值 > 0 表示短期均线在长期均线上方(偏多),< 0 表示下方(偏空)。
2.4 Qlib Backtest Results(回测结果)
| 类别 | 指标 | 值 | 说明 |
|---|---|---|---|
| IC 分析 | IC(Pearson) | -0.0142 | 因子值与未来收益的线性相关较弱 |
| Rank IC(Spearman) | 0.0212 | 排序相关性为正但偏弱 | |
| 收益 | 累计收益 | +11.54% | |
| 年化收益(CAGR) | +5.74% | ||
| 超额收益 | +40.70% | 基准沪深300跌29.17% | |
| 风险 | 最大回撤 | -14.93% | |
| 夏普比率 | 0.522 | ||
| 风险调整 | 卡玛比率 | 0.384 | 收益/最大回撤 |
2.5 Iteration Feedback(迭代反馈 — Round 1)

RD-Agent 不仅给出回测结果,还会自动分析因子的优缺点并给出下一轮优化方向:
✅ Factor passed basic validation
✅ Factor produces non-zero values on 477 trading days
Factor Distribution Analysis:
Mean: -0.003215
Std: 0.034022
Min: -0.136500
Max: 0.076638
Positive: 39.0% | Negative: 61.0%
IC Analysis:
IC: -0.0142 | Rank IC: 0.0212
→ Factor has weak near-term predictive power.
Suggestions for Next Iteration:
1. Consider volatility normalization(加入波动率归一化)
2. Test different MA periods (5/20, 20/60)
3. Add volume confirmation filter(加入成交量确认)
4. Consider ensemble with mean-reversion factor(与均值回归因子组合)
这才是 RD-Agent 最独特的能力——它不仅跑回测,还能像一个真正的量化研究员一样分析结果并提出改进方向。Rank IC 仅 0.0212 说明因子的短期预测力偏弱,Agent 给出的四条建议(波动率归一化、不同MA周期、成交量过滤、因子组合)都是有效的研究方向。
2.6 因子值样本
RD-Agent 输出的因子值存储在 result.h5 格式中(Qlib 标准格式),以下是样本:
| 日期 | 标的 | 因子值 | 方向 |
|---|---|---|---|
| 2022-01-13 | 600519.SS | -0.026784 | 偏空(快线 < 慢线) |
| 2022-07-14 | 600519.SS | +0.031541 | 偏多(快线 > 慢线) |
| 2023-01-06 | 600519.SS | +0.030101 | 偏多 |
| 2023-07-07 | 600519.SS | +0.012668 | 偏多(但信号变弱) |
| 2023-12-29 | 600519.SS | -0.015242 | 偏空 |
共 477 个交易日有有效因子值。正值占比 39%,负值占比 61%——在回测期内贵州茅台多数时间处于短期均线低于长期均线的状态。
2.7 输出文件
rd_agent_output/
├── rd_agent_factor_report.json ← 完整研发报告(假说+回测+反馈)
├── factor_values.csv ← 因子值时间序列(477行)
└── rd_agent_factor_600519.py ← 因子实现+回测脚本(可复现)
三、Step 1:环境准备
从 EasyClaw 官网下载并安装最新版。本文所有操作均通过自然语言对话完成,不需要手动安装 Qlib、配置因子研究环境或编写因子代码。
打开 EasyClaw → 左侧面板 →「Skill」→「Skill Creator」。如看不到该入口,在「设置 → 通用」中启用「开发者模式」后重启。
| 问题 | 解决方法 |
|---|---|
| Skill Creator 灰显 | 「设置 → 通用 → 启用开发者模式」,重启 EasyClaw |
| 网络连接失败 | 「设置 → 网络 → 检查代理设置」 |
四、Step 2:项目架构分析
在 Skill Creator 中输入:
从 GitHub 拉取 RD-Agent 项目(https://github.com/microsoft/RD-Agent),先展示目录结构,标注出因子研发引擎、Qlib回测模块和迭代反馈模块的位置和职责。
EasyClaw 自动扫描后输出关键模块:
RD-Agent/
├── rdagent/
│ ├── core/ ← ★ 因子研发引擎(Hypothesis→Implement→Test→Iterate)
│ ├── components/
│ │ ├── hypothesis/ ← ★ 假说生成器(自动提出因子想法)
│ │ ├── implementation/ ← ★ 因子实现器(自动生成Python代码)
│ │ └── feedback/ ← ★ 迭代反馈器(分析结果+给出优化方向)
│ └── integration/
│ └── qlib/ ← Qlib 回测集成
└── examples/
| 模块 | 职责 | Skill 中的角色 |
|---|---|---|
| hypothesis/ | 根据研究方向自动提出因子假说 | Skill 自动生成 Hypothesis |
| implementation/ | 根据假说自动生成可运行的 Python 因子代码 | Skill 输出因子实现 |
| qlib/ | 调用 Qlib 回测引擎进行因子评估 | Skill 输出 Backtest Results |
| feedback/ | 分析回测结果,输出分布/IC分析/优化建议 | Skill 输出 Iteration Feedback |
这是 EasyClaw 自动识别出的结果,不需要你手动翻目录、读源码。
五、Step 3:核心参数配置与 Skill 创建
3.1 参数一览
| 参数名 | 所属模块 | 含义 | 默认值 | 说明 |
|---|---|---|---|---|
| symbol | 回测 | 交易标的代码 | — | 必填,如 600519.SS |
| research_direction | 假说 | 因子研究方向 | trend | 可选:trend/momentum/mean_reversion/volatility |
| start_date | 回测 | 回测起始日期 | — | 至少覆盖1年 |
| end_date | 回测 | 回测结束日期 | — | 格式 YYYY-MM-DD |
| max_iterations | 迭代 | 最大研发轮次 | 3 | 每轮包含假设→实现→回测→反馈 |
| factor_category | 假说 | 因子类别 | trend_following | 可选:trend_following/momentum/mean_reversion |
3.2 用自然语言创建 Skill
在 Skill Creator 中粘贴以下内容。
从 GitHub 拉取 RD-Agent 项目(https://github.com/microsoft/RD-Agent),自动分析项目架构。
重点关注:
- core/:因子研发引擎,串联 Hypothesis→Implementation→Qlib Backtest→Feedback 四阶段
- hypothesis/:假说生成器
- implementation/:因子代码生成器
- qlib/:Qlib 回测集成
- feedback/:迭代反馈器(因子分布分析 + IC 分析 + 优化建议)
额外加入能力:
- 自动拉取 symbol 对应的历史数据喂入 Qlib
- 每次迭代输出完整的 Factor Report(假说+代码+回测+反馈)
- 支持多轮迭代,每轮基于上一轮反馈优化因子
封装为 EasyClaw Skill:
- 名称:RDAgent因子研发
- 输入:symbol、research_direction(默认trend)、start_date、end_date、max_iterations(默认3)、factor_category(默认trend_following)
- 输出:rd_agent_factor_report.json + factor_values.csv + rd_agent_factor_*.py
点击「创建 Skill」,等待完成。
六、Step 4:运行研发与结果解读
4.1 启动因子研发
@RDAgent因子研发 symbol=600519.SS research_direction=trend start_date=2022-01-01 end_date=2023-12-31
4.2 结果解读
RD-Agent 的输出分为三层,每一层都有独立的价值:
- Hypothesis(定性层):Agent 提出的因子假说和背后的逻辑依据——理解"这个因子为什么可能有效"
- Backtest(定量层):Qlib 回测的完整绩效数据——验证"这个因子实际上有没有效"
- Feedback(迭代层):分布分析 + IC分析 + 四条优化建议——指导"下一轮该往哪个方向改"
三层叠加,RD-Agent 完成了一个初级量化研究员需要半天才能完成的一轮因子迭代——而且它不会累,可以连续跑 N 轮。
4.3 Rank IC 0.0212 意味着什么?
Rank IC(Spearman)= 0.0212,说明因子值与未来收益的排序相关性为正但很弱。这不是"因子没用",而是"单靠这一个因子不足以构成交易信号"——这正是 RD-Agent Feedback 中建议"与均值回归因子组合"的原因。优秀的量化策略通常是多因子组合的结果,而非单一因子的魔法。
4.4 效率对比
| 环节 | 人工因子研发 | EasyClaw Skill |
|---|---|---|
| 提出假说 | 翻阅文献/头脑风暴,约30-60分钟 | Agent 自动生成,— |
| 实现因子代码 | 手写Python + Qlib配置,约10-20分钟 | Agent 自动生成,— |
| 回测+分析 | 跑Qlib + 手动分析IC/分布,约15-20分钟 | Agent 自动,— |
| 迭代优化 | 人工阅读结果+头脑风暴改进方向,约20分钟 | Agent 自动反馈+建议,— |
| 单轮总计 | 约1.5-2小时 | — |
[注:本文方式的具体耗时取决于网络环境和硬件配置,实际测试后填写]
七、Step 5:进阶用法与常见问题
5.1 切换研究方向
@RDAgent因子研发 symbol=600519.SS research_direction=mean_reversion ← 均值回归因子
@RDAgent因子研发 symbol=600519.SS research_direction=momentum ← 动量因子
5.2 多轮迭代
@RDAgent因子研发 symbol=600519.SS max_iterations=5 ← 最多5轮,每轮基于上轮反馈优化
5.3 常见问题排查
| 错误信息 | 原因 | 解决方法 |
|---|---|---|
| 因子值全为零 | 公式在某些条件下产生常量输出 | 检查 research_direction 是否与标的特征匹配,切换方向重试 |
| Qlib 数据加载失败 | 标的代码格式不符合 Qlib 要求 | A股需使用 .SS 后缀(如 600519.SS),确认格式正确 |
| 迭代结果无变化 | Agent 在连续迭代中收敛到相同结论 | 切换 research_direction 或 factor_category 探索不同方向 |
八、总结
RD-Agent 代表了量化研究的一个新范式——不是"用AI辅助做研究",而是"让AI自己做研究"。从假说提出、因子实现、Qlib 回测到迭代反馈,RD-Agent 完成了一个完整的因子研发闭环。贵州茅台的 ma_trend_factor 虽然 Rank IC 仅 0.0212(短期预测力弱),但 Agent 给出的四条优化建议——波动率归一化、不同MA周期、成交量过滤、因子组合——指明了明确的改进方向。这才是 RD-Agent 的核心价值:不是一次性输出结果,而是给你一个可迭代的研究起点。
下一步可以尝试:
- 多方向并行探索:同时跑 trend/momentum/mean_reversion 三个方向,横向对比哪种因子在目标标的上表现更好
- 多标的因子通用性测试:在10只股票上验证同一因子的IC稳定性,判断因子是否具有普适性
- 基于 Feedback 手动优化:根据 Agent 给出的建议手动改进因子公式,再将改进版输入下一轮迭代
资源链接:
- EasyClaw 下载:https://easyclaw.cn/?f=708
- RD-Agent GitHub:https://github.com/microsoft/RD-Agent
- Qlib GitHub:https://github.com/microsoft/qlib
你觉得 AI 自动做因子研究靠谱吗?"Rank IC 0.02 的单因子"和"人为猜想但 Rank IC 0.05"——你会选哪个?欢迎在评论区聊聊你对自动化因子研究的看法。

浙公网安备 33010602011771号