Qlib教程——基于源码(一)背景与项目总览

Qlib背景介绍部分不多说,最近发现Qlib的框架思路与我自己打算做的投研平台出乎意料的完全相同,网上Qlib的教程大多比较浅显,要么介绍如何安装、要么只介绍如何直接调用api下载数据。如何说实话直接介绍该框架的api如何使用,是小白看不懂也用不会、大佬又嫌弃的鸡肋行为。

如果是出于拿来主义,一般情况下的学习方法可以直接阅读说明文档:
https://qlib.readthedocs.io/en/latest/index.html 跟着慢慢copy代码一步一步运行即可。

而对于魔改党,当然是希望可以基于前人的伟大贡献,开发自己的量化投研项目代码,因此深入解析源码是必要的。基于此目的,本系列博客一边作为笔者的学习笔记,一边帮助后来入坑者,希望可以共勉!

再多啰嗦点关于量化投研平台的项目,国内目前比较成熟的是backertrader、vnpy、quantaxis等,也算各有优劣,backertrader优点在于回测;vnpy是做期货CTA起家,现在也支持股票,优点在于完美支持国内实盘和各种策略调参;quantaxis有一套用户友好的UI界面,方便投研工作和策略管理。

而Qlib的最大优点在于什么呢?——在于打造从深度学习算法模型,到基于预测结果的投资组合。这也是我自己构建的从深度学习选股模型到mlflow模型管理,再通过自建回测系统进行回测分析,并希望最后实盘交易的项目思路。

因此,笔者打算深入学习Qlib的框架,希望可以取长补短。当然,现在看来Qlib很多地方似乎也还不够成熟,但其独特的支持从机器学习模型管理到策略回测的架构是独一无二的,况且Qlib是松散耦合结构,各个模块都还可以自定义改进。

项目框架

本项目基于版本v0.8.4,项目框架如下图所示:
Qlib教程——基于源码(一)背景与项目总览_第1张图片
别怕,正常人直接看到这个图都是要骂娘的。很多自认为为教程的东西,上来就放这么一个框架图,我认为这不是蠢就是懒。。。

我们先不用管上图说了些什么。框架思路很简单,其实就三大块——数据、模型(策略)、评估。 注意,Qlib和其他量化投研最不一样的地方在于,摒弃了传统的投资策略构建模块,取而代之的是模型,或者说机器学习模型模块。笔者认为,在未来的量化时代,基于机器学习模型的量化策略会在很大程度上取代传统的人工构建的策略方法。

三大块更加详细点,就是以下几个步骤:

  • 数据
    • 下载
    • 加工
    • 切片
  • 模型
    • 训练与推理
    • 保存与加载
  • 评估
    • 预测信号分析
    • 回测

前两个步骤是很容易理解的机器学习模型步骤。评估部分中的预测信号,需要金融领域的先验知识,根据模型预测结果构建交易方法;信号分析可以采用金融领域传统的IC等方法;回测部分就是根据构建的交易方法进行回测,这里有个吸引我眼球的是支持“Design of Nested Decision Execution Framework for High-Frequency Trading”高频交易嵌套决策执行框架的设计,用人话就是支持日间交易和日内交易的组合,这样方便构建日内风控方法,或者拆单交易等,不过现在还没有读源码,希望项目真的已经做到了这些。对于评估中的回测引擎部分,是被网上很多文章所诟病的,认为其与传统回测框架并不适用,且效率较低。这部分的具体原因在于,Qlib的回测引擎是采用了基于强化学习的框架,目的是希望可以直接对接于强化学习模型,从而对操作策略再进行优化。当然,这一部分目前相对来说尚不成熟,很难直接用于生产环境,但是对于AI方向的学习者而言是非常难得的,笔者也相信,这一套方法在未来也将取代当前的传统回测框架。笔者自己的打算是对这部分进行解耦,再加上一套根据模型信号进行人工策略回测的传统做法。

除此之外,框架中的Qlib Recorder模块,可以记录实验参数和结果等,应该是参考了mlflow,刚好,笔者的深度学习模型也是选择使用mlflow来管理,但是显然项目还没有做出UI界面,有需要的话自己魔改一下应该可以实现。

最后,就是项目中的online模块,也就是可以支持项目数据每天自动更新、自动训练、自动预测以及服务器部署等等,也是比较实用的工具。

源码框架目录如图所示:

Qlib教程——基于源码(一)背景与项目总览_第2张图片
其中,examples是各种例子可以先不用管。我们主要看qlib1和scripts文件中的代码(为了避免和pip安装的qlib库冲突,我把这里文件内的qlib改为了qlib1)。

  • backtest 显然是回测相关
  • contrib 是比较上层的代码,个人目前的理解为自定义的模型、策略等
  • data 数据部分
  • model 模型相关基类
  • rl 这个比较出乎意料,也比较惊喜,是强化学习相关,我个人也认为强化学习未来也可以在量化投资领域大显身手,但目前还未完全上手,不知qlib现在做到何种地步。
  • strategy 策略相关基类
  • tests 与数据下载有关
  • utils 包括时间、日历等等工具函数
  • workflow 比较上层的代码,工作流函数
  • scripts 也是和数据有关,下文将以此开始讲解
  • tests 这个tests和qlib1文件内的tests并不同,还没细看,目前理解为还处于测试阶段的代码。

第一篇,到此为止。下一篇,将讲解数据下载与处理部分。

你可能感兴趣的:(量化投资专栏,python,pytorch)