华泰人工智能系列之四十
核心观点
本文介绍微软 AI 量化投资平台 Qlib 基础和进阶功能,对比传统量化策略
开发流程和 Qlib 提供的解决方案,提炼 Qlib 特色及优势,并探讨笔者使用
体会。Qlib 于 2020 年 9 月公开初版源码,2020 年 12 月获微软官网报道
并引发热议。我们认为 Qlib 的主要优势在于:1)覆盖量化投资全过程,
用户无需切换工具包或编程语言,降低 AI 算法使用门槛;2)从工程实现
角度,对因子数据储存、因子计算等环节提出创新解决方案,提升运算性
能和开发效率,或能解决量化投资研究中的部分痛点。
笔者使用体会:侧重量价选股,解决部分痛点,开源或推动技术发展
笔者使用 Qlib 的体会是,Qlib 在“术”层面的创新要大于在“道”层面的
创新。Qlib 在宣传中称其为“业内首个 AI 量化投资开源平台”
,而就目前
公开的功能看,Qlib 的核心是“量价因子结合 AI 模型选股流程”
,在“道”
的层面未脱离传统因子选股方法论。在“术”的层面, Qlib 提出的数据存
储方案、表达式引擎等工程创新一定程度上能够解决研究中的部分痛点。
微软此次的开源尝试能够降低整个行业的学习和研发成本,或能推动量化
投资行业的技术发展。
Qlib 基础功能:以港股日频量价因子 LightGBM 选股策略为例
Qlib 官方推荐的学习素材有 GitHub 文档和在线文档,包含 A 股日频量价
因子 AI 选股策略案例,然而直接学习官方代码的“代入感”不强,并且官
方代码绕过了很多“坑”,但研究者在实际学习使用时可能绕不开这些“坑”
。
为了帮助读者快速上手 Qlib,我们参考官方代码,设计新的应用场景,以
港股日频量价因子 LightGBM 选股策略为例,分 Qlib 安装、数据准备、因
子生成、策略构建、结果展示各步骤,讲解 Qlib 基础功能。
Qlib 进阶功能:自定义策略组件
我们以自定义因子、标签、数据预处理方式、AI 模型为例讲解 Qlib 的进阶功
能。 AI 选股模型包含因子生成和预处理、模型训练、策略回测等组件,在 Qlib
中这些组件通过工作流 workflow 串联在一起,每个组件均有对应参数控制。
因此最简单的自定义策略方式是直接修改参数。另外,每个组件都有其对应源
码,更灵活的自定义策略方式是修改源码或仿照源码创建新的继承类。
Qlib 特色:覆盖量化投资全过程,拥有多项工程上的创新
Qlib 的设计初衷之一在于覆盖量化投资的全过程,为用户的 AI 算法提供高
性能的底层基础架构,降低 AI 算法的使用门槛,便于金融从业者使用。
Qlib 的“高性能底层基础架构”体现在多项工程上的创新,例如数据存储
方案、表达式引擎和缓存系统。据论文 Qlib: An AI-oriented Quantitative
Investment Platform 测试显示,Qlib 在读取原始数据和生成因子任务上的
性能表现优于传统关系型数据库 MySQL、非关系型数据库 MongoDB、时
序数据库 InfluxDB 和 HDF5。
风险提示:本文的港股 AI 选股策略仅作案例教学使用,不具备实际投资价
值,例如未剔除低价股、低流动性股票,训练集和测试集较短,未进行参
数优化等。Qlib 仍在开发中,部分功能未加完善和验证,使用存在风险。
人工智能挖掘市场规律是对历史的总结,市场规律在未来可能失效。人工
智能技术存在过拟合风险。
正文目录
研究导读 ........................................................................................................................... 4
快速上手 Qlib:以港股日频量价因子 AI 选股策略为例 ..................................................... 5
Qlib 安装 .................................................................................................................... 5
安装 Microsoft C++生成工具 ............................................................................. 5
setup.py 安装 ..................................................................................................... 6
数据准备 .................................................................................................................... 7
get_data 下载官方数据 ...................................................................................... 7
dump_all 转换用户数据格式 .............................................................................. 7
港股日频量价因子生成 .............................................................................................. 9
初始化运行环境和原始数据读取 ........................................................................ 9
自定义股票池 ................................................................................................... 11
Alpha158 因子库 ............................................................................................. 11
LightGBM 选股策略构建 ......................................................................................... 13
选股策略回测 .......................................................................................................... 16
回测和绩效分析结果展示 ........................................................................................ 18
Qlib 进阶:自定义策略组件 ............................................................................................ 20
自定义特征 .............................................................................................................. 20
自定义标签 .............................................................................................................. 21
更换数据预处理方法 ................................................................................................ 21
更换 AI 模型 ............................................................................................................ 23
其它功能 .................................................................................................................. 24
Qlib 特色及使用体会 ....................................................................................................... 25
Qlib 覆盖量化投资全过程 ........................................................................................ 25
传统量化投资策略开发 .................................................................................... 25
Qlib 的改进 ...................................................................................................... 26
工程创新:数据存储设计,表达式引擎,缓存系统 ................................................ 27
数据存储方案 ................................................................................................... 28
表达式引擎 ...................................................................................................... 29
缓存系统 .......................................................................................................... 30
使用体会:侧重量价选股,解决部分痛点,开源或推动技术发展 ........................... 30
参考文献 .................................................................................................................. 30
风险提示 .................................................................................................................. 31
图表目录
图表 1: Microsoft C++生成工具下载 .............................................................................. 5
图表 2: Microsoft C++生成工具安装 .............................................................................. 6
图表 3: setup.py 安装 Qlib ............................................................................................. 6
图表 4: get_data 下载官方数据...................................................................................... 7
图表 5: dump_all 转换前的 csv 文件 .............................................................................. 7
图表 6: 港股行情 csv 数据(以腾讯控股 0700 HK 为例) ............................................. 8
图表 7: csv 数据字段说明 .............................................................................................. 8
图表 8: dump_all 转换用户数据格式 .............................................................................. 9
图表 9: dump_all 转换后的 bin 和 txt 文件 ..................................................................... 9
图表 10: 初始化运行环境 ............................................................................................. 10
图表 11: 获取交易日期和全部股票代码 ....................................................................... 10
图表 12: 获取指定股票指定日期指定字段数据 ............................................................ 10
图表 13: 自定义股票池................................................................................................. 11
图表 14: 生成 Alpha158 特征(当期因子)和标签(下期收益) ................................ 12
图表 15: 获取 Alpha158 因子库标签(下期收益) ...................................................... 12
图表 16: 获取 Alpha158 因子库特征(当期因子) ...................................................... 13
图表 17: 导入 Qlib 模块代码 ........................................................................................ 14
图表 18: 定义股票池和基准指数代码 ........................................................................... 14
图表 19: 模型训练参数 task 的 AI 模型参数 model ...................................................... 14
图表 20: 模型训练参数 task 的 AI 模型参数 dataset .................................................... 15
图表 21: 因子生成参数 data_handler_config 和模型训练参数 task 设置代码.............. 15
图表 22: 模型训练代码................................................................................................. 16
图表 23: 策略回测参数 port_analysis_config ............................................................... 16
图表 24: 选股策略回测参数设置代码 ........................................................................... 17
图表 25: 选股策略回测代码 ......................................................................................... 17
图表 26: 回测和绩效分析结果读取代码 ....................................................................... 18
图表 27: AI 模型预测结果 IC 和 Rank IC ..................................................................... 18
图表 28: 策略净值、超额收益净值、最大回撤和换手率 .............................................. 19
图表 29: 各组件参数及对应源码所在路径.................................................................... 20
图表 30: 自定义特征代码 ............................................................................................. 20
图表 31: 通过设置参数自定义标签代码 ....................................................................... 21
图表 32: 通过修改因子库源码自定义标签代码 ............................................................ 21
图表 33: Qlib 内置数据预处理方法(qlib.data.dataset.processor)............................ 22
图表 34: Alpha158 和 Alpha360 因子库默认预处理方式 ............................................. 22
图表 35: 自定义数据预处理代码 .................................................................................. 22
图表 36: Qlib 内置 AI 模型(qlib.contrib.model)........................................................ 23
图表 37: 通过设置参数自定义 AI 模型代码 .................................................................. 23
图表 38: 通过创建新 Model 子类(如 SVR 支持向量回归)自定义 AI 模型代码 ......... 24
图表 39: 某团队人工智能选股模型开发流程 ................................................................ 25
图表 40: Qlib 提供的人工智能选股模型开发解决方案 ................................................. 26
图表 41: Qlib 的三层框架:基础架构层、量化投资流程层和交互层 ............................ 26
图表 42: Qlib 各模块的另一种拆解:静态流程、动态建模和分析模块 ........................ 27
图表 43: Qlib 高性能底层基础架构 .............................................................................. 28
图表 44: 不同因子数据存储方案的长处和短板 ............................................................ 28
图表 45: Qlib 数据存储方案 ......................................................................................... 29
图表 46: 不同因子数据存储方案下的性能比较 ............................................................ 29
图表 47: Qlib 缓存系统 ................................................................................................ 30
研究导读
2020 年 9 月,微软亚洲研究院在学术论文预印本平台 arXiv 发布论文 Qlib: An AI-oriented
Quantitative Investment Platform,公开其开发的业内首个 AI 量化投资开源平台 Qlib,并
在代码托管平台 GitHub 上开放源代码。2020 年 12 月,微软亚洲研究院在官网报道该消
息,一石激起千层浪。微软称 Qlib“通过创建一个通用的技术平台,帮助实现量化投资流
程的 AI 闭环”。
AI 量化投资开源平台对于量化投资领域的意义不凡。一套标准化的代码能提升整个行业的
研究效率,避免重复造轮子;代码开源使得研究者能够学习业内同行的先进经验,并根据
实际需求自由修改和添加功能。投资者关心的问题是,Qlib 是否如宣传得那么强大?Qlib
包含哪些功能,有哪些使用场景?Qlib 解决了传统量化策略开发流程中的哪些痛点?Qlib
的实际使用体验如何?
带着上述问题,笔者将从实操层面一探究竟。本文第一部分以港股日频量价因子 LightGBM
选股策略为例,带领读者快速上手 Qlib。第二部分深入讲解如何自定义策略中的各个组件,
如自定义因子、标签、数据预处理方式、AI 模型等环节。第三部分结合 Qlib 论文,介绍
Qlib 的特色以及相比传统量化策略开发流程的改进之处,最后谈谈笔者的使用体会。
我们认为,Qlib 的主要优势在于:1)覆盖量化投资全过程,用户无需切换工具包或编程
语言,降低 AI 算法使用门槛;2)从工程实现角度,对因子数据储存、因子计算等环节提
出创新解决方案,提升运算性能和开发效率,或能解决量化投资研究中的部分痛点。
快速上手 Qlib:以港股日频量价因子 AI 选股策略为例
Qlib 官方推荐的学习素材有 GitHub 文档(https://github.com/microsoft/qlib)和在线文档
(https://qlib.readthedocs.io/en/latest/index.html)。学习素材包含 A 股日频量价因子 AI
选股策略案例。然而直接学习官方代码的“代入感”不强,并且官方代码绕过了很多“坑”
,
但研究者在实际学习使用时可能绕不开这些“坑”
。为了帮助读者快速上手 Qlib,我们参
考官方代码,设计新的应用场景,以港股日频量价因子 AI 选股策略为例,分 Qlib 安装、
数据准备、因子生成、策略构建、结果展示各步骤,讲解 Qlib 使用方法。
Qlib 安装
Qlib 安装是读者容易遇到的第一个“坑”。首先推荐在 Python 3.7 及更新版的 Python 环
境下安装。Qlib 官方提供 1)pip 和 2)setup.py 两种安装方式。其中 pip 安装较为简单,
在命令行直接运行 pip install pyqlib 即可,将自动安装最新的 Qlib 稳定版。不过笔者经
Windows 和 Mac 系统下测试,更推荐 setup.py 方式。具体安装步骤如下。
安装 Microsoft C++生成工具
Qlib 运行依赖 Microsoft Visual C++ 14.0,否则安装过程中会报如下错误:
error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio":
https://visualstudio.microsoft.com/downloads/
注意这里仅安装运行组件(Microsoft Visual C++ Redistributable)无法解决此问题,需要
安装完整版 Microsoft Visual Studio 或者参考报错信息安装 Microsoft C++生成工具。生成
工具的下载链接为:https://visualstudio.microsoft.com/zh-hans/visual-cpp-build-tools/
图表1: Microsoft C++生成工具下载
资料来源:微软官网,华泰证券研究所
安装生成工具过程中,需要点选部分选项,参考微软官方建议链接及下图:
https://docs.microsoft.com/en-us/answers/questions/136595/error-microsoft-visual-c-14
0-or-greater-is-require.html
setup.py 安装
Qlib 官方给出的 setup.py 安装方式如下。首先安装或更新 numpy 和 cython 库,在命令行
运行 pip install numpy 和 pip install --upgrade cython 即可。
接下来的安装分两种情况:
1. 若已安装 git 并完成环境配置,在命令行运行下列指令即可:
git clone https://github.com/microsoft/qlib.git && cd qlib
python setup.py install
2. 若未安装 git,可在 GitHub 下载 zip 源码包(https://github.com/microsoft/qlib),解压
缩至任意路径,如笔者放在 C:/Users/username/anaconda3/Lib/site-packages/qlib,
确保 setup.py 文件在该路径下,随后在该路径下启动命令行,运行如下指令即可:
python setup.py install
Qlib 的 setup.py 安装方式将自动安装包含开发版在内的最新版。例如笔者在 2020 年 12
月 14 日安装的版本为 0.6.1.dev0。笔者办公网络环境不支持 git 安装,故采用上述第二种
方式,命令行安装过程如下图。
图表3: setup.py 安装 Qlib