Alpha-R1 是一个面向量化 Alpha 筛选的推理增强型 LLM,基于 Qwen3-8B 通过 GRPO 强化学习训练。本仓库是论文 Alpha-R1: Alpha Screening with LLM Reasoning via Reinforcement Learning 的配套实现。
Alpha-R1 从 Alpha101 候选因子池中筛选因子。它不把 alpha 当作裸的时间序列,而是基于语义化的因子描述进行推理——每个因子如何起作用、何时有效、何时失效——并激活与当前市场环境相匹配的因子:
qlib single-factor backtest (P_i) ─┐
├─→ LLM factor descriptions α_des (OpenRouter)
market memory (M_global) ──────────┘ │
↓
Alpha-R1 inference (FinStep/Alpha-R1)
↓
parsed selections (selections.json)
↓
end-to-end strategy backtest (NAV, AR/SR/MDD)
- 单因子回测(论文 §3.1.3):每个 Alpha101 因子在 qlib 上评估——因子值、IC/RankIC 与 top-k 组合——并保存为绩效向量
P_i。 - 因子描述生成(§3.1.2/§3.2.1):LLM(经由 OpenRouter)将每日行情/新闻文本迭代聚合为全局市场记忆
M_global,再将M_global + P_i映射为每个因子的结构化描述α_des。 - Alpha-R1 推理(§3.3):因子描述拼接为决策上下文 prompt,模型以
<alpha_list>...</alpha_list>输出所选因子。 - 输出解析:对响应进行校验,并解析为
selections.json/summary.csv。 - 策略回测(§3.3,附录 F):用固定的线性模型按所选因子为股票打分,按论文的执行协议(槽位轮换、VWAP 成交、手续费)产出净值曲线与指标。
pip install -e . # core (transformers inference + generation + parsing) pip install -e .[vllm] # optional high-throughput inference backend pip install -e .[qlib] # optional backtesting (pyqlib)
API 密钥(见 .env.example):
export OPENROUTER_API_KEY=... # description generation export HF_TOKEN=... # optional (e.g. for gated/private mirrors)
所有步骤的默认参数均从 configs/ 读取。
python scripts/prepare_qlib_data.py --csv-dir data/stock_data --qlib-dir ~/.qlib/qlib_data/alpha_r1
python scripts/run_factor_backtest.py --alphas all每个因子输出 result/alpha_backtest/alphaNNN.json。数据目录结构约定见 data/README.md。
python scripts/build_market_memory.py --start-date 2023年01月01日 --end-date 2024年12月31日
python scripts/generate_descriptions.py --model "anthropic/claude-3.7-sonnet" --alphas allconfigs/generation.yaml 中的 OpenRouter 模型 id 特意留空——请在配置中填写,或通过 --model 传入。输出 data/market_memory/M_global.txt 与 result/alpha_des/alphaNNN.txt。
python scripts/run_inference.py \ --factor-des-dir result/alpha_des \ --start-date 2025年01月01日 --end-date 2025年12月31日
通过 from_pretrained 加载 FinStep/Alpha-R1(默认 hf 后端;在 configs/inference.yaml 中设置 backend: vllm 可切换为 vLLM)。解码默认 temperature=0, top_p=0.7,与论文一致。输出 result/alpha_select/result_YYYYMMDD.json。无真实数据时,可用 --factor-des-dir examples/factor_descriptions 做最小冒烟运行。
决策日默认为给定区间内的工作日(交易日历的近似);传入 --market-state-dir 可限制为实际有行情数据的日期。
python scripts/parse_outputs.py --result-dir result/alpha_select
输出 selections.json(日期 → 因子列表)与 summary.csv,并报告格式非法的日期。
# estimate the fixed linear model on the historical window (paper: 2020-2023) python scripts/train_linear_model.py --alphas all # backtest the selections with the paper's execution protocol (slot rotation, VWAP, 10 bps) python scripts/run_strategy_backtest.py \ --selections result/alpha_select/parsed/selections.json \ --betas result/linear_model/betas.csv
将解析出的因子选择转化为可交易的 top-10 等权组合:资金在 holding_days 个槽位间轮换(每日再平衡一个槽位),成交价使用当日 $vwap(缺失时回退 $close),双边手续费 10 bps,闲置现金按无风险利率计息,决策日 t 使用 t-1 日的因子值打分。输出指标 JSON(AR / 超额 SR / MDD / Sortino / Calmar / IR,相对基准)与逐日净值 CSV 至 configs/strategy.yaml: output_dir。--selections 传入多轮选择文件目录时,会额外输出多轮平均结果。涨跌停过滤已实现但默认关闭(日线数据不含涨跌停标记;见 configs/strategy.yaml)。
主实验结果(论文 Table 1;12 个月样本外测试区间 2025年01月01日 至 2025年12月31日)。AR = 年化收益,SR = 超额夏普比率,MDD = 最大回撤。
Backtest NAV comparison on the S&P 500 asset pool Backtest NAV comparison on the CSI 300 asset pool
| 类型 | 方法 | S&P 500 | CSI 300 | ||||
|---|---|---|---|---|---|---|---|
| AR (%) | SR | MDD (%) | AR (%) | SR | MDD (%) | ||
| Non-LLM | Buy & Hold | 19.34 | 0.80 | 18.75 | 22.16 | 1.31 | 10.49 |
| PCA | 7.98 | 0.27 | 17.30 | 2.93 | 0.17 | 14.46 | |
| XGBoost | 3.49 | 0.03 | 18.45 | 8.99 | 0.50 | 16.26 | |
| LightGBM | -5.42 | -0.43 | 20.93 | 18.44 | 1.05 | 14.92 | |
| A2C | 10.82 | 0.40 | 17.70 | 22.96 | 1.20 | 14.86 | |
| PPO | 7.68 | 0.25 | 14.97 | 14.96 | 0.81 | 12.95 | |
| DDPG | 2.53 | -0.02 | 15.04 | 1.97 | 0.12 | 16.54 | |
| TD3 | 5.54 | 0.14 | 16.58 | 8.66 | 0.52 | 10.26 | |
| SAC | 37.60 | 1.44 | 15.18 | 9.77 | 0.56 | 11.68 | |
| LLM | Gemini 2.5 Pro | 14.23 | 0.55 | 17.01 | 16.29 | 0.90 | 14.01 |
| Claude 3.7 Sonnet | 10.92 | 0.40 | 18.88 | 10.13 | 0.57 | 14.49 | |
| DeepSeek‐R1 | 21.94 | 0.93 | 14.36 | 14.66 | 0.81 | 14.60 | |
| Qwen3‐8B | 12.85 | 0.47 | 19.52 | 15.44 | 0.79 | 14.38 | |
| Alpha‐R1 (Ours) | 47.87 | 1.62 | 16.91 | 40.57 | 2.23 | 6.58 | |
在域外股票池上无需重训:Alpha-R1 在 Russell 2000 上达到 80.54% AR(SR 2.46),在 CSI 1000 上达到 73.52% AR(SR 2.80)(论文 Table 2)。
Alpha-R1 基于 Qwen3-8B,使用 verl 以 GRPO 与市场反馈奖励训练(论文 Section 3.4)。training/ 包含训练配置(configs/grpo_alpha_r1.yaml)与奖励的简化参考实现(reward.py),可通过 verl 的 custom_reward_function 机制接入。详见 training/README.md。
src/alpha_r1/
├── factors/ Alpha101 formula library + description loading/concatenation
├── backtest/ qlib data conversion, Alpha101→qlib expressions, single-factor
│ backtest, linear model, slot-rotation strategy backtest
├── generation/ OpenRouter client, market memory, description generation
├── inference/ transformers / vLLM backends, prompt builder, selection loop
└── parsing/ <alpha_list> extraction and validation
scripts/ CLI entry points for each pipeline step
configs/ YAML configs for backtest / generation / inference / strategy
training/ GRPO training config + reference reward (verl)
data/ raw data lives here (gitignored, see data/README.md)
examples/ minimal example inputs
@article{jiang2025alphar1, title={Alpha-R1: Alpha Screening with LLM Reasoning via Reinforcement Learning}, author={Jiang, Zuoyou and Zhao, Li and Sun, Rui and Sun, Ruohan and Li, Zhongjian and Li, Jing and Jiang, Daxin and Bai, Zuo and Hua, Cheng}, journal={arXiv preprint arXiv:2512.23515}, year={2025} }
本项目基于 MIT License 发布。
- [2025.12] 📄 论文发布于 arXiv。
- [2026.09] 🧩 代码发布:qlib 单因子回测、因子描述生成(OpenRouter)、Alpha-R1 推理、输出解析、端到端策略回测,以及 GRPO 训练配置 + 参考奖励实现。
- ✅ 推理代码(Alpha Screening Pipeline)
- ✅ 模型权重(
FinStep/Alpha-R1)
欢迎 ⭐ Star 本仓库,获取最新进展!