有什么新消息! 💖
最近发布的功能
特征 | 地位 |
---|---|
KRNN 和三明治模型 | 📈发布于 2023 年 5 月 26 日 |
发布 Qlib v0.9.0 | 发布于 2022 年 12 月 9 日 |
强化学习学习框架 | 🔨 📈 发布于 2022 年 11 月 10 日。#1332、#1322、#1316、#1299、#1263、#1244、#1169、#1125、#1076 |
HIST 和 IGMTF 模型 | 📈发布于 2022 年 4 月 10 日 |
Qlib笔记本教程 | 📖发布于 2022 年 4 月 7 日 |
伊博维斯帕指数数据 | 🍚发布于 2022 年 4 月 6 日 |
时间点数据库 | 🔨发布于 2022 年 3 月 10 日 |
Arctic 提供商后端和订单簿数据示例 | 🔨发布于 2022 年 1 月 17 日 |
基于元学习的框架和 DDG-DA | 📈 🔨发布于 2022 年 1 月 10 日 |
基于规划的投资组合优化 | 🔨发布于 2021 年 12 月 28 日 |
发布 Qlib v0.8.0 | 发布于 2021 年 12 月 8 日 |
添加模型 | 📈发布于 2021 年 11 月 22 日 |
ADARNN模型 | 📈发布于 2021 年 11 月 14 日 |
TCN模型 | 📈发布于 2021 年 11 月 4 日 |
嵌套决策框架 | 🔨于 2021 年 10 月 1 日发布。示例和文档 |
时间路由适配器 (TRA) | 📈发布于 2021 年 7 月 30 日 |
变压器和本地变压器 | 📈发布于 2021 年 7 月 22 日 |
发布 Qlib v0.7.0 | 发布于 2021 年 7 月 12 日 |
TCTS模型 | 📈 2021 年 7 月 1 日发布 |
在线服务和自动模型滚动 | 🔨 发布于 2021 年 5 月 17 日 |
双系综模型 | 📈发布于 2021 年 3 月 2 日 |
高频数据处理示例 | 🔨发布于 2021 年 2 月 5 日 |
高频交易示例 | 📈 2021 年 1 月 28 日发布的部分代码 |
高频数据(1分钟) | 🍚发布于 2021 年 1 月 27 日 |
平板电脑型号 | 📈发布于 2021 年 1 月 22 日 |
此处未列出 2021 年之前发布的功能。
Qlib是一个开源的、面向人工智能的量化投资平台,旨在利用人工智能技术在量化投资中从探索想法到落地产品,发挥潜力、赋能研究、创造价值。 Qlib 支持多种机器学习建模范例,包括监督学习、市场动态建模和强化学习。
Qlib 正在发布越来越多不同范式的 SOTA Quant 研究著作/论文,以协作解决量化投资的关键挑战。例如,1) 使用监督学习从丰富且异构的金融数据中挖掘市场复杂的非线性模式,2) 使用自适应概念漂移技术对金融市场的动态性质进行建模,以及 3) 使用强化学习对持续投资进行建模决策并协助投资者优化交易策略。
它包含数据处理、模型训练、回测的完整机器学习流程;涵盖量化投资的整个链条:阿尔法寻求、风险建模、投资组合优化和订单执行。更多详情请参阅我们的论文《Qlib:面向人工智能的量化投资平台》。
框架、教程、数据和 DevOps | 定量研究的主要挑战和解决方案 |
---|---|
计划
正在开发的新功能(按预计发布时间排序)。您对这些功能的反馈非常重要。
Qlib框架
Qlib的高层框架可以在上面找到(用户可以在深入了解Qlib设计的详细框架时找到)。这些组件被设计为松耦合模块,每个组件都可以独立使用。
Qlib 提供了强大的基础设施来支持定量研究。数据始终是重要的组成部分。强大的学习框架旨在支持不同层次的不同学习范式(例如强化学习、监督学习)和模式(例如市场动态建模)。通过对市场进行建模,交易策略将生成将要执行的交易决策。不同级别或粒度的多种交易策略和执行器可以嵌套在一起进行优化和运行。最后,将提供全面的分析,并且模型可以低成本地在线服务。
快速开始
本快速入门指南试图演示
- 使用Qlib构建完整的定量研究工作流程并尝试您的想法非常容易。
- 尽管有公开数据和简单模型,机器学习技术在实际的量化投资中效果很好。
这是一个快速演示,展示了如何安装Qlib
和运行 LightGBM qrun
。但是,请确保您已经按照说明准备好数据。
安装
下表展示了受支持的 Python 版本Qlib
:
使用 pip 安装 | 从源安装 | 阴谋 | |
---|---|---|---|
Python 3.7 | ✔️ | ✔️ | ✔️ |
Python 3.8 | ✔️ | ✔️ | ✔️ |
Python 3.9 | ❌ | ✔️ | ❌ |
笔记:
- 建议使用Conda来管理您的 Python 环境。在某些情况下,在环境之外使用Python
conda
可能会导致头文件丢失,从而导致某些包安装失败。 - 请注意,在 Python 3.6 中安装 cython
Qlib
从源代码安装时会出现一些错误。如果用户在机器上使用Python 3.6,建议将Python升级到3.7版本或使用conda
PythonQlib
从源安装。 - 对于Python 3.9,
Qlib
支持运行工作流程,例如训练模型、进行回测并绘制大多数相关图形(包括在笔记本中)。不过,目前不支持模型性能绘图,我们将在将来升级依赖包时修复此问题。 Qlib
需要tables
包,hdf5
表中不支持python3.9。
使用 pip 安装
用户可以Qlib
按照以下命令通过pip轻松安装。
pip install pyqlib
注意:pip 将安装最新的稳定 qlib。然而,qlib 的主要分支正在积极开发中。如果你想测试主分支中最新的脚本或函数。请使用以下方法安装qlib。
从源安装
Qlib
另外,用户可以按照以下步骤通过源码安装最新的dev版本:
-
在从源安装之前
Qlib
,用户需要安装一些依赖项:pip install numpy pip install --upgrade cython
-
克隆存储库并按
Qlib
如下方式安装。git clone https://github.com/microsoft/qlib.git && cd qlib pip install .
注意
python setup.py install
:您也可以安装 Qlib 。但这不是推荐的方法。它会跳过pip
并导致难以理解的问题。例如,只有命令pip install .
可以覆盖安装的稳定版本pip install pyqlib
,而命令则python setup.py install
不能。
提示:如果您无法Qlib
在您的环境中安装或运行示例,比较您的步骤和CI 工作流程可能会帮助您找到问题。
Mac 提示:如果您将 Mac 与 M1 一起使用,则在构建 LightGBM 轮子时可能会遇到问题,这是由于缺少 OpenMP 的依赖项造成的。要解决这个问题,先安装openmp brew install libomp
,然后运行pip install .
即可成功构建。
数据准备
通过运行以下代码加载并准备数据:
通过模块获取
# get 1d data
python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# get 1min data
python -m qlib.run.get_data qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
从源头获取
# get 1d data
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn
# get 1min data
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
该数据集是由爬虫脚本收集的公共数据创建的,这些数据已在同一存储库中发布。用户可以用它创建相同的数据集。数据集描述
请注意,数据来自雅虎财经,数据可能并不完美。如果用户拥有高质量的数据集,我们建议用户准备自己的数据。如需了解更多信息,用户可以参考相关文档。
自动更新每日频率数据(来自雅虎财经)
如果用户只想在历史数据上尝试他们的模型和策略,则此步骤是可选的。
建议用户手动更新一次数据(--trading_date 2021-05-25),然后设置为自动更新。
注意:用户无法基于Qlib提供的离线数据增量更新数据(删除了一些字段以减少数据大小)。用户应该使用雅虎收集器从头开始下载雅虎数据,然后增量更新它。
更多信息请参考:yahoo Collector
-
每个交易日自动更新数据到“qlib”目录(Linux)
-
使用crontab:
crontab -e
-
设置定时任务:
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>* * * * 1-5 python <script path> update_data_to_bin --qlib_data_1d_dir <user data dir> </code></span></span></span>
- 脚本路径:scripts/data_collector/yahoo/collector.py
-
-
手动更新数据
<span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><span style="color:var(--fgColor-default, var(--color-fg-default))"><span style="background-color:var(--bgColor-muted, var(--color-canvas-subtle))"><code>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> </code></span></span></span>
- Trading_date : 交易日开始
- end_date : 交易日结束(不包括在内)
自动定量研究工作流程
Qlib 提供了一个名为qrun
自动运行整个工作流程的工具(包括构建数据集、训练模型、回测和评估)。您可以按照以下步骤启动自动定量研究工作流程并进行图形报告分析:
-
定量研究工作流程:
qrun
使用 lightgbm 工作流程配置运行(workflow_config_lightgbm_Alpha158.yaml,如下所示。cd examples # Avoid running program under the directory contains `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
如下,详细结果请参见日内交易。'The following are analysis results of the excess return without cost.' risk mean 0.000708 std 0.005626 annualized_return 0.178316 information_ratio 1.996555 max_drawdown -0.081806 'The following are analysis results of the excess return with cost.' risk mean 0.000512 std 0.005626 annualized_return 0.128982 information_ratio 1.444287 max_drawdown -0.091078
以下是详细的文档
qrun
和工作流程。 -
图形报告分析:运行
examples/workflow_by_code.ipynb
以jupyter notebook
获取图形报告-
预测信号(模型预测)分析
-
投资组合分析
-
对上述结果的解释
-
通过代码构建定制的定量研究工作流程
自动工作流程可能不适合所有定量研究人员的研究工作流程。为了支持灵活的定量研究工作流程,Qlib 还提供了模块化接口,允许研究人员通过代码构建自己的工作流程。这是通过代码定制的定量研究工作流程的演示。
定量研究的主要挑战和解决方案
量化投资是一个非常独特的场景,有许多关键挑战需要解决。目前,Qlib 为其中的几个提供了一些解决方案。
预测:寻找有价值的信号/模式
准确预测股价走势是构建盈利投资组合的重要组成部分。然而,金融市场中数据量巨大、格式多样,给建立预测模型带来了挑战。
越来越多的 SOTA Quant 研究著作/论文,重点关注构建预测模型以挖掘复杂金融数据中的有价值的信号/模式,Qlib
以下是基于 构建的模型列表Qlib
。
- 基于 XGBoost 的 GBDT(Tianqi Chen 等人 KDD 2016)
- 基于LightGBM的GBDT(Guolin Ke等人,NIPS 2017)
- 基于 Catboost 的 GBDT(Liudmila Prokhorenkova 等人。NIPS 2018)
- 基于pytorch的MLP
- 基于pytorch的LSTM(Sepp Hochreiter等人神经计算1997)
- 基于 pytorch 的 GRU(Kyunghyun Cho 等人,2014 年)
- 基于pytorch的ALSTM(姚勤等人,IJCAI 2017)
- 基于 pytorch 的 GAT (Petar Velickovic, et al. 2017)
- 基于pytorch的SFM(Liheng Zhang等人KDD 2017)
- 基于张量流的 TFT(Bryan Lim 等人。International Journal of Forecasting 2019)
- 基于 pytorch 的 TabNet (Sercan O. Arik, et al. AAAI 2019)
- 基于 LightGBM 的 DoubleEnsemble(Chuheng Zhang 等人 ICDM 2020)
- 基于pytorch的TCTS(Xueqing Wu等人ICML 2021)
- 基于 pytorch 的 Transformer(Ashish Vaswani 等人 NeurIPS 2017)
- 基于pytorch的Localformer(Juyong Jiang等人)
- 基于 pytorch 的 TRA (Hengxu, Dong, et al. KDD 2021)
- 基于pytorch的TCN(Shaojie Bai等人,2018)
- 基于 pytorch 的 ADARNN (YunTao Du, et al. 2021)
- 基于pytorch的ADD(唐洪顺等人,2020)
- 基于pytorch的IGMTF (Wentao Xu, et al.2021)
- 基于pytorch的HIST(Wentao Xu等人2021)
- 基于pytorch的KRNN
- 基于pytorch的三明治
非常欢迎您对新 Quant 模型的公关。
可以在此处Alpha158
找到每个模型在和数据集上的性能。Alpha360
运行单个模型
上面列出的所有模型都可以运行Qlib
。用户可以通过benchmarks文件夹找到我们提供的配置文件以及有关模型的一些详细信息。更多信息可以在上面列出的模型文件中检索。
Qlib
提供了三种不同的方式来运行单个模型,用户可以选择最适合自己情况的一种:
-
用户可以使用上述工具
qrun
从配置文件运行模型的工作流程。 -
用户可以
workflow_by_code
根据文件夹中列出的脚本examples
创建 python 脚本。 -
run_all_model.py用户可以使用文件夹中列出的脚本
examples
来运行模型。以下是要使用的特定 shell 命令的示例:python run_all_model.py run --models=lightgbm
,其中--models
参数可以采用上面列出的任意数量的模型(可用模型可以在基准测试中找到)。有关更多用例,请参阅文件的docstrings。- 注意:每个基线都有不同的环境依赖,请确保您的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 来立即运行特定模型。有关更多用例,请参阅文件的docstrings。
由于金融市场环境的非平稳性,不同时期的数据分布可能会发生变化,这使得建立在训练数据上的模型的性能在未来的测试数据中出现衰减。因此,使预测模型/策略适应市场动态对于模型/策略的性能非常重要。
以下是基于 的解决方案列表Qlib
。
强化学习:建模连续决策
Qlib 现在支持强化学习,该功能旨在模拟持续投资决策。此功能可帮助投资者通过从与环境的交互中学习来优化其交易策略,以最大化累积奖励的某些概念。
Qlib
以下是按场景分类的解决方案列表。
定量数据集动物园
数据集在Quant中起着非常重要的作用。以下是构建的数据集的列表Qlib
:
数据集 | 美国市场 | 中国市场 |
---|---|---|
阿尔法360 | √ | √ |
阿尔法158 | √ | √ |
这是使用 构建数据集的教程Qlib
。非常欢迎您构建新的定量数据集的 PR。
学习框架
Qlib 具有高度可定制性,并且它的许多组件都是可以学习的。可学习组件是Forecast Model
和的实例Trading Agent
。它们是基于Learning Framework
层学习的,然后应用于Workflow
层中的多个场景。学习框架Workflow
也利用了该层(例如共享Information Extractor
、基于创建环境Execution Env
)。
根据学习范式,可以分为强化学习和监督学习。
- 对于监督学习,详细的文档可以在这里找到。
- 对于强化学习,详细的文档可以在这里找到。 Qlib 的 RL 学习框架利用
Execution Env
层Workflow
来创建环境。值得注意的是,它NestedExecutor
也受到支持。这使用户能够一起优化不同级别的策略/模型/代理(例如,针对特定投资组合管理策略优化订单执行策略)。
关于 Qlib 的更多信息
如果你想快速浏览一下 qlib 最常用的组件,你可以尝试这里的笔记本。
详细文档组织在docs中。 以 html 格式构建文档需要Sphinx和 readthedocs 主题。
cd docs/
conda install sphinx sphinx_rtd_theme -y
# Otherwise, you can install them with pip
# pip install sphinx sphinx_rtd_theme
make html
您还可以直接在线查看最新文档。
Qlib 正在积极持续的开发中。我们的计划在路线图中,它作为github 项目进行管理。
离线模式和在线模式
Qlib的数据服务器可以部署为Offline
模式或Online
模式。默认模式为离线模式。
模式下Offline
,数据将部署在本地。
在Online
模式下,数据将被部署为共享数据服务。数据及其缓存将由所有客户端共享。由于缓存命中率较高,预计数据检索性能将得到改善。它也会消耗更少的磁盘空间。在线模式的文档可以在Qlib-Server中找到。在线模式可以使用基于Azure CLI的脚本自动部署。在线数据服务器的源代码可以在Qlib-Server存储库中找到。
Qlib 数据服务器的性能
数据处理的性能对于人工智能技术等数据驱动方法非常重要。 Qlib作为一个面向AI的平台,提供了数据存储和数据处理的解决方案。为了演示 Qlib 数据服务器的性能,我们将其与其他几种数据存储解决方案进行比较。
我们通过完成相同的任务来评估几种存储解决方案的性能,该任务根据股票市场的基本 OHLCV 每日数据(2007 年至 2020 年每天 800 只股票)创建一个数据集(14 个特征/因素)。任务涉及数据查询和处理。
HDF5 | MySQL | MongoDB | InfluxDB | Qlib-E-D | Qlib +E -D | Qlib +E +D | |
---|---|---|---|---|---|---|---|
总计 (1CPU)(秒) | 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 |
总计 (64CPU)(秒) | 8.8±0.6 | 4.2±0.2 |
+(-)E
表示(出)ExpressionCache
+(-)D
表示(出)DatasetCache
大多数通用数据库需要花费太多时间来加载数据。在深入研究底层实现后,我们发现通用数据库解决方案中的数据经过了太多层接口和不必要的格式转换。这种开销极大地减慢了数据加载过程。 Qlib 数据以紧凑的格式存储,可以有效地组合成数组以进行科学计算。