最近发布的特性
我们很高兴宣布发布 RD-Agent📢,这是一个强大的工具,支持量化投资研发中的自动化因子挖掘和模型优化。
RD-Agent 现在已在 GitHub 上可用,我们欢迎您的星标🌟!
要了解更多信息,请访问我们的 ♾️演示页面。在这里,您将找到英文和中文演示视频,帮助您更好地理解 RD-Agent 的场景和用法。
我们为您准备了几个演示视频:
| 场景 | 演示视频 (English) | 演示视频 (中文) |
|---|---|---|
| 量化因子挖掘 | 链接 | 链接 |
| 从报告中量化因子挖掘 | 链接 | 链接 |
| 量化模型优化 | 链接 | 链接 |
- 📃论文: R&D-Agent-Quant: A Multi-Agent Framework for Data-Centric Factors and Model Joint Optimization
- 👾代码: https://github.com/microsoft/RD-Agent/
@misc{li2025rdagentquant,
title={R\&D-Agent-Quant: A Multi-Agent Framework for Data-Centric Factors and Model Joint Optimization},
author={Yuante Li and Xu Yang and Xiao Yang and Minrui Xu and Xisen Wang and Weiqing Liu and Jiang Bian},
year={2025},
eprint={2505.15155},
archivePrefix={arXiv},
primaryClass={cs.AI}
}| 特性 | 状态 |
|---|---|
| R&D-Agent-Quant 已发布 | 将 R&D-Agent 应用于 Qlib 用于量化交易 |
| BPQP 用于端到端学习 | 📈即将到来!(审核中) |
| 🔥LLM驱动的自动量化工厂🔥 | 🚀 于2024年8月8日在 ♾️RD-Agent 中发布 |
| KRNN 和 Sandwich 模型 | 📈 已发布 于2023年5月26日 |
| 发布 Qlib v0.9.0 | |
| RL 学习框架 | 🔨 📈 于2022年11月10日发布。 #1332, #1322, #1316,#1299,#1263, #1244, #1169, #1125, #1076 |
| HIST 和 IGMTF 模型 | 📈 已发布 于2022年4月10日 |
| Qlib notebook 教程 | 📖 已发布 于2022年4月7日 |
| Ibovespa 指数数据 | 🍚 已发布 于2022年4月6日 |
| Point-in-Time 数据库 | 🔨 已发布 于2022年3月10日 |
| Arctic Provider Backend & Orderbook 数据示例 | 🔨 已发布 于2022年1月17日 |
| 基于元学习的框架 & DDG-DA | 📈 🔨 已发布 于2022年1月10日 |
| 基于规划的投资组合优化 | 🔨 已发布 于2021年12月28日 |
| 发布 Qlib v0.8.0 | |
| ADD 模型 | 📈 已发布 于2021年11月22日 |
| ADARNN 模型 | 📈 已发布 于2021年11月14日 |
| TCN 模型 | 📈 已发布 于2021年11月4日 |
| 嵌套决策框架 | 🔨 已发布 于2021年10月1日。 示例 和 文档 |
| Temporal Routing Adaptor (TRA) | 📈 已发布 于2021年7月30日 |
| Transformer & Localformer | 📈 已发布 于2021年7月22日 |
| 发布 Qlib v0.7.0 | |
| TCTS 模型 | 📈 已发布 于2021年7月1日 |
| 在线服务和自动模型滚动 | 🔨 已发布 于2021年5月17日 |
| DoubleEnsemble 模型 | 📈 已发布 于2021年3月2日 |
| 高频数据处理示例 | 🔨 已发布 于2021年2月5日 |
| 高频交易示例 | 📈 部分代码已发布 于2021年1月28日 |
| 高频数据(1min) | 🍚 已发布 于2021年1月27日 |
| Tabnet 模型 | 📈 已发布 于2021年1月22日 |
2021年之前发布的特性未在此列出。
Qlib 是一个开源的、面向AI的量化投资平台,旨在利用AI技术在量化投资中实现潜力、赋能研究并创造价值,从探索想法到实施生产。Qlib 支持多种机器学习建模范式,包括监督学习、市场动态建模和强化学习。
越来越多的 SOTA 量化研究工作/论文在 Qlib 中发布,以协作解决量化投资中的关键挑战。例如,1) 使用监督学习从丰富且异构的金融数据中挖掘市场的复杂非线性模式,2) 使用自适应概念漂移技术建模金融市场的动态性质,3) 使用强化学习建模连续投资决策并帮助投资者优化交易策略。
它包含数据处理、模型训练、回测的完整ML管道;并覆盖量化投资的整个链条:alpha 寻求、风险建模、投资组合优化和订单执行。 更多细节,请参考我们的论文 "Qlib: An AI-oriented Quantitative Investment Platform"。
| 框架、教程、数据 & DevOps | 量化研究中的主要挑战 & 解决方案 |
|---|---|
|
|
|
正在开发的新特性(按预计发布时间排序)。 您的反馈对这些特性非常重要。
Qlib 的高层框架如上所示(用户可以在深入细节时找到 Qlib 设计的详细框架)。 组件被设计为松散耦合的模块,每个组件都可以独立使用。
Qlib 提供强大的基础设施来支持量化研究。数据 始终是重要的一部分。 设计了一个强大的学习框架来支持不同的学习范式(例如 强化学习, 监督学习)和不同级别的模式(例如 市场动态建模)。 通过建模市场,交易策略 将生成将被执行的交易决策。不同级别或粒度的多个交易策略和执行器可以嵌套以一起优化和运行。 最后,将提供全面的分析,并且模型可以以低成本在线服务。
这个快速开始指南试图演示
- 使用 Qlib 构建完整的量化研究工作流并尝试您的想法非常容易。
- 尽管使用公共数据和简单模型,机器学习技术在实际量化投资中工作得非常好。
这里是一个快速 演示 显示如何安装 Qlib,并使用 qrun 运行 LightGBM。但是,请确保您已经按照说明准备好数据。
此表展示了 Qlib 支持的 Python 版本:
| 使用 pip 安装 | 从源代码安装 | 绘图 | |
|---|---|---|---|
| Python 3.8 | ✔️ | ✔️ | ✔️ |
| Python 3.9 | ✔️ | ✔️ | ✔️ |
| Python 3.10 | ✔️ | ✔️ | ✔️ |
| Python 3.11 | ✔️ | ✔️ | ✔️ |
| Python 3.12 | ✔️ | ✔️ | ✔️ |
注意:
- 建议使用 Conda 管理您的 Python 环境。在某些情况下,在
conda环境之外使用 Python 可能会导致缺少头文件,从而导致某些包的安装失败。 - 请注意,在 Python 3.6 中安装 cython 会导致从源代码安装
Qlib时出现一些错误。如果用户在他们的机器上使用 Python 3.6,建议升级 Python 到 3.8 或更高版本,或者使用conda的 Python 从源代码安装Qlib。
用户可以按照以下命令轻松使用 pip 安装 Qlib。
pip install pyqlib注意:pip 将安装最新的稳定版 qlib。但是,qlib 的 main 分支处于活跃开发中。如果您想测试 main 分支中的最新脚本或函数。请使用以下方法安装 qlib。
用户也可以按照以下步骤通过源代码安装最新的开发版 Qlib:
-
在从源代码安装
Qlib之前,用户需要安装一些依赖项:pip install numpy pip install --upgrade cython
-
克隆仓库并安装
Qlib如下。git clone https://github.com/ssvip9527/qlib.git && cd qlib pip install . # `pip install -e .[dev]` 推荐用于开发。检查 docs/developer/code_standard_and_dev_guide.rst 中的细节
提示:如果您在环境中安装 Qlib 或运行示例失败,比较您的步骤和 CI 工作流 可能有助于您找到问题。
Mac 提示:如果您使用的是带 M1 的 Mac,您可能会在为 LightGBM 构建 wheel 时遇到问题,这是由于缺少 OpenMP 的依赖项。为了解决问题,首先使用 brew install libomp 安装 openmp,然后运行 pip install . 以成功构建它。
❗ 由于更严格的数据安全策略。官方数据集暂时禁用。您可以尝试社区贡献的此数据源。 这里是一个下载最新数据的示例。
wget https://github.com/chenditc/investment_data/releases/latest/download/qlib_bin.tar.gz
mkdir -p ~/.qlib/qlib_data/cn_data
tar -zxvf qlib_bin.tar.gz -C ~/.qlib/qlib_data/cn_data --strip-components=1
rm -f qlib_bin.tar.gz下面的官方数据集将在不久的将来恢复。
通过运行以下代码加载和准备数据:
# 获取 1d 数据
python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# 获取 1min 数据
python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
# 获取 1d 数据
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# 获取 1min 数据
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
此数据集是由 crawler scripts 收集的公共数据创建的,这些脚本已在同一仓库中发布。 用户可以使用它创建相同的数据集。数据集描述
请注意数据是从 Yahoo Finance 收集的,数据可能不完美。 我们建议用户如果有高质量数据集,请准备自己的数据。更多信息,用户可以参考相关文档。
如果用户只想在历史数据上尝试他们的模型和策略,此步骤是可选的。
建议用户手动更新一次数据 (--trading_date 2021-05-25) 然后设置为自动更新。
注意:用户无法基于 Qlib 提供的离线数据(一些字段被移除以减少数据大小)增量更新数据。用户应使用 yahoo collector 从头下载 Yahoo 数据,然后增量更新它。
更多信息,请参考:yahoo collector
-
每个交易日自动更新数据到 "qlib" 目录 (Linux)
-
使用 crontab:
crontab -e -
设置定时任务:
* * * * 1-5 python <script path> update_data_to_bin --qlib_data_1d_dir <user data dir>- script path: scripts/data_collector/yahoo/collector.py
-
-
手动更新数据
python scripts/data_collector/yahoo/collector.py update_data_to_bin --qlib_data_1d_dir <user data dir> --trading_date <start date> --end_date <end date>- trading_date: 交易日开始
- end_date: 交易日结束(不包括)
- 我们提供了一个脚本来检查数据的健康状况,您可以运行以下命令来检查数据是否健康。
python scripts/check_data_health.py check_data --qlib_dir ~/.qlib/qlib_data/cn_data - 当然,您也可以添加一些参数来调整测试结果,例如这样。
python scripts/check_data_health.py check_data --qlib_dir ~/.qlib/qlib_data/cn_data --missing_data_num 30055 --large_step_threshold_volume 94485 --large_step_threshold_price 20 - 如果您想了解更多关于
check_data_health的信息,请参考文档。
- 从 Docker Hub 仓库拉取镜像
docker pull pyqlib/qlib_image_stable:stable- 启动新的 Docker 容器
docker run -it --name <容器名> -v <本地挂载目录>:/app qlib_image_stable- 此时你已进入 docker 环境,可以运行 qlib 脚本。例如:
python scripts/get_data.py qlib_data --name qlib_data_simple --target_dir ~/.qlib/qlib_data/cn_data --interval 1d --region cn python qlib/workflow/cli.py examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
4. 退出容器
```bash
>>> exit
- 重启容器
docker start -i -a <容器名>- 停止容器
docker stop <容器名>
7. 删除容器
```bash
docker rm <容器名>
- 更多信息请参考文档。
Qlib 提供了名为 qrun 的工具,可自动运行完整的量化研究工作流(包括数据集构建、模型训练、回测和评估)。你可以按照以下步骤启动自动化量化研究工作流,并进行图形化报告分析:
-
量化研究工作流:使用 lightgbm 的工作流配置文件运行
qrun(如 workflow_config_lightgbm_Alpha158.yaml)。cd examples # 避免在包含 `qlib` 的目录下运行程序 qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
如果用户希望在调试模式下使用
qrun,请使用以下命令:python -m pdb qlib/workflow/cli.py examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
qrun的结果如下,更多解释请参考文档。'以下为超额收益(不含成本)的分析结果。' risk mean 0.000708 std 0.005626 annualized_return 0.178316 information_ratio 1.996555 max_drawdown -0.081806 '以下为超额收益(含成本)的分析结果。' risk mean 0.000512 std 0.005626 annualized_return 0.128982 information_ratio 1.444287 max_drawdown -0.091078
有关
qrun和 工作流 的详细文档请参考链接。 -
图形化报告分析:首先运行
python -m pip install .[analysis]安装所需依赖,然后用jupyter notebook打开并运行examples/workflow_by_code.ipynb,即可获得图形化报告。-
预测信号(模型预测)分析
-
投资组合分析
-
上述结果的详细解释
-
自动化工作流可能并不适用于所有量化研究者的研究流程。为支持灵活的量化研究工作流,Qlib 还提供了模块化接口,允许研究者通过代码自定义工作流。这里有一个通过代码自定义量化研究工作流的演示。
量化投资是一个非常独特的场景,存在许多关键挑战需要解决。 目前,Qlib 针对其中一些挑战提供了解决方案。
准确预测股票价格趋势对于构建盈利投资组合至关重要。 然而,金融市场中存在大量不同格式的数据,这使得构建预测模型变得具有挑战性。
越来越多关注在复杂金融数据中挖掘有价值信号/模式的 SOTA 量化研究工作/论文在 Qlib 中发布。
以下是基于 Qlib 构建的模型列表:
- 基于 XGBoost 的 GBDT (Tianqi Chen, et al. KDD 2016)
- 基于 LightGBM 的 GBDT (Guolin Ke, et al. NIPS 2017)
- 基于 Catboost 的 GBDT (Liudmila Prokhorenkova, et al. NIPS 2018)
- 基于 pytorch 的 MLP
- 基于 pytorch 的 LSTM (Sepp Hochreiter, et al. Neural computation 1997)
- 基于 pytorch 的 GRU (Kyunghyun Cho, et al. 2014)
- 基于 pytorch 的 ALSTM (Yao Qin, et al. IJCAI 2017)
- 基于 pytorch 的 GATs (Petar Velickovic, et al. 2017)
- 基于 pytorch 的 SFM (Liheng Zhang, et al. KDD 2017)
- 基于 tensorflow 的 TFT (Bryan Lim, et al. International Journal of Forecasting 2019)
- 基于 pytorch 的 TabNet (Sercan O. Arik, et al. AAAI 2019)
- 基于 LightGBM 的 DoubleEnsemble (Chuheng Zhang, et al. ICDM 2020)
- 基于 pytorch 的 TCTS (Xueqing Wu, et al. ICML 2021)
- 基于 pytorch 的 Transformer (Ashish Vaswani, et al. NeurIPS 2017)
- 基于 pytorch 的 Localformer (Juyong Jiang, et al.)
- 基于 pytorch 的 TRA (Hengxu, Dong, et al. KDD 2021)
- 基于 pytorch 的 TCN (Shaojie Bai, et al. 2018)
- 基于 pytorch 的 ADARNN (YunTao Du, et al. 2021)
- 基于 pytorch 的 ADD (Hongshun Tang, et al.2020)
- 基于 pytorch 的 IGMTF (Wentao Xu, et al.2021)
- 基于 pytorch 的 HIST (Wentao Xu, et al.2021)
- 基于 pytorch 的 KRNN
- 基于 pytorch 的 Sandwich
欢迎提交新的量化模型 PR。
每个模型在 Alpha158 和 Alpha360 数据集上的表现可在这里查看。
上述所有模型均可通过 Qlib 运行。用户可在 benchmarks 文件夹中找到我们提供的配置文件及模型详情,更多信息可在上述模型文件中获取。
Qlib 提供三种不同方式运行单个模型,用户可根据实际情况选择:
-
使用上文提到的
qrun工具,通过配置文件运行模型工作流。 -
基于
examples文件夹下的 workflow_by_code.py 创建workflow_by_codePython 脚本。 -
使用
examples文件夹下的run_all_model.py脚本运行模型。例如:python run_all_model.py run --models=lightgbm,其中--models参数可指定上述任意模型(可用模型见 benchmarks)。更多用法请参考文件的 docstring。- 注意:每个基线模型依赖的环境不同,请确保你的 Python 版本与要求一致(如 TFT 仅支持 Python 3.6~3.7,因
tensorflow==1.15.0限制)。
- 注意:每个基线模型依赖的环境不同,请确保你的 Python 版本与要求一致(如 TFT 仅支持 Python 3.6~3.7,因
Qlib 还提供了 run_all_model.py 脚本,可多次迭代运行多个模型。(注意:该脚本目前仅支持 Linux,其他操作系统未来会支持。此外,目前不支持同一模型多次并行运行,后续开发将修复此问题。)
该脚本会为每个模型创建独立虚拟环境,训练完成后自动删除,仅保留实验结果如 IC 和 backtest。
例如,运行所有模型 10 次:
python run_all_model.py run 10也可通过 API 一次性运行指定模型。更多用法请参考文件的 docstring。
在 pandas 中,group_key 是 groupby 方法的参数之一。从 1.5 版本到 2.0 版本,group_key 的默认值由 无默认 变为 True,这会导致 qlib 运行时报错。因此我们设置了 group_key=False,但不能保证所有程序都能正确运行,包括:
- qlib\examples\rl_order_execution\scripts\gen_training_orders.py
- qlib\examples\benchmarks\TRA\src\dataset.MTSDatasetH.py
- qlib\examples\benchmarks\TFT\tft.py
由于金融市场环境的非平稳性,数据分布在不同阶段可能发生变化,这导致基于训练数据构建的模型在未来测试数据上的表现下降。因此,使预测模型/策略适应市场动态对于其性能至关重要。
以下是基于 Qlib 构建的解决方案列表:
Qlib 现已支持强化学习功能,用于建模连续投资决策。该功能通过与环境的交互学习,帮助投资者优化交易策略,以最大化累计收益。
以下是基于不同场景的 Qlib 强化学习解决方案列表:
- TWAP
- PPO: "An End-to-End Optimal Trade Execution Framework based on Proximal Policy Optimization", IJCAL 2020
- OPDS: "Universal Trading for Order Execution with Oracle Policy Distillation", AAAI 2021
数据集在量化研究中扮演着非常重要的角色。以下是基于 Qlib 构建的数据集列表:
| 数据集 | 美国市场 | 中国市场 |
|---|---|---|
| Alpha360 | √ | √ |
| Alpha158 | √ | √ |
这里有使用 Qlib 构建数据集的教程。
欢迎提交新的量化数据集 PR。
Qlib 高度可定制,许多组件都可学习。
可学习组件包括 预测模型 和 交易代理 的实例。它们基于 学习框架 层进行训练,然后应用于 工作流 层的多个场景。
学习框架也会利用 工作流 层(如共享 信息提取器,基于 执行环境 创建环境等)。
根据学习范式,可分为强化学习和监督学习:
- 监督学习的详细文档见这里。
- 强化学习的详细文档见这里。Qlib 的 RL 学习框架利用
工作流层的执行环境创建环境,支持NestedExecutor,可实现多层次策略/模型/代理的联合优化(如针对特定投资组合管理策略优化订单执行策略)。
如果你想快速了解 qlib 最常用的组件,可以尝试 notebooks 示例。
详细文档见 docs。 构建 HTML 格式文档需安装 Sphinx 及 readthedocs 主题。
cd docs/
conda install sphinx sphinx_rtd_theme -y
# 或者用 pip 安装
# pip install sphinx sphinx_rtd_theme
make html你也可以直接在线查看最新文档。
Qlib 正在持续开发中,开发计划见 github 项目。
Qlib 的数据服务器可部署为“离线”模式或“在线”模式,默认模式为离线模式。
在“离线”模式下,数据会本地部署。
在“在线”模式下,数据作为共享数据服务部署,数据及其缓存会被所有客户端共享。由于缓存命中率更高,数据检索性能有望提升,同时也会节省磁盘空间。在线模式文档见 Qlib-Server,可通过 Azure CLI 脚本一键部署。在线数据服务器源码见 Qlib-Server 仓库。
数据处理性能对 AI 等数据驱动方法至关重要。作为面向 AI 的平台,Qlib 提供了数据存储与处理的解决方案。为展示 Qlib 数据服务器的性能,我们与其他数据存储方案进行了对比。
我们通过同一任务评估多种存储方案性能:从股票市场(2007-2020 年,800 只股票每日 OHLCV 数据)生成包含 14 个特征/因子的因子数据集,涉及数据查询与处理。
| HDF5 | MySQL | MongoDB | InfluxDB | Qlib -E -D | Qlib +E -D | Qlib +E +D | |
|---|---|---|---|---|---|---|---|
| 单核总耗时(秒) | 184.4±3.7 | 365.3±7.5 | 253.6±6.7 | 368.2±3.6 | 147.0±8.8 | 47.6±1.0 | 7.4±0.3 |
| 64 核总耗时(秒) | 8.8±0.6 | 4.2±0.2 |
+(-)E表示有(无)ExpressionCache+(-)D表示有(无)DatasetCache
大多数通用数据库加载数据耗时较长。深入底层实现后发现,通用数据库方案中数据需经过多层接口和不必要的格式转换,极大拖慢了数据加载速度。 Qlib 数据以紧凑格式存储,便于高效组合为科学计算所需的数组。
- 如有任何问题,请在 这里 提 issue,或在 gitter 留言。
- 如希望为
Qlib做贡献,请提交 pull request。 - 其他事宜欢迎邮件联系(qlib@microsoft.com)。
- 我们正在招聘新成员(全职/实习),欢迎投递简历!
加入 IM 讨论群:
| Gitter |
|---|
Qlib 于 2020 年 9 月开源前为组内项目,遗憾的是内部提交历史未保留。组内许多成员也为 Qlib 做出了重要贡献,包括 Ruihua Wang、Yinda Zhang、Haisu Yu、Shuyu Wang、Bochen Pang 及 Dong Zhou。特别感谢 Dong Zhou 的初始版本。
本项目欢迎各种贡献和建议。 代码规范与开发指南 可参考提交 pull request。
贡献并不难。解决 issue(如回答 issues 列表 或 gitter 上的问题)、修复/提出 bug、完善文档甚至修正错别字,都是对 Qlib 的重要贡献。
如想为 Qlib 文档/代码做贡献,可参考下图步骤:
如不知如何开始,可参考以下示例:
| 类型 | 示例 |
|---|---|
| 解决问题 | 回答问题;提出或修复 bug |
| 文档 | 提升文档质量;修正错别字 |
| 新特性 | 实现需求特性 如 此;重构接口 |
| 数据集 | 新增数据集 |
| 模型 | 实现新模型,贡献模型说明 |
Good first issues 标签表示适合新手入门。
可通过 rg 'TODO|FIXME' qlib 查找 Qlib 中待完善实现。
如希望成为 Qlib 维护者(如协助合并 PR、管理 issue),请邮件联系(qlib@microsoft.com)。我们乐于协助提升权限。
大多数贡献需签署贡献者许可协议(CLA),声明你有权并实际授权我们使用你的贡献。详情见 https://cla.opensource.microsoft.com。
提交 pull request 时,CLA 机器人会自动判断是否需签署 CLA 并做相应标记(如状态检查、评论)。请按机器人指引操作。所有使用 CLA 的仓库只需签署一次。
本项目采用 Microsoft 开源行为准则。 更多信息见 行为准则 FAQ,或邮件联系 opencode@microsoft.com。