Text Generation
Transformers
Safetensors
qwen3
finance
quantitative-trading
alpha-factor
reinforcement-learning
grpo
qlib
conversational
text-generation-inference
Instructions to use FinStep/Alpha-R1 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use FinStep/Alpha-R1 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="FinStep/Alpha-R1") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForCausalLM tokenizer = AutoTokenizer.from_pretrained("FinStep/Alpha-R1") model = AutoModelForCausalLM.from_pretrained("FinStep/Alpha-R1", device_map="auto") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use FinStep/Alpha-R1 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "FinStep/Alpha-R1" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FinStep/Alpha-R1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/FinStep/Alpha-R1
- SGLang
How to use FinStep/Alpha-R1 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "FinStep/Alpha-R1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FinStep/Alpha-R1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "FinStep/Alpha-R1" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "FinStep/Alpha-R1", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use FinStep/Alpha-R1 with Docker Model Runner:
docker model run hf.co/FinStep/Alpha-R1
Add bilingual model card (Chinese default + English) with figures
Browse filesModel card for Alpha-R1: overview, quick start (transformers/vLLM), output contract, full results (paper Table 1), citation.
- .gitattributes +3 -0
- README.md +154 -3
- README_en.md +140 -0
- assets/framework.png +3 -0
- assets/main_result_csi300.png +3 -0
- assets/main_result_sp500.png +3 -0
.gitattributes
CHANGED
|
@@ -34,3 +34,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
tokenizer.json filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
assets/framework.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
assets/main_result_csi300.png filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
assets/main_result_sp500.png filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
|
@@ -1,3 +1,154 @@
|
|
| 1 |
-
---
|
| 2 |
-
license: mit
|
| 3 |
-
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: mit
|
| 3 |
+
base_model: Qwen/Qwen3-8B
|
| 4 |
+
pipeline_tag: text-generation
|
| 5 |
+
library_name: transformers
|
| 6 |
+
tags:
|
| 7 |
+
- finance
|
| 8 |
+
- quantitative-trading
|
| 9 |
+
- alpha-factor
|
| 10 |
+
- reinforcement-learning
|
| 11 |
+
- grpo
|
| 12 |
+
- qlib
|
| 13 |
+
---
|
| 14 |
+
|
| 15 |
+
# Alpha-R1: Alpha Screening with LLM Reasoning via Reinforcement Learning
|
| 16 |
+
|
| 17 |
+
<p align="center">
|
| 18 |
+
<a href="README_en.md">English</a> | <a href="README.md">中文</a>
|
| 19 |
+
</p>
|
| 20 |
+
|
| 21 |
+
**Alpha-R1** 是一个面向量化 Alpha 筛选的推理增强型 LLM:基于 Qwen3-8B,通过 GRPO 强化学习([verl](https://github.com/volcengine/verl))以市场反馈奖励训练。它阅读 Alpha101 因子的**语义化描述**——每个因子如何起作用、何时有效、何时失效——并针对当前市场环境筛选出最值得激活的因子组合。
|
| 22 |
+
|
| 23 |
+
- 📄 Paper: [arXiv:2512.23515](https://arxiv.org/abs/2512.23515)
|
| 24 |
+
- 💻 Code: [FinStep-AI/Alpha-R1](https://github.com/FinStep-AI/Alpha-R1)(推理管线 / qlib 回测 / 训练配置)
|
| 25 |
+
- 📜 License: MIT
|
| 26 |
+
|
| 27 |
+
## 模型概览 (Model Overview)
|
| 28 |
+
|
| 29 |
+
<p align="center">
|
| 30 |
+
<img src="assets/framework.png" alt="Alpha-R1 framework overview" style="width: 100%;">
|
| 31 |
+
</p>
|
| 32 |
+
|
| 33 |
+
| 项目 | 内容 |
|
| 34 |
+
|---|---|
|
| 35 |
+
| Base model | [Qwen/Qwen3-8B](https://huggingface.co/Qwen/Qwen3-8B) |
|
| 36 |
+
| 训练方法 | GRPO(verl),市场反馈奖励 |
|
| 37 |
+
| 输入 | 决策上下文 prompt:拼接的因子语义描述 `α_des` |
|
| 38 |
+
| 输出 | `<alpha_list>` 中列出的选中因子 |
|
| 39 |
+
| 候选因子池 | 82 个 Alpha101 因子(论文筛选后) |
|
| 40 |
+
| 推荐解码 | temperature=0(greedy),top_p=0.7,max_new_tokens=4096 |
|
| 41 |
+
|
| 42 |
+
## 快速开始 (Quick Start)
|
| 43 |
+
|
| 44 |
+
### transformers
|
| 45 |
+
|
| 46 |
+
```python
|
| 47 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 48 |
+
|
| 49 |
+
model_id = "FinStep/Alpha-R1"
|
| 50 |
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
| 51 |
+
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="bfloat16", device_map="auto")
|
| 52 |
+
|
| 53 |
+
prompt = "<decision context: concatenated factor descriptions>" # see the GitHub repo for the prompt builder
|
| 54 |
+
inputs = tokenizer.apply_chat_template(
|
| 55 |
+
[{"role": "user", "content": prompt}],
|
| 56 |
+
add_generation_prompt=True, return_tensors="pt",
|
| 57 |
+
).to(model.device)
|
| 58 |
+
|
| 59 |
+
# paper setting: temperature=0 (greedy), top_p=0.7
|
| 60 |
+
out = model.generate(inputs, max_new_tokens=4096, do_sample=False)
|
| 61 |
+
print(tokenizer.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
|
| 62 |
+
```
|
| 63 |
+
|
| 64 |
+
### vLLM
|
| 65 |
+
|
| 66 |
+
```python
|
| 67 |
+
from vllm import LLM, SamplingParams
|
| 68 |
+
|
| 69 |
+
llm = LLM(model="FinStep/Alpha-R1")
|
| 70 |
+
params = SamplingParams(temperature=0.0, top_p=0.7, max_tokens=4096)
|
| 71 |
+
outputs = llm.chat([[{"role": "user", "content": prompt}]], params)
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
完整的端到端管线(因子描述生成 → Alpha-R1 推理 → 输出解析 → qlib 策略回测)见 [GitHub 仓库](https://github.com/FinStep-AI/Alpha-R1)。
|
| 75 |
+
|
| 76 |
+
## 输出契约 (Output Contract)
|
| 77 |
+
|
| 78 |
+
模型在 `<alpha_list>...</alpha_list>` 中输出选中的因子 id,例如:
|
| 79 |
+
|
| 80 |
+
```
|
| 81 |
+
<alpha_list>alpha001, alpha021, alpha053</alpha_list>
|
| 82 |
+
```
|
| 83 |
+
|
| 84 |
+
GitHub 仓库的 `src/alpha_r1/parsing/` 提供了配套的校验与解析脚本。
|
| 85 |
+
|
| 86 |
+
## 表现 (Performance)
|
| 87 |
+
|
| 88 |
+
12 个月样本外测试(2025-01-01 ~ 2025-12-31,论文 Table 1):
|
| 89 |
+
|
| 90 |
+
<p align="center">
|
| 91 |
+
<img src="assets/main_result_sp500.png" alt="Backtest NAV comparison on the S&P 500 asset pool" style="width: 49%;">
|
| 92 |
+
<img src="assets/main_result_csi300.png" alt="Backtest NAV comparison on the CSI 300 asset pool" style="width: 49%;">
|
| 93 |
+
</p>
|
| 94 |
+
|
| 95 |
+
<table>
|
| 96 |
+
<thead>
|
| 97 |
+
<tr>
|
| 98 |
+
<th rowspan="2">类型</th>
|
| 99 |
+
<th rowspan="2" width="160">方法</th>
|
| 100 |
+
<th colspan="3">S&P 500</th>
|
| 101 |
+
<th colspan="3">CSI 300</th>
|
| 102 |
+
</tr>
|
| 103 |
+
<tr>
|
| 104 |
+
<th>AR (%)</th>
|
| 105 |
+
<th>SR</th>
|
| 106 |
+
<th>MDD (%)</th>
|
| 107 |
+
<th>AR (%)</th>
|
| 108 |
+
<th>SR</th>
|
| 109 |
+
<th>MDD (%)</th>
|
| 110 |
+
</tr>
|
| 111 |
+
</thead>
|
| 112 |
+
<tbody>
|
| 113 |
+
<tr><td rowspan="9">Non-LLM</td><td>Buy & Hold</td><td>19.34</td><td>0.80</td><td>18.75</td><td>22.16</td><td>1.31</td><td>10.49</td></tr>
|
| 114 |
+
<tr><td>PCA</td><td>7.98</td><td>0.27</td><td>17.30</td><td>2.93</td><td>0.17</td><td>14.46</td></tr>
|
| 115 |
+
<tr><td>XGBoost</td><td>3.49</td><td>0.03</td><td>18.45</td><td>8.99</td><td>0.50</td><td>16.26</td></tr>
|
| 116 |
+
<tr><td>LightGBM</td><td>-5.42</td><td>-0.43</td><td>20.93</td><td>18.44</td><td>1.05</td><td>14.92</td></tr>
|
| 117 |
+
<tr><td>A2C</td><td>10.82</td><td>0.40</td><td>17.70</td><td>22.96</td><td>1.20</td><td>14.86</td></tr>
|
| 118 |
+
<tr><td>PPO</td><td>7.68</td><td>0.25</td><td>14.97</td><td>14.96</td><td>0.81</td><td>12.95</td></tr>
|
| 119 |
+
<tr><td>DDPG</td><td>2.53</td><td>-0.02</td><td>15.04</td><td>1.97</td><td>0.12</td><td>16.54</td></tr>
|
| 120 |
+
<tr><td>TD3</td><td>5.54</td><td>0.14</td><td>16.58</td><td>8.66</td><td>0.52</td><td>10.26</td></tr>
|
| 121 |
+
<tr><td>SAC</td><td>37.60</td><td>1.44</td><td>15.18</td><td>9.77</td><td>0.56</td><td>11.68</td></tr>
|
| 122 |
+
<tr><td rowspan="5">LLM</td><td>Gemini 2.5 Pro</td><td>14.23</td><td>0.55</td><td>17.01</td><td>16.29</td><td>0.90</td><td>14.01</td></tr>
|
| 123 |
+
<tr><td>Claude 3.7 Sonnet</td><td>10.92</td><td>0.40</td><td>18.88</td><td>10.13</td><td>0.57</td><td>14.49</td></tr>
|
| 124 |
+
<tr><td>DeepSeek‑R1</td><td>21.94</td><td>0.93</td><td><b>14.36</b></td><td>14.66</td><td>0.81</td><td>14.60</td></tr>
|
| 125 |
+
<tr><td>Qwen3‑8B</td><td>12.85</td><td>0.47</td><td>19.52</td><td>15.44</td><td>0.79</td><td>14.38</td></tr>
|
| 126 |
+
<tr><td><b>Alpha‑R1 (Ours)</b></td><td><b>47.87</b></td><td><b>1.62</b></td><td>16.91</td><td><b>40.57</b></td><td><b>2.23</b></td><td><b>6.58</b></td></tr>
|
| 127 |
+
</tbody>
|
| 128 |
+
</table>
|
| 129 |
+
|
| 130 |
+
域外泛化(无需重训,论文 Table 2):Russell 2000 上 80.54% AR(SR 2.46),CSI 1000 上 73.52% AR(SR 2.80)。AR = 年化收益,SR = 超额夏普比率,MDD = 最大回撤。
|
| 131 |
+
|
| 132 |
+
## 训练 (Training)
|
| 133 |
+
|
| 134 |
+
基于 Qwen3-8B,使用 verl 进行 GRPO 训练,奖励为市场反馈奖励(`R_final = R_adjusted - P_structural`,论文 §3.4)。训练配置与参考奖励实现见 GitHub 仓库的 `training/` 目录。
|
| 135 |
+
|
| 136 |
+
## 局限性 (Limitations)
|
| 137 |
+
|
| 138 |
+
- 本模型面向学术研究场景,输出不构成任何投资建议。
|
| 139 |
+
- 因子筛选依赖上游的描述生成与回测管线(见 GitHub 仓库),模型本身不直接产出可交易信号。
|
| 140 |
+
|
| 141 |
+
## 引用 (Citation)
|
| 142 |
+
|
| 143 |
+
```bibtex
|
| 144 |
+
@article{jiang2025alphar1,
|
| 145 |
+
title={Alpha-R1: Alpha Screening with LLM Reasoning via Reinforcement Learning},
|
| 146 |
+
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},
|
| 147 |
+
journal={arXiv preprint arXiv:2512.23515},
|
| 148 |
+
year={2025}
|
| 149 |
+
}
|
| 150 |
+
```
|
| 151 |
+
|
| 152 |
+
## License
|
| 153 |
+
|
| 154 |
+
本项目基于 [MIT License](https://opensource.org/licenses/MIT) 发布。
|
README_en.md
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Alpha-R1: Alpha Screening with LLM Reasoning via Reinforcement Learning
|
| 2 |
+
|
| 3 |
+
<p align="center">
|
| 4 |
+
<a href="README_en.md">English</a> | <a href="README.md">中文</a>
|
| 5 |
+
</p>
|
| 6 |
+
|
| 7 |
+
**Alpha-R1** is a reasoning-enhanced LLM for quantitative alpha selection: built on Qwen3-8B and trained with GRPO reinforcement learning ([verl](https://github.com/volcengine/verl)) using a market-feedback reward. It reasons over **semantic factor descriptions** — how each factor works, when it works, and when it fails — and selects the Alpha101 factors that best fit current market conditions.
|
| 8 |
+
|
| 9 |
+
- 📄 Paper: [arXiv:2512.23515](https://arxiv.org/abs/2512.23515)
|
| 10 |
+
- 💻 Code: [FinStep-AI/Alpha-R1](https://github.com/FinStep-AI/Alpha-R1) (inference pipeline / qlib backtesting / training config)
|
| 11 |
+
- 📜 License: MIT
|
| 12 |
+
|
| 13 |
+
## Model Overview
|
| 14 |
+
|
| 15 |
+
<p align="center">
|
| 16 |
+
<img src="assets/framework.png" alt="Alpha-R1 framework overview" style="width: 100%;">
|
| 17 |
+
</p>
|
| 18 |
+
|
| 19 |
+
| Item | Content |
|
| 20 |
+
|---|---|
|
| 21 |
+
| Base model | [Qwen/Qwen3-8B](https://huggingface.co/Qwen/Qwen3-8B) |
|
| 22 |
+
| Training | GRPO (verl) with a market-feedback reward |
|
| 23 |
+
| Input | Decision-context prompt: concatenated semantic factor descriptions `α_des` |
|
| 24 |
+
| Output | Selected factors listed in `<alpha_list>` |
|
| 25 |
+
| Candidate pool | 82 Alpha101 factors (as screened in the paper) |
|
| 26 |
+
| Recommended decoding | temperature=0 (greedy), top_p=0.7, max_new_tokens=4096 |
|
| 27 |
+
|
| 28 |
+
## Quick Start
|
| 29 |
+
|
| 30 |
+
### transformers
|
| 31 |
+
|
| 32 |
+
```python
|
| 33 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
| 34 |
+
|
| 35 |
+
model_id = "FinStep/Alpha-R1"
|
| 36 |
+
tokenizer = AutoTokenizer.from_pretrained(model_id)
|
| 37 |
+
model = AutoModelForCausalLM.from_pretrained(model_id, dtype="bfloat16", device_map="auto")
|
| 38 |
+
|
| 39 |
+
prompt = "<decision context: concatenated factor descriptions>" # see the GitHub repo for the prompt builder
|
| 40 |
+
inputs = tokenizer.apply_chat_template(
|
| 41 |
+
[{"role": "user", "content": prompt}],
|
| 42 |
+
add_generation_prompt=True, return_tensors="pt",
|
| 43 |
+
).to(model.device)
|
| 44 |
+
|
| 45 |
+
# paper setting: temperature=0 (greedy), top_p=0.7
|
| 46 |
+
out = model.generate(inputs, max_new_tokens=4096, do_sample=False)
|
| 47 |
+
print(tokenizer.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))
|
| 48 |
+
```
|
| 49 |
+
|
| 50 |
+
### vLLM
|
| 51 |
+
|
| 52 |
+
```python
|
| 53 |
+
from vllm import LLM, SamplingParams
|
| 54 |
+
|
| 55 |
+
llm = LLM(model="FinStep/Alpha-R1")
|
| 56 |
+
params = SamplingParams(temperature=0.0, top_p=0.7, max_tokens=4096)
|
| 57 |
+
outputs = llm.chat([[{"role": "user", "content": prompt}]], params)
|
| 58 |
+
```
|
| 59 |
+
|
| 60 |
+
For the full end-to-end pipeline (factor description generation → Alpha-R1 inference → output parsing → qlib strategy backtest), see the [GitHub repository](https://github.com/FinStep-AI/Alpha-R1).
|
| 61 |
+
|
| 62 |
+
## Output Contract
|
| 63 |
+
|
| 64 |
+
The model lists the selected factor ids inside `<alpha_list>...</alpha_list>`, e.g.:
|
| 65 |
+
|
| 66 |
+
```
|
| 67 |
+
<alpha_list>alpha001, alpha021, alpha053</alpha_list>
|
| 68 |
+
```
|
| 69 |
+
|
| 70 |
+
Validation and parsing scripts are provided under `src/alpha_r1/parsing/` in the GitHub repository.
|
| 71 |
+
|
| 72 |
+
## Performance
|
| 73 |
+
|
| 74 |
+
12-month out-of-sample testing (2025-01-01 to 2025-12-31, paper Table 1):
|
| 75 |
+
|
| 76 |
+
<p align="center">
|
| 77 |
+
<img src="assets/main_result_sp500.png" alt="Backtest NAV comparison on the S&P 500 asset pool" style="width: 49%;">
|
| 78 |
+
<img src="assets/main_result_csi300.png" alt="Backtest NAV comparison on the CSI 300 asset pool" style="width: 49%;">
|
| 79 |
+
</p>
|
| 80 |
+
|
| 81 |
+
<table>
|
| 82 |
+
<thead>
|
| 83 |
+
<tr>
|
| 84 |
+
<th rowspan="2">Type</th>
|
| 85 |
+
<th rowspan="2" width="160">Method</th>
|
| 86 |
+
<th colspan="3">S&P 500</th>
|
| 87 |
+
<th colspan="3">CSI 300</th>
|
| 88 |
+
</tr>
|
| 89 |
+
<tr>
|
| 90 |
+
<th>AR (%)</th>
|
| 91 |
+
<th>SR</th>
|
| 92 |
+
<th>MDD (%)</th>
|
| 93 |
+
<th>AR (%)</th>
|
| 94 |
+
<th>SR</th>
|
| 95 |
+
<th>MDD (%)</th>
|
| 96 |
+
</tr>
|
| 97 |
+
</thead>
|
| 98 |
+
<tbody>
|
| 99 |
+
<tr><td rowspan="9">Non-LLM</td><td>Buy & Hold</td><td>19.34</td><td>0.80</td><td>18.75</td><td>22.16</td><td>1.31</td><td>10.49</td></tr>
|
| 100 |
+
<tr><td>PCA</td><td>7.98</td><td>0.27</td><td>17.30</td><td>2.93</td><td>0.17</td><td>14.46</td></tr>
|
| 101 |
+
<tr><td>XGBoost</td><td>3.49</td><td>0.03</td><td>18.45</td><td>8.99</td><td>0.50</td><td>16.26</td></tr>
|
| 102 |
+
<tr><td>LightGBM</td><td>-5.42</td><td>-0.43</td><td>20.93</td><td>18.44</td><td>1.05</td><td>14.92</td></tr>
|
| 103 |
+
<tr><td>A2C</td><td>10.82</td><td>0.40</td><td>17.70</td><td>22.96</td><td>1.20</td><td>14.86</td></tr>
|
| 104 |
+
<tr><td>PPO</td><td>7.68</td><td>0.25</td><td>14.97</td><td>14.96</td><td>0.81</td><td>12.95</td></tr>
|
| 105 |
+
<tr><td>DDPG</td><td>2.53</td><td>-0.02</td><td>15.04</td><td>1.97</td><td>0.12</td><td>16.54</td></tr>
|
| 106 |
+
<tr><td>TD3</td><td>5.54</td><td>0.14</td><td>16.58</td><td>8.66</td><td>0.52</td><td>10.26</td></tr>
|
| 107 |
+
<tr><td>SAC</td><td>37.60</td><td>1.44</td><td>15.18</td><td>9.77</td><td>0.56</td><td>11.68</td></tr>
|
| 108 |
+
<tr><td rowspan="5">LLM</td><td>Gemini 2.5 Pro</td><td>14.23</td><td>0.55</td><td>17.01</td><td>16.29</td><td>0.90</td><td>14.01</td></tr>
|
| 109 |
+
<tr><td>Claude 3.7 Sonnet</td><td>10.92</td><td>0.40</td><td>18.88</td><td>10.13</td><td>0.57</td><td>14.49</td></tr>
|
| 110 |
+
<tr><td>DeepSeek‑R1</td><td>21.94</td><td>0.93</td><td><b>14.36</b></td><td>14.66</td><td>0.81</td><td>14.60</td></tr>
|
| 111 |
+
<tr><td>Qwen3‑8B</td><td>12.85</td><td>0.47</td><td>19.52</td><td>15.44</td><td>0.79</td><td>14.38</td></tr>
|
| 112 |
+
<tr><td><b>Alpha‑R1 (Ours)</b></td><td><b>47.87</b></td><td><b>1.62</b></td><td>16.91</td><td><b>40.57</b></td><td><b>2.23</b></td><td><b>6.58</b></td></tr>
|
| 113 |
+
</tbody>
|
| 114 |
+
</table>
|
| 115 |
+
|
| 116 |
+
Out-of-domain generalization without retraining (paper Table 2): 80.54% AR (SR 2.46) on Russell 2000 and 73.52% AR (SR 2.80) on CSI 1000. AR = annualized return, SR = excess Sharpe ratio, MDD = max drawdown.
|
| 117 |
+
|
| 118 |
+
## Training
|
| 119 |
+
|
| 120 |
+
Alpha-R1 is trained on Qwen3-8B with GRPO using verl and a market-feedback reward (`R_final = R_adjusted - P_structural`, paper Section 3.4). The training configuration and a reference reward implementation live in the `training/` directory of the GitHub repository.
|
| 121 |
+
|
| 122 |
+
## Limitations
|
| 123 |
+
|
| 124 |
+
- This model is intended for academic research; its outputs do not constitute investment advice.
|
| 125 |
+
- Factor selection depends on the upstream description-generation and backtesting pipeline (see the GitHub repository); the model alone does not produce tradable signals.
|
| 126 |
+
|
| 127 |
+
## Citation
|
| 128 |
+
|
| 129 |
+
```bibtex
|
| 130 |
+
@article{jiang2025alphar1,
|
| 131 |
+
title={Alpha-R1: Alpha Screening with LLM Reasoning via Reinforcement Learning},
|
| 132 |
+
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},
|
| 133 |
+
journal={arXiv preprint arXiv:2512.23515},
|
| 134 |
+
year={2025}
|
| 135 |
+
}
|
| 136 |
+
```
|
| 137 |
+
|
| 138 |
+
## License
|
| 139 |
+
|
| 140 |
+
This project is released under the [MIT License](https://opensource.org/licenses/MIT).
|
assets/framework.png
ADDED
|
Git LFS Details
|
assets/main_result_csi300.png
ADDED
|
Git LFS Details
|
assets/main_result_sp500.png
ADDED
|
Git LFS Details
|