Qlib是一个面向AI的量化投资平台,旨在实现潜力,增强研究能力并创造AI技术在量化投资中的价值。
它包含数据处理,模型训练,回测的完整ML管道;并涵盖了定量投资的整个链:alpha搜索,风险建模,投资组合优化和订单执行。
借助Qlib,用户可以轻松尝试想法,以创建更好的量化投资策略。
有关更多详细信息,请参阅我们的论文“ Qlib:面向AI的量化投资平台”。
Qlib框架
在模块级别,Qlib是一个由以上组件组成的平台。这些组件被设计为松耦合模块,每个组件可以独立使用。
名称 | 描述 |
---|---|
Infrastructure 层 |
Infrastructure 层为Quant研究提供了基础支持。DataServer 为用户提供了高性能的基础架构来管理和检索原始数据。Trainer 提供灵活的界面来控制模型的训练过程,从而使算法可以控制训练过程。 |
Workflow 层 |
Workflow 层涵盖了定量投资的整个工作流程。Information Extractor 提取模型数据。Forecast Model 专注于为其他模块生成各种预测信号(例如alpha,风险)。有了这些信号,Portfolio Generator 就会产生目标投资组合,并产生待执行的订单Order Executor 。 |
Interface 层 |
Interface 层尝试为基础系统提供用户友好的界面。Analyser 该模块将为用户提供有关预测信号,投资组合和执行结果的详细分析报告 |
- 手绘样式的模块正在开发中,并将在将来发布。
- 带有虚线边框的模块是高度用户可定制和可扩展的。
快速开始
本快速入门指南试图演示
- 构建完整的Quant研究工作流并使用Qlib尝试您的想法非常容易。
- 尽管具有公共数据和简单模型,但是机器学习技术在实际的Quant投资中效果很好。
这是一个快速演示,演示了如何使用进行安装Qlib
和运行LightGBM qrun
。但是,请确保已按照说明准备好数据。
安装
用户可以Qlib
根据以下命令通过pip轻松安装(当前,Qlib仅支持Python 3.6、3.7和3.8)。
点安装pyqlib
注意:pip将安装最新的稳定qlib。但是,qlib的主要分支正在积极开发中。如果要在主分支中测试最新的脚本或功能。请使用以下方法安装qlib。
此外,用户可以Qlib
按照以下步骤通过源代码安装最新的dev版本:
-
Qlib
从源安装之前,用户需要安装一些依赖项:点安装numpy pip install-升级cython
注意:请注意,
Qlib
从源代码安装时,在Python 3.6中安装cython会引发一些错误。如果用户在自己的计算机上使用Python 3.6,建议将Python升级到3.7版或使用conda
的PythonQlib
从源代码安装。 -
克隆存储库并按以下方式安装
Qlib
。- 如果
pip install pyqlib
之前尚未通过命令安装qlib :git clone https://github.com/microsoft/qlib.git && cd qlib python setup.py安装
- 如果您已经通过以下命令安装了稳定版本
pip install pyqlib
:git clone https://github.com/microsoft/qlib.git && cd qlib 点安装。
注意:只有命令
pip install .
可以覆盖安装的稳定版本pip install pyqlib
,而命令python setup.py install
不能。 - 如果
提示:如果您无法Qlib
在环境中安装或运行示例,则比较步骤和CI工作流程可能有助于您发现问题。
资料准备
通过运行以下代码来加载和准备数据:
Python脚本/ get_data.py qlib_data --target_dir 〜 /.qlib/qlib_data/cn_data --region CN
该数据集由爬虫脚本收集的公共数据创建,这些爬虫脚本已在同一存储库中发布。用户可以使用它创建相同的数据集。
请注意,数据是从Yahoo Finance收集的,数据可能并不完美。如果用户拥有高质量的数据集,我们建议他们准备自己的数据。有关更多信息,用户可以参考相关文档。
自动定量研究工作流程
Qlib提供了一个名为qrun
自动运行整个工作流程的工具(包括构建数据集,训练模型,回测和评估)。您可以按照以下步骤启动自动定量研究工作流程并进行图形报告分析:
-
定量研究工作流程:运行
qrun
与lightgbm工作流程配置(workflow_config_lightgbm_Alpha158.yaml如下。cd示例 #避免在包含qlib目录的目录下运行程序 qrun基准/LightGBM/workflow_config_lightgbm_Alpha158.yaml
的结果
qrun
如下,有关结果的更多详细信息,请参阅日内交易。“以下是超额收益无成本的分析结果。' 风险 均值0.000708 标准0.005626 Annualized_return 0.178316 信息比率1.996555 max_drawdown -0.081806 “以下是超额收益与成本的分析结果。' 风险 均值0.000512 标准0.005626 Annualized_return 0.128982 信息比率1.444287 max_drawdown -0.091078
以下是
qrun
和工作流程的详细文档。 -
图形报表分析:运行
examples/workflow_by_code.ipynb
与jupyter notebook
得到的图形报告
通过代码构建定制的量化研究工作流
自动工作流程可能不适合所有Quant研究人员的研究工作流程。为了支持灵活的Quant研究工作流,Qlib还提供了模块化界面,允许研究人员通过代码构建自己的工作流。这是通过代码定制的Quant研究工作流的演示。
定量模型动物园
这是建立在上的模型的列表Qlib
。
- 基于LightGBM的GBDT(Guolin Ke等)
- 基于Catboost的GBDT(Liudmila Prokhorenkova等)
- 基于XGBoost的GBDT(Tianqi Chen等)
- 基于pytorch的MLP
- 基于pytorch的GRU(Kyunghyun Cho等)
- 基于pytorcn的LSTM(Sepp Hochreiter等)
- 基于pytorcn的ALSTM(姚钦等)
- 基于火炬的GAT(Petar Velickovic等)
- 基于pytorch的SFM(Liheng Zhang等)
- 基于张量流的TFT(Bryan Lim等)
非常欢迎您对新的Quant型号进行PR。
可在此处找到每个模型在Alpha158
和Alpha360
数据集上的性能。
运行一个模型
上面列出的所有模型都可以通过运行Qlib
。用户可以通过基准文件夹找到我们提供的配置文件以及有关该模型的一些详细信息。可以在上面列出的模型文件中检索更多信息。
Qlib
提供了三种运行单个模型的不同方法,用户可以选择最适合其情况的一种:
-
用户可以使用上述工具
qrun
从配置文件中运行模型的工作流程。 -
用户可以创建一个
workflow_by_code
基于Python脚本一个中列出的examples
文件夹中。 -
用户可以使用文件夹中
run_all_model.py
列出的脚本examples
来运行模型。这是要使用的特定shell命令的示例:python run_all_model.py --models=lightgbm
,其中--models
参数可以采用上面列出的任意数量的模型(可用的模型可以在基准测试中找到)。有关更多用例,请参考文件的docstrings。
运行多个模型
Qlib
还提供了run_all_model.py
可以运行多个模型进行多次迭代的脚本。(注意:该脚本目前仅支持Linux。将来将支持其他操作系统。此外,它还不支持同时运行同一模型多次的parrallel,并且在将来的开发中也将修复。)
该脚本将为每个模型创建一个唯一的虚拟环境,并在训练后删除该环境。因此,只会生成和存储诸如IC
和的实验结果backtest
。
这是运行所有模型进行10次迭代的示例:
python run_all_model。py 10
它还提供了可以立即运行特定模型的API。有关更多用例,请参考文件的docstrings。
定量数据集动物园
数据集在Quant中起着非常重要的作用。这是建立在Qlib
以下基础上的数据集的列表:
数据集 | 美国市场 | 中国市场 |
---|---|---|
Alpha360 | √ | √ |
Alpha158 | √ | √ |
这是使用生成数据集的教程Qlib
。我们欢迎您建立新的Quant数据集的PR。
有关Qlib的更多信息
详细文档在docs中组织。 Sphinx和readthedocs主题是构建html格式的文档所必需的。
cd docs / conda安装sphinx sphinx_rtd_theme -y #否则,你可以用PIP安装它们 #画中画安装狮身人面像sphinx_rtd_theme 将HTML
您也可以直接在线查看最新文档。
Qlib正在积极且持续的发展中。我们的计划在路线图中,该路线图作为github项目管理。
离线模式和在线模式
Qlib的数据服务器可以部署为Offline
mode或Online
mode。默认模式是离线模式。
在Offline
模式下,数据将在本地部署。
在Online
模式下,数据将被部署为共享数据服务。数据及其缓存将由所有客户端共享。由于较高的高速缓存命中率,因此有望提高数据检索性能。它也会消耗更少的磁盘空间。在线模式的文档可以在Qlib-Server中找到。可以使用基于Azure CLI的脚本自动部署联机模式。在线数据服务器的源代码可以在Qlib-Server仓库中找到。
Qlib数据服务器的性能
数据处理的性能对于像AI技术这样的数据驱动方法很重要。作为一个面向AI的平台,Qlib为数据存储和数据处理提供了一个解决方案。为了演示Qlib数据服务器的性能,我们将其与其他几种数据存储解决方案进行了比较。
我们通过完成同一任务来评估几种存储解决方案的性能,该任务将从股票市场(2007年至2020年每天800支股票)的基本OHLCV每日数据中创建一个数据集(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数据以紧凑格式存储,可以高效地组合成数组以进行科学计算。
相关报告
贡献
该项目欢迎您的贡献和建议。大多数捐款要求您同意一份《捐款者许可协议》(CLA),声明您有权并实际上确实授予我们使用您的捐款的权利。有关详细信息,请访问https://cla.opensource.microsoft.com。
当您提交拉取请求时,CLA机器人会自动确定您是否需要提供CLA并适当地装饰PR(例如,状态检查,评论)。只需按照机器人提供的说明进行操作即可。您只需使用我们的CLA在所有存储库中执行一次即可。
该项目采用了Microsoft开源行为准则。有关更多信息,请参见《行为准则》常见问题解答,或与[email protected]联系,并提出其他任何问题或意见。