# 量化交易 RD-Agent/Qlib 实战指南
## 前言
在人工智能快速发展的今天,量化投资领域正经历着一场深刻的变革。微软研究院开源的 **Qlib** 和 **RD-Agent** 两大项目,为量化交易提供了从数据处理到策略自动演化的完整解决方案。
- **Qlib**: AI 驱动的量化投资平台,37.5k+ Stars
- **RD-Agent**: LLM 驱动的 R&D 自动化框架,11.2k+ Stars,NeurIPS 2025 论文
本文将深入剖析这两个项目,从架构设计到实战应用,助你掌握 AI 量化交易的完整技术栈。
---
## 第一章:项目概览与核心价值
### 1.1 Qlib - AI 量化投资全流程平台
Qlib 是微软开源的 AI 面向量化投资平台,旨在将 AI 技术从研究探索延伸到生产部署的完整生命周期。
```
┌─────────────────────────────────────────────────────────────────┐
│ Qlib 平台架构 │
├─────────────────────────────────────────────────────────────────┤
│ 📊 数据层 │ 🤖 模型层 │ 📈 策略层 │ 📋 分析层 │
│ ───────────── │ ───────────── │ ───────────── │ ──────── │
│ 高性能数据存储 │ 20+ 预置模型 │ 组合优化 │ 信号分析 │
│ Alpha158/360 │ GBDT/DL/RL │ 回测引擎 │ 风险评估 │
│ 中/美市场支持 │ AutoML支持 │ 执行模拟 │ 报告生成 │
└─────────────────────────────────────────────────────────────────┘
```
**核心特性**:
| 特性 | 说明 |
|------|------|
| 全流程 ML Pipeline | 数据处理 → 模型训练 → 回测分析 |
| 多学习范式 | 监督学习、强化学习、元学习 |
| 高性能数据引擎 | 自研 `.bin` 格式,优化金融数据访问 |
| 丰富模型库 | LightGBM、LSTM、Transformer 等 20+ 模型 |
| RD-Agent 集成 | LLM 驱动的自动化因子挖掘 |
### 1.2 RD-Agent - LLM 驱动的研发自动化
RD-Agent 是一个将 LLM 应用于数据科学研发自动化的框架,其量化金融版本 **RD-Agent(Q)** 是首个实现因子-模型联合优化的多智能体系统。
```
┌──────────────────────────────────────────────────────────────────┐
│ RD-Agent(Q) 核心能力 │
├──────────────────────────────────────────────────────────────────┤
│ 🔬 研究 (Research) │ 🛠️ 开发 (Development) │
│ ──────────────── │ ────────────────── │
│ • 读取研报/论文 │ • 代码实现 (Co-STEER) │
│ • 提取关键公式 │ • 因子/模型开发 │
│ • 生成创新假设 │ • 自动化回测 │
│ • 知识森林构建 │ • 反馈分析迭代 │
└──────────────────────────────────────────────────────────────────┘
```
**量化应用场景**:
| 场景 | 命令 | 说明 |
|------|------|------|
| 💰 自动量化工厂 | `rdagent fin_quant` | 因子-模型联合演化 |
| 📊 因子演化 | `rdagent fin_factor` | 仅优化因子库 |
| 🤖 模型演化 | `rdagent fin_model` | 仅优化模型结构 |
| 📄 研报因子提取 | `rdagent fin_factor_report` | 从研报提取因子 |
| 🏆 Kaggle 竞赛 | `rdagent data_science` | 自动特征工程 |
### 1.3 两者关系与集成
```
┌─────────────────┐
│ RD-Agent │
│ (大脑: LLM) │
└────────┬────────┘
│ 生成因子/模型代码
▼
┌────────────────────────────────────────────────────────────┐
│ Qlib 平台 │
├─────────────┬─────────────┬─────────────┬──────────────────┤
│ 数据服务 │ 模型训练 │ 回测引擎 │ 策略执行 │
│ (CSI 300) │ (LightGBM) │ (TopkDrop) │ (模拟器) │
└─────────────┴─────────────┴─────────────┴──────────────────┘
│
▼
┌─────────────────┐
│ 性能指标反馈 │
│ IC/ARR/MDD/IR │
└─────────────────┘
```
---
## 第二章:Qlib 深度解析
### 2.1 架构设计
Qlib 采用分层模块化架构,各层松耦合,可独立扩展:
```
┌─────────────────────────────────────────────────────────────────┐
│ 接口层 (Interface) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ 分析器 │ │ 可视化 │ │ 实验管理 (Recorder) │ │
│ └─────────────┘ └─────────────┘ └─────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 工作流层 (Workflow) │
│ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌───────────────┐ │
│ │ 信息提取 │ │ 预测模型 │ │ 决策生成 │ │ 执行环境 │ │
│ └───────────┘ └───────────┘ └───────────┘ └───────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 学习框架层 (Learning Framework) │
│ ┌───────────────────┐ ┌───────────────────────────┐ │
│ │ 预测模型 │ │ 交易智能体 (RL) │ │
│ │ (Supervised) │ │ (Reinforcement) │ │
│ └───────────────────┘ └───────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ 基础设施层 (Infrastructure) │
│ ┌───────────────────────┐ ┌───────────────────────────┐ │
│ │ Data Server │ │ Trainer │ │
│ │ (高性能数据服务) │ │ (分布式训练) │ │
│ └───────────────────────┘ └───────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
### 2.2 数据系统
#### 2.2.1 数据格式
Qlib 使用自研的二进制格式存储金融数据,针对时序数据访问进行了深度优化:
```
~/.qlib/qlib_data/cn_data/
├── calendars/ # 交易日历
│ └── day.txt
├── instruments/ # 股票池定义
│ └── csi300.txt
├── features/ # 特征数据 (.bin 格式)
│ └── sh600000/
│ ├── close.day.bin
│ ├── open.day.bin
│ ├── high.day.bin
│ ├── low.day.bin
│ ├── volume.day.bin
│ └── factor.day.bin # 复权因子
└── financial/ # 财务数据
```
#### 2.2.2 数据下载
```bash
# 下载 A 股数据 (1 天频率)
python scripts/get_data.py qlib_data \
--target_dir ~/.qlib/qlib_data/cn_data \
--region cn
# 下载美股数据
python scripts/get_data.py qlib_data \
--target_dir ~/.qlib/qlib_data/us_data \
--region us
```
#### 2.2.3 特征工程:Alpha158/Alpha360
Qlib 内置两大特征集:
| 特征集 | 维度 | 说明 |
|--------|------|------|
| **Alpha158** | 158 维 | 经典技术因子,适合日频策略 |
| **Alpha360** | 360 维 | 扩展技术因子,更丰富的时序特征 |
```python
from qlib.contrib.data.handler import Alpha158
data_handler_config = {
"start_time": "2008-01-01",
"end_time": "2020-08-01",
"fit_start_time": "2008-01-01",
"fit_end_time": "2014-12-31",
"instruments": "csi300",
}
handler = Alpha158(**data_handler_config)
features = handler.fetch(col_set="feature") # 获取特征
labels = handler.fetch(col_set="label") # 获取标签
```
### 2.3 模型库
Qlib 内置 20+ 量化模型,覆盖传统机器学习和深度学习:
#### 2.3.1 梯度提升模型
| 模型 | 框架 | 说明 |
|------|------|------|
| LightGBM | LightGBM | 默认推荐,速度快 |
| XGBoost | XGBoost | 经典 GBDT |
| CatBoost | CatBoost | 类别特征友好 |
| DoubleEnsemble | LightGBM | ICDM 2020,动态加权 |
#### 2.3.2 深度学习模型
| 模型 | 类型 | 论文 |
|------|------|------|
| LSTM | RNN | Neural Computation 1997 |
| GRU | RNN | 2014 |
| ALSTM | Attention LSTM | IJCAI 2017 |
| GATs | 图注意力 | 2017 |
| Transformer | 注意力 | NeurIPS 2017 |
| TCN | 时序卷积 | 2018 |
| TFT | 时序融合 | Int. Journal of Forecasting 2019 |
| TabNet | 表格网络 | AAAI 2019 |
| HIST | 超图网络 | 2021 |
| TRA | 时序关系注意力 | KDD 2021 |
#### 2.3.3 模型训练示例
```python
import qlib
from qlib.contrib.model.gbdt import LGBModel
from qlib.contrib.data.handler import Alpha158
from qlib.data.dataset import DatasetH
from qlib.workflow import R
from qlib.utils import init_instance_by_config, flatten_dict
# 初始化 Qlib
qlib.init(provider_uri='~/.qlib/qlib_data/cn_data', region='cn')
# 任务配置
task = {
"model": {
"class": "LGBModel",
"module_path": "qlib.contrib.model.gbdt",
"kwargs": {
"loss": "mse",
"learning_rate": 0.0421,
"max_depth": 8,
"num_leaves": 210,
"colsample_bytree": 0.8879,
"subsample": 0.8789,
"lambda_l1": 205.6999,
"lambda_l2": 580.9768,
},
},
"dataset": {
"class": "DatasetH",
"module_path": "qlib.data.dataset",
"kwargs": {
"handler": {
"class": "Alpha158",
"module_path": "qlib.contrib.data.handler",
"kwargs": {
"start_time": "2008-01-01",
"end_time": "2020-08-01",
"fit_start_time": "2008-01-01",
"fit_end_time": "2014-12-31",
"instruments": "csi300",
},
},
"segments": {
"train": ("2008-01-01", "2014-12-31"),
"valid": ("2015-01-01", "2016-12-31"),
"test": ("2017-01-01", "2020-08-01"),
},
},
},
}
# 训练模型
model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"])
with R.start(experiment_name="lightgbm_alpha158"):
R.log_params(**flatten_dict(task))
model.fit(dataset)
# 预测
pred = model.predict(dataset)
print(pred.head())
```
### 2.4 回测系统
#### 2.4.1 策略配置
Qlib 内置 **TopkDropoutStrategy** 策略:
```yaml
strategy:
class: TopkDropoutStrategy
module_path: qlib.contrib.strategy.strategy
kwargs:
topk: 50 # 持仓股票数
n_drop: 5 # 每日换仓数
signal: <PRED> # 预测信号
```
**算法逻辑**:
1. 按预测分数排序所有股票
2. 统计当前持仓中排名超出 topk 的股票数 d
3. 卖出 d 只表现最差的持仓股票
4. 买入 d 只表现最好的非持仓股票
5. 换手率 ≈ 2 × n_drop / topk
#### 2.4.2 交易所配置
```yaml
backtest:
start_time: 2017-01-01
end_time: 2020-08-01
account: 100000000 # 初始资金 1 亿
benchmark: SH000300 # 沪深300 作为基准
exchange_kwargs:
limit_threshold: 0.095 # 涨跌停阈值 9.5%
deal_price: close # 收盘价成交
open_cost: 0.0005 # 买入佣金 0.05%
close_cost: 0.0015 # 卖出佣金 0.15%
min_cost: 5 # 最低佣金 5 元
```
#### 2.4.3 完整回测示例
```python
from qlib.contrib.evaluate import backtest_daily, risk_analysis
from qlib.contrib.strategy import TopkDropoutStrategy
# 假设 pred_score 是模型预测分数
strategy_config = {
"topk": 50,
"n_drop": 5,
"signal": pred_score,
}
strategy = TopkDropoutStrategy(**strategy_config)
# 执行回测
report_normal, positions_normal = backtest_daily(
start_time="2017-01-01",
end_time="2020-08-01",
strategy=strategy,
)
# 风险分析
analysis = {}
analysis["excess_return_without_cost"] = risk_analysis(
report_normal["return"] - report_normal["bench"]
)
analysis["excess_return_with_cost"] = risk_analysis(
report_normal["return"] - report_normal["bench"] - report_normal["cost"]
)
# 输出结果
import pandas as pd
print(pd.concat(analysis))
```
**输出示例**:
```
risk
mean 0.000708
std 0.005626
annualized_return 0.178316
information_ratio 1.996555
max_drawdown -0.081806
```
### 2.5 一键运行:qrun
Qlib 提供命令行工具 `qrun`,一键执行完整工作流:
```bash
# 使用 YAML 配置文件运行
cd examples
qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
```
**完整配置文件示例**:
```yaml
# workflow_config.yaml
qlib_init:
provider_uri: "~/.qlib/qlib_data/cn_data"
region: cn
market: &market csi300
benchmark: &benchmark SH000300
data_handler_config: &data_handler_config
start_time: 2008-01-01
end_time: 2020-08-01
fit_start_time: 2008-01-01
fit_end_time: 2014-12-31
instruments: *market
port_analysis_config: &port_analysis_config
strategy:
class: TopkDropoutStrategy
module_path: qlib.contrib.strategy.strategy
kwargs:
topk: 50
n_drop: 5
signal: <PRED>
backtest:
start_time: 2017-01-01
end_time: 2020-08-01
account: 100000000
benchmark: *benchmark
exchange_kwargs:
limit_threshold: 0.095
deal_price: close
open_cost: 0.0005
close_cost: 0.0015
min_cost: 5
task:
model:
class: LGBModel
module_path: qlib.contrib.model.gbdt
kwargs:
loss: mse
colsample_bytree: 0.8879
learning_rate: 0.0421
subsample: 0.8789
lambda_l1: 205.6999
lambda_l2: 580.9768
max_depth: 8
num_leaves: 210
num_threads: 20
dataset:
class: DatasetH
module_path: qlib.data.dataset
kwargs:
handler:
class: Alpha158
module_path: qlib.contrib.data.handler
kwargs: *data_handler_config
segments:
train: [2008-01-01, 2014-12-31]
valid: [2015-01-01, 2016-12-31]
test: [2017-01-01, 2020-08-01]
record:
- class: SignalRecord
module_path: qlib.workflow.record_temp
- class: PortAnaRecord
module_path: qlib.workflow.record_temp
kwargs:
config: *port_analysis_config
```
---
## 第三章:RD-Agent 深度解析
### 3.1 核心理念:R&D 循环
RD-Agent 将机器学习工程 (MLE) 过程形式化为 **研究 (Research) - 开发 (Development)** 双循环:
```
┌─────────────────────────────────────────────────────────────────┐
│ R&D 循环 │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ RESEARCH │ │ DEVELOPMENT │ │
│ │ (研究阶段) │──────────────▶│ (开发阶段) │ │
│ │ │ │ │ │
│ │ • 假设生成 │ │ • 代码实现 │ │
│ │ • 想法提案 │ │ • 实验执行 │ │
│ │ • 知识提取 │ │ • 反馈分析 │ │
│ └─────────────────┘ └─────────────────┘ │
│ ▲ │ │
│ │ │ │
│ └────────────────────────────────┘ │
│ 迭代优化 │
└─────────────────────────────────────────────────────────────────┘
```
### 3.2 五大功能单元
RD-Agent(Q) 将量化研究分解为五个协同工作的功能单元:
```
┌─────────────────────────────────────────────────────────────────┐
│ RD-Agent(Q) 系统架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌───────────────┐ │
│ │ 规格单元 (S) │ S = (B, D, F, M) │
│ │ Specification │ • B: 背景假设与先验知识 │
│ └───────┬───────┘ • D: 市场数据接口 │
│ │ • F: 期望输出格式 │
│ │ • M: 外部执行环境 (Qlib) │
│ ▼ │
│ ┌───────────────┐ │
│ │ 综合单元 │ • 知识森林构建 │
│ │ Synthesis │ • 假设生成 h^(t+1) = G(H_t^a, F_t^a) │
│ └───────┬───────┘ • 维护 SOTA 集合 │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ 实现单元 │ Co-STEER (协同调度与任务执行引擎) │
│ │ Implementation│ • 思维链推理 │
│ └───────┬───────┘ • DAG 任务调度 │
│ │ • 知识库 K 记录 (任务, 代码, 反馈) │
│ ▼ │
│ ┌───────────────┐ │
│ │ 验证单元 │ • Qlib 回测集成 │
│ │ Validation │ • 去重 (IC_max 阈值 0.99) │
│ └───────┬───────┘ • 性能评估 │
│ │ │
│ ▼ │
│ ┌───────────────┐ │
│ │ 分析单元 │ • 8 维性能向量评估 │
│ │ Analysis │ • 上下文汤普森采样 │
│ └───────────────┘ • 因子/模型方向选择 │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 3.3 Co-STEER:代码生成引擎
**Co-STEER** (Collaborative Scheduling and Task Execution Engine) 是 RD-Agent 的核心代码生成引擎:
```
┌─────────────────────────────────────────────────────────────────┐
│ Co-STEER 工作流程 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 输入: 假设 H │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ 1. 任务分解 (DAG 构建) │ │
│ │ 输入 → 复杂度评估 → 拓扑排序 π_s │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ 2. 代码生成 (思维链推理) │ │
│ │ 任务 → 检索相似实现 → 生成代码 │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ 3. 执行与验证 │ │
│ │ Docker/Conda 环境 → 运行 → 获取结果 │ │
│ └──────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────────────────────────────┐ │
│ │ 4. 反馈与知识积累 │ │
│ │ 成功: 存入知识库 K │ │
│ │ 失败: 调整复杂度 α_j → 重试 │ │
│ └──────────────────────────────────────────┘ │
│ │
│ 输出: 可运行代码 + 性能指标 │
│ │
└─────────────────────────────────────────────────────────────────┘
```
**关键特性**:
- **88.9%** 执行成功率 (vs 73.3% few-shot baseline)
- **自适应复杂度评分**:优先执行简单任务
- **终身知识积累**:成功经验持续存入知识库
### 3.4 因子-模型联合优化
RD-Agent(Q) 的核心创新是 **因子-模型联合优化**,通过上下文 Bandit 调度器在因子优化和模型优化之间动态切换:
#### 3.4.1 优化策略
```
┌─────────────────────────────────────────────────────────────────┐
│ 因子-模型联合优化 (交替优化) │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 时间步 t │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────┐ │
│ │ 状态向量 x_t ∈ R^8 │ │
│ │ [IC, ICIR, RankIC, RankICIR, │ │
│ │ ARR, IR, -MDD, SR] │ │
│ └─────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────┐ │
│ │ 上下文 Thompson 采样 │ │
│ │ │ │
│ │ For each action a ∈ {factor, model}: │ │
│ │ θ̃^(a) ~ N(μ^(a), (P^(a))^(-1)) │ │
│ │ r̂^(a) = θ̃^(a)^T x_t │ │
│ │ │ │
│ │ a_t = argmax_a r̂^(a) │ │
│ └─────────────────────────────────────────┘ │
│ │ │
│ ├─── a_t = factor ───▶ 执行因子演化 │
│ │ │
│ └─── a_t = model ────▶ 执行模型演化 │
│ │
└─────────────────────────────────────────────────────────────────┘
```
#### 3.4.2 三种演化模式
| 模式 | 命令 | 说明 |
|------|------|------|
| **R&D-Factor** | `rdagent fin_factor` | 固定模型,优化因子集 |
| **R&D-Model** | `rdagent fin_model` | 固定因子,优化模型 |
| **R&D-Agent(Q)** | `rdagent fin_quant` | 因子-模型联合演化 |
#### 3.4.3 实验性能对比
**CSI 300 数据集** (2008-2020):
| 配置 | IC | ICIR | Rank IC | ARR | IR | MDD |
|------|-----|------|---------|-----|-----|-----|
| R&D-Factor | 0.0497 | 0.393 | 0.0546 | 14.61% | 1.69 | -9.10% |
| R&D-Model | 0.0469 | 0.369 | 0.0546 | 10.09% | 1.45 | -6.94% |
| **R&D-Agent(Q)** | **0.0532** | **0.428** | **0.0556** | **14.21%** | **1.74** | **-7.40%** |
**与传统因子库对比**:
| 方法 | IC | ARR | 因子数量 |
|------|-----|-----|----------|
| Alpha 101 | 0.0417 | 5.51% | 101 |
| Alpha 158 | 0.0434 | 8.97% | 158 |
| Alpha 360 | 0.0406 | 7.73% | 360 |
| **R&D-Factor** | **0.0497** | **14.61%** | ~35 |
**关键发现**:
- **2x 年化收益** 提升对比传统因子库
- **70% 更少因子** (仅用 Alpha 158/360 的 ~22%)
- **成本低于 $10** (12 小时完整实验)
### 3.5 Bandit 调度器消融实验
| 调度策略 | IC | ARR | 有效循环数 |
|----------|-----|-----|-----------|
| Random | 0.0445 | 8.97% | 19 |
| LLM-based | 0.0476 | 10.09% | 20 |
| **Bandit (推荐)** | **0.0532** | **14.21%** | **24** |
---
## 第四章:环境搭建与快速入门
### 4.1 Qlib 安装
```bash
# 方式 1: pip 安装
pip install pyqlib
# 方式 2: 源码安装
pip install numpy cython
git clone https://github.com/microsoft/qlib.git
cd qlib
pip install -e .
# 方式 3: Docker
docker pull pyqlib/qlib_image_stable:stable
```
### 4.2 RD-Agent 安装
```bash
# 创建环境
conda create -n rdagent python=3.10
conda activate rdagent
# 安装 RD-Agent
pip install rdagent
# 开发者安装 (最新版)
git clone https://github.com/microsoft/RD-Agent.git
cd RD-Agent
make dev
```
### 4.3 LLM 后端配置
创建 `.env` 文件:
```bash
# OpenAI 配置
CHAT_MODEL=gpt-4o
EMBEDDING_MODEL=text-embedding-3-small
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_API_KEY=sk-your-key
# 或 DeepSeek 配置 (更经济)
CHAT_MODEL=deepseek/deepseek-chat
DEEPSEEK_API_KEY=sk-your-key
EMBEDDING_MODEL=litellm_proxy/BAAI/bge-m3
LITELLM_PROXY_API_BASE=https://api.siliconflow.cn/v1
```
**LLM 要求**:
- ChatCompletion 能力
- JSON mode 支持
- Embedding query 支持
### 4.4 Docker 配置 (RD-Agent 执行环境)
```bash
# 确保 Docker 可用 (无需 sudo)
docker run hello-world
# 如果需要非 root 访问
sudo usermod -aG docker $USER
# 重新登录生效
```
### 4.5 数据准备
```bash
# 下载 Qlib 数据
python scripts/get_data.py qlib_data \
--target_dir ~/.qlib/qlib_data/cn_data \
--region cn
# 验证数据
python -c "import qlib; qlib.init(provider_uri='~/.qlib/qlib_data/cn_data'); print('OK')"
```
---
## 第五章:实战案例
### 5.1 案例 1:Qlib 基础工作流
**目标**:使用 LightGBM + Alpha158 在 CSI 300 上训练模型并回测
```python
# 01_qlib_basic_workflow.py
import qlib
from qlib.utils import init_instance_by_config
from qlib.workflow import R
from qlib.workflow.record_temp import SignalRecord, PortAnaRecord
# 1. 初始化 Qlib
qlib.init(provider_uri="~/.qlib/qlib_data/cn_data", region="cn")
# 2. 配置
market = "csi300"
benchmark = "SH000300"
# 3. 任务配置
task = {
"model": {
"class": "LGBModel",
"module_path": "qlib.contrib.model.gbdt",
"kwargs": {
"loss": "mse",
"learning_rate": 0.05,
"max_depth": 8,
"num_leaves": 200,
"num_threads": 10,
},
},
"dataset": {
"class": "DatasetH",
"module_path": "qlib.data.dataset",
"kwargs": {
"handler": {
"class": "Alpha158",
"module_path": "qlib.contrib.data.handler",
"kwargs": {
"start_time": "2008-01-01",
"end_time": "2020-08-01",
"fit_start_time": "2008-01-01",
"fit_end_time": "2014-12-31",
"instruments": market,
},
},
"segments": {
"train": ("2008-01-01", "2014-12-31"),
"valid": ("2015-01-01", "2016-12-31"),
"test": ("2017-01-01", "2020-08-01"),
},
},
},
}
# 4. 初始化
model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"])
# 5. 训练与记录
with R.start(experiment_name="qlib_lightgbm_demo"):
# 训练
model.fit(dataset)
# 预测
pred = model.predict(dataset, segment="test")
# 保存模型
R.save_objects(model=model)
# 记录预测
sr = SignalRecord(model, dataset, R.get_recorder())
sr.generate()
print(f"预测完成,共 {len(pred)} 条记录")
print(pred.head())
```
**运行**:
```bash
python 01_qlib_basic_workflow.py
```
### 5.2 案例 2:完整回测流程
```python
# 02_full_backtest.py
import qlib
from qlib.contrib.evaluate import backtest_daily, risk_analysis
from qlib.contrib.strategy import TopkDropoutStrategy
qlib.init(provider_uri="~/.qlib/qlib_data/cn_data", region="cn")
# 假设已有预测分数 pred_score
# pred_score: pd.DataFrame, index=(datetime, instrument), columns=['score']
# 策略配置
strategy = TopkDropoutStrategy(
topk=50,
n_drop=5,
signal=pred_score,
)
# 回测
report, positions = backtest_daily(
start_time="2017-01-01",
end_time="2020-08-01",
strategy=strategy,
benchmark="SH000300",
)
# 分析
excess_return = report["return"] - report["bench"]
analysis_result = risk_analysis(excess_return)
print("=" * 50)
print("回测结果分析")
print("=" * 50)
print(f"年化收益率: {analysis_result['annualized_return']:.2%}")
print(f"信息比率: {analysis_result['information_ratio']:.2f}")
print(f"最大回撤: {analysis_result['max_drawdown']:.2%}")
print("=" * 50)
```
### 5.3 案例 3:RD-Agent 因子演化
```bash
# 启动因子演化 (约 6 小时)
rdagent fin_factor
# 查看日志目录
ls -la log/
```
**预期输出**:
```
log/
├── __session__/
│ ├── 0/
│ │ ├── 0_direct_exp_gen # 假设生成
│ │ ├── 1_coding # 代码实现
│ │ ├── 2_running # 回测执行
│ │ └── 3_feedback # 反馈分析
│ ├── 1/
│ └── ...
└── rdagent.log
```
### 5.4 案例 4:RD-Agent 因子-模型联合演化
```bash
# 完整因子-模型联合演化 (约 12 小时)
rdagent fin_quant
# 使用 Web UI 监控
rdagent ui --port 19899 --log-dir log/ --data-science
```
访问 http://localhost:19899 查看实时演化进度。
### 5.5 案例 5:从研报提取因子
```bash
# 准备研报目录
mkdir -p reports
# 将 PDF/Word 研报放入 reports/ 目录
# 提取因子
rdagent fin_factor_report --report-folder=reports/
```
### 5.6 案例 6:自定义模型配置
```python
# 03_custom_model.py
import qlib
from qlib.utils import init_instance_by_config
qlib.init(provider_uri="~/.qlib/qlib_data/cn_data", region="cn")
# 自定义 PyTorch 神经网络
custom_model_config = {
"class": "MLP",
"module_path": "qlib.contrib.model.pytorch_nn",
"kwargs": {
"d_feat": 6, # 输入特征维度 (6 个价格/量字段)
"hidden_size": 256,
"num_layers": 3,
"dropout": 0.1,
"n_epochs": 100,
"lr": 0.001,
"batch_size": 4096,
"early_stop": 10,
"loss": "mse",
"GPU": 0,
},
}
model = init_instance_by_config(custom_model_config)
print("模型创建成功:", model)
```
---
## 第六章:高级配置与优化
### 6.1 RD-Agent 配置参数
#### 6.1.1 基础配置 (QuantBasePropSetting)
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `evolving_n` | 10 | 演化迭代次数 |
| `action_selection` | "bandit" | 调度策略: bandit/llm/random |
| `train_start` | "2008-01-01" | 训练起始日期 |
| `train_end` | "2014-12-31" | 训练结束日期 |
| `valid_start` | "2015-01-01" | 验证起始日期 |
| `valid_end` | "2016-12-31" | 验证结束日期 |
| `test_start` | "2017-01-01" | 测试起始日期 |
#### 6.1.2 因子演化配置 (FactorCoSTEERSettings)
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `max_loop` | 10 | 最大实现循环次数 |
| `fail_task_trial_limit` | 20 | 失败任务重试上限 |
| `file_based_execution_timeout` | 3600 | 因子执行超时 (秒) |
| `coder_use_cache` | false | 启用代码缓存 |
#### 6.1.3 模型演化配置 (ModelCoSTEERSettings)
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `env_type` | "docker" | 执行环境: docker/conda |
| `max_loop` | 10 | 最大实现循环次数 |
| `running_timeout_period` | 600 | 模型执行超时 (秒) |
### 6.2 环境变量配置
```bash
# 导出配置
export QLIB_QUANT_EVOLVING_N=20
export QLIB_QUANT_ACTION_SELECTION="bandit"
export FACTOR_CoSTEER_MAX_LOOP=15
export MODEL_CoSTEER_ENV_TYPE="conda"
# 运行
rdagent fin_quant
```
### 6.3 Qlib 性能优化
#### 6.3.1 数据缓存
```python
# 启用数据缓存
qlib.init(
provider_uri="~/.qlib/qlib_data/cn_data",
region="cn",
redis_cache={
"host": "localhost",
"port": 6379,
}
)
```
#### 6.3.2 并行训练
```python
# 多线程配置
model_config = {
"class": "LGBModel",
"kwargs": {
"num_threads": 20, # CPU 核心数
}
}
```
#### 6.3.3 GPU 加速
```python
# PyTorch 模型 GPU 配置
nn_config = {
"class": "MLP",
"kwargs": {
"GPU": 0, # GPU ID
"batch_size": 8192,
}
}
```
---
## 第七章:性能评估指标
### 7.1 因子评估指标
| 指标 | 公式 | 说明 |
|------|------|------|
| **IC** | corr(pred, label) | 预测值与实际收益的相关系数 |
| **ICIR** | mean(IC) / std(IC) | IC 的时序稳定性 |
| **Rank IC** | spearman(pred, label) | 秩相关系数,抗异常值 |
| **Rank ICIR** | mean(RankIC) / std(RankIC) | Rank IC 稳定性 |
### 7.2 策略评估指标
| 指标 | 公式 | 说明 |
|------|------|------|
| **ARR** | (1+r)^252 - 1 | 年化收益率 |
| **IR** | mean(excess) / std(excess) × √252 | 信息比率 |
| **MDD** | max(peak - trough) / peak | 最大回撤 |
| **Calmar** | ARR / |MDD| | 卡玛比率 |
| **Sharpe** | (ARR - Rf) / σ | 夏普比率 |
### 7.3 回测输出解读
```python
# 典型输出
risk
mean 0.000708 # 日均超额收益
std 0.005626 # 日超额收益波动
annualized_return 0.178316 # 年化收益率 17.83%
information_ratio 1.996555 # 信息比率 2.0
max_drawdown -0.081806 # 最大回撤 8.18%
```
**评估标准**:
- **IR > 1.5**:优秀
- **IR > 2.0**:非常优秀
- **MDD < 10%**:风险可控
- **Calmar > 1.5**:风险调整后收益良好
---
## 第八章:最佳实践与注意事项
### 8.1 最佳实践
#### 8.1.1 数据准备
1. **使用 Point-in-Time 数据**:避免前视偏差
2. **定期更新数据**:设置 crontab 自动更新
3. **验证数据质量**:检查缺失值、异常值
```bash
# crontab 自动更新 (每日 18:00)
0 18 * * * python /path/to/update_qlib_data.py
```
#### 8.1.2 模型训练
1. **时间分割严格**:训练集 < 验证集 < 测试集
2. **使用早停**:避免过拟合
3. **交叉验证**:滚动窗口验证
```python
# 滚动验证配置
segments = {
"train": ("2008-01-01", "2012-12-31"),
"valid": ("2013-01-01", "2014-12-31"),
"test": ("2015-01-01", "2016-12-31"),
}
```
#### 8.1.3 RD-Agent 使用
1. **优先使用 Bandit 调度器**:性能最佳
2. **因子优化先行**:因子优化迭代更快
3. **监控成本**:LLM 调用约 $10/实验
4. **保存 Session**:支持断点续传
### 8.2 常见问题
#### Q1: 数据下载失败
```bash
# 使用社区数据源
# https://github.com/chenditc/investment_data/releases
wget https://github.com/chenditc/investment_data/releases/download/...
```
#### Q2: Docker 权限问题
```bash
# 添加用户到 docker 组
sudo usermod -aG docker $USER
# 重新登录
```
#### Q3: GPU 内存不足
```python
# 减小 batch_size
config = {
"kwargs": {
"batch_size": 1024, # 从 4096 减小
}
}
```
#### Q4: RD-Agent 执行超时
```bash
# 增加超时时间
export FACTOR_CoSTEER_FILE_BASED_EXECUTION_TIMEOUT=7200 # 2 小时
export MODEL_CoSTEER_RUNNING_TIMEOUT_PERIOD=1200 # 20 分钟
```
### 8.3 风险提示
1. **市场风险**:历史表现不代表未来收益
2. **过拟合风险**:注意样本外验证
3. **模型风险**:黑天鹅事件可能导致模型失效
4. **技术风险**:LLM 生成代码需人工审核
---
## 第九章:扩展与生态
### 9.1 Qlib 生态
| 组件 | 说明 |
|------|------|
| **Qlib** | 核心量化平台 |
| **Qlib-Contrib** | 社区贡献模型 |
| **RD-Agent** | LLM 驱动自动化 |
| **Qlib-MLflow** | 实验管理集成 |
### 9.2 相关论文
1. **Qlib**: Towards an AI-oriented Quantitative Investment Platform (arXiv:2009.11189)
2. **R&D-Agent-Quant**: Multi-Agent Factor-Model Co-Optimization (NeurIPS 2025, arXiv:2505.15155)
3. **DoubleEnsemble**: A New Ensemble Method (ICDM 2020)
4. **TCTS**: Time-Contrastive Pretraining (ICML 2021)
### 9.3 社区资源
- **GitHub**: https://github.com/microsoft/qlib
- **文档**: https://qlib.readthedocs.io
- **RD-Agent**: https://github.com/microsoft/RD-Agent
- **数据源**: https://github.com/chenditc/investment_data
---
## 第十章:总结与展望
### 10.1 核心要点
| 项目 | 核心价值 | 最佳场景 |
|------|----------|----------|
| **Qlib** | 全流程量化平台 | 传统 ML/DL 策略研发 |
| **RD-Agent** | LLM 驱动自动化 | 因子挖掘、策略创新 |
### 10.2 技术栈总结
```
┌─────────────────────────────────────────────────────────────────┐
│ 量化交易技术栈 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 应用层 │ │
│ │ 因子挖掘 │ 模型训练 │ 策略回测 │ 风险分析 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ AI 层 │ │
│ │ RD-Agent (LLM) │ GBDT │ Deep Learning │ RL │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 平台层 │ │
│ │ Qlib (数据处理、回测引擎) │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ 数据层 │ │
│ │ 高性能存储 (.bin) │ Alpha158/360 特征 │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
### 10.3 未来展望
1. **RD-Agent 持续进化**:支持更多 LLM 后端,优化成本
2. **Qlib 新模型集成**:Transformer 变体、图神经网络
3. **端到端学习**:BPQP (BackPropagation through Quadratic Programming)
4. **实盘集成**:券商 API 对接
---
## 附录:快速参考卡片
### Qlib 常用命令
```bash
# 数据下载
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# 一键运行工作流
qrun workflow_config.yaml
# Jupyter 示例
jupyter notebook examples/workflow_by_code.ipynb
```
### RD-Agent 常用命令
```bash
# 因子-模型联合演化
rdagent fin_quant
# 仅因子演化
rdagent fin_factor
# 仅模型演化
rdagent fin_model
# 研报因子提取
rdagent fin_factor_report --report-folder=reports/
# Web UI 监控
rdagent ui --port 19899 --log-dir log/
```
### 关键配置模板
```yaml
# 最小工作流配置
qlib_init:
provider_uri: "~/.qlib/qlib_data/cn_data"
region: cn
task:
model:
class: LGBModel
module_path: qlib.contrib.model.gbdt
dataset:
class: DatasetH
module_path: qlib.data.dataset
kwargs:
handler:
class: Alpha158
module_path: qlib.contrib.data.handler
segments:
train: [2008-01-01, 2014-12-31]
valid: [2015-01-01, 2016-12-31]
test: [2017-01-01, 2020-08-01]
```
---
**参考资料**:
- Qlib GitHub: https://github.com/microsoft/qlib
- RD-Agent GitHub: https://github.com/microsoft/RD-Agent
- Qlib 论文: arXiv:2009.11189
- RD-Agent-Quant 论文: arXiv:2505.15155 (NeurIPS 2025)
---
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!