目录
Qlib: 人工智能导向的量化投资平台
作者:杨晓、刘维清、周栋、卞江、刘铁岩
机构:微软研究院
英文版:“Qlib: An AI-oriented Quantitative Investment Platform”
代码:https://github.com/microsoft/qlib
摘要
量化投资旨在通过在一系列金融工具的连续交易期间内最大化回报并最小化风险。近年来,受人工智能(AI)技术的快速发展及其在量化投资领域的巨大潜力启发,AI驱动的工作流程在量化研究和实际投资中得到了越来越广泛的应用。在丰富量化投资方法论的同时,AI技术也为量化投资系统带来了新的挑战。特别是,新的量化投资学习范式要求基础设施升级以适应更新的工作流程;此外,AI技术的数据驱动特性表明需要更高性能的基础设施;另外,在金融场景中应用AI技术解决不同任务时存在一些独特挑战。为了应对这些挑战并弥合AI技术与量化投资之间的差距,我们设计并开发了Qlib,旨在实现AI技术在量化投资中的潜力、赋能研究并创造价值。
1 引言
量化投资作为最热门的研究领域之一,吸引了来自学术界和金融行业的众多杰出人才。在过去几十年中,通过不断优化量化方法论,专业投资界总结出了一套完善但仍有改进空间的量化研究工作流程。近期,新兴的AI技术为这一研究领域开启了新趋势。随着对探索AI技术在量化投资中巨大潜力的关注日益增加,量化研究者已在实际投资中广泛采用了AI技术。
在AI技术丰富量化投资方法论的同时,它们也从多个方面对量化投资系统提出了新的挑战。首先,AI技术的灵活性导致量化投资工作流程的技术革新,要求新的支持性基础设施。例如,传统量化投资通常将整个工作流程分为若干子任务,包括股票趋势预测、投资组合优化等,而AI技术使得构建直接生成最终投资组合的端到端解决方案成为可能。为了支持这种端到端解决方案,由于其数据驱动的特性,必须升级当前的基础设施。
与此同时,AI技术需要应对一些新场景中的独特问题,这要求同时具备丰富的金融领域知识和数据科学经验。在没有领域适配的情况下,将AI解决方案直接应用于量化研究任务往往效果不佳。这种情况导致了对平台的迫切需求,以适应AI时代下的现代量化研究工作流程,并为AI技术在金融场景中的应用提供指导。
因此,我们提出了一个新的AI导向的量化投资平台,称为Qlib¹。它旨在协助研究人员探索AI技术在量化投资中的巨大潜力,并赋能量化研究者在AI驱动的量化投资中创造更大的价值。具体而言,Qlib的AI导向框架设计为支持AI解决方案。此外,它提供了专为量化投资场景设计的高性能基础设施,使许多AI研究课题成为可能。此外,Qlib集成了为量化投资场景中的机器学习设计的工具集,以帮助用户充分利用AI技术。
最后,我们展示了一些使用案例,并通过比较几种典型量化投资任务的解决方案,评估了Qlib基础设施的性能。结果表明,Qlib专为量化投资设计的基础设施在该任务上优于大多数现有解决方案。
¹代码可在 https://github.com/microsoft/qlib 获取。
2 背景与相关工作
在本节中,我们将首先展示现代量化研究者在应用AI技术于量化投资时面临的主要实际问题,这些问题促成了Qlib的诞生。之后,我们将简要介绍相关工作。
2.1 实际问题
量化研究工作流程的变革
在传统的投资研究工作流程中,研究者通常基于若干因子(类似于机器学习中的特征)及基础金融数据,通过线性模型[Petkova, 2006]或手动设计的规则[Murphy, 1999]开发交易信号。随后,遵循一种交易策略(通常为Barra模型[Sheikh, 1996])生成目标投资组合。最后,研究者通过回测功能评估交易信号和投资组合。
随着AI技术的兴起,传统量化投资迎来了技术变革。传统量化研究工作流程过于初级,无法适应如此灵活的技术。为了更直观地展示差异,我们将展示基于AI技术的典型现代研究工作流程。它从包含大量特征(通常超过数百维)的数据集开始。手动设计如此数量的特征耗时极长,常用机器学习算法自动生成此类特征[Potvin et al., 2004; Neely et al., 1997; Allen and Karjalainen, 1999; Kakushadze, 2016]。生成数据[Feng et al., 2019]是构建数据集的另一种选择。基于多样化的数据集,研究者提出了数百种机器学习方法来挖掘交易信号[Sezer et al., 2019]。研究者可以基于此类交易信号生成目标投资组合。但这种工作流程并非唯一选择。强化学习(RL)提供了一种从数据到最终交易行为的端到端解决方案,而不是将任务分为多个阶段[Deng et al., 2016]。强化学习通过与环境(在金融场景中为交易模拟器)交互来优化交易策略。强化学习需要一个响应式模拟器,而不是传统的回测功能。此外,大多数AI算法具有复杂的超参数,需要仔细调优。
AI技术极为灵活,已超出为传统方法设计的现有工具的范围。从头构建基于AI技术的研究工作流程耗时甚多。
基础设施的高性能要求
随着AI技术的兴起,对基础设施的要求发生了变化。这种数据驱动的方法可能需要处理海量数据。在高频交易场景中,数据量可达TB级别。此外,从仅包含五个维度的基本价格和成交量数据中,衍生出数千个新特征(例如Alpha101[Kakushadze, 2016])非常常见。一些研究者甚至通过搜索表达式创建新因子或特征[Allen and Karjalainen, 1999; Neely et al., 1997; Potvin et al., 2004]。此类数据处理任务给研究者带来沉重负担,甚至使某些研究课题无法实现。这种情况对基础设施提出了更严格的性能要求。
应用机器学习解决方案的障碍
金融数据和任务具有独特性与挑战性。直接将机器学习解决方案应用于量化研究任务而不进行领域适配往往效果不佳。由于金融数据的信噪比**(SNR)极低**,构建成功的基于数据的策略在金融市场中非常困难。大多数机器学习算法是数据驱动的,必须应对此类困难。如果不仔细处理细节,机器学习模型很难取得令人满意的性能。甚至一个微小的错误都可能导致模型过拟合噪声,而非学习有效模式。正确处理细节需要大量的金融行业领域知识。此外,典型的金融目标(如年化回报)通常不可微分,这使得直接训练机器学习模型变得困难。为金融数据建模定义合理任务和适当的监督目标非常重要。这种障碍使得许多缺乏金融行业领域知识的数据科学家望而却步。
构建机器学习应用的另一个必要步骤是超参数优化。不同的机器学习算法具有不同的超参数搜索空间,每个空间包含多个维度,具有不同的含义和优先级。一些量化研究者来自传统金融行业,对机器学习知识不足。这种巨大的学习成本阻碍了许多用户充分发挥机器学习的最大价值。
2.2 相关工作
在金融行业,投资策略的盈利能力会随着追随者的增加而下降。因此,金融从业者,尤其是量化研究者,通常不愿分享自己的算法和工具。OLPS[Li et al., 2016]是首个开源的投资组合选择工具箱。它包含一系列经典策略,由机器学习算法支持,作为基准和开发新学习方法的工具包。该工具箱仅支持Matlab和Octave,与当前主流科学语言Python不兼容,因此对现代机器学习算法不友好。其框架较为简单,而基于AI技术的现代量化研究工作流程复杂得多。近年来出现了其他量化工具。QuantLib[Firth, 2004]仅关注现代量化研究工作流程的一部分。QUANTAXIS²更专注于IT基础设施,而非研究工作流程。
Quantopian发布了一系列开源工具:1) Alphalens:用于预测性(alpha)股票因子性能分析的Python库;2) Zipline:用于回测的事件驱动系统;3) Pyfolio:用于金融投资组合性能和风险分析的Python库。所有这些工具仅关注交易信号或投资组合的分析。
² https://github.com/QUANTAXIS/QUANTAXIS
总体而言,Qlib是首个适应AI时代现代量化研究者工作流程的开源平台。它旨在赋能量化研究者实现AI技术在量化投资中的巨大潜力。
3 AI导向的量化投资平台
3.1 总体设计
在与具有多年金融市场实践经验的量化研究者合作中,我们遇到了上述所有问题并探索了各种解决方案。受当前情况的启发,我们实现了Qlib以应用于量化投资中的AI技术。
AI导向框架
Qlib采用模块化设计,基于现代研究工作流程,提供最大灵活性以适应AI技术。量化研究者可以扩展模块并构建工作流程以高效尝试他们的想法。在每个模块中,Qlib提供了一些在实际投资中表现良好的默认实现选择。借助这些现成的模块,量化研究者可以专注于他们感兴趣的特定模块问题,而不被其他琐碎细节分心。除了代码,计算和数据也可以在某些模块中共享,因此Qlib被设计为一个平台,而非仅工具箱。
高性能基础设施
数据处理性能对数据驱动方法(如AI技术)至关重要。作为AI导向平台,Qlib提供了高性能数据基础设施。Qlib提供了一种时间序列平面文件数据库³。这种数据库专为金融数据的科学计算设计,在量化投资研究的一些典型数据处理任务中,性能远超当前流行的通用数据库和时间序列数据库。此外,该数据库提供了一个表达式引擎,可以加速因子/特征的实现和计算,使依赖表达式计算的研究课题成为可能。
³ https://en.wikipedia.org/wiki/Flat-file_database
机器学习指导
Qlib集成了为量化投资设计的典型数据集,典型机器学习算法可以在这些数据集上成功学习具有泛化能力的模式。Qlib为机器学习用户提供了一些基本指导,并集成了合理的任务设置,包括合理的特征空间和目标标签。提供了一些典型的超参数优化工具。借助指导和合理设置,机器学习模型可以学习具有更好泛化能力的模式,而不仅仅是过拟合噪声。
3.2 AI导向框架

图1展示了Qlib的总体框架。该框架旨在:1) 适应现代AI技术;2) 帮助量化研究者以最少努力构建完整研究工作流程;3) 为研究者提供最大灵活性以探索他们感兴趣的问题,而不被其他部分干扰。
这种目标导致了从系统设计角度的模块化设计。系统基于现代实践研究工作流程拆分为若干独立模块。无论是传统还是基于AI的量化投资研究方向,大多可以视为一个或多个模块接口的实现。Qlib为每个模块提供了在实际投资中表现良好的典型实现。此外,模块为研究者提供了覆盖现有方法的灵活性,以探索新想法。借助该框架,研究者可以以最少成本尝试新想法并测试整体性能。
Qlib的模块如图1所示,并以典型工作流程连接。每个模块对应于量化投资中的典型子任务。模块中的实现可以视为该任务的解决方案。我们将介绍每个模块,并举例说明Qlib如何适应现有量化研究。
工作流程从左下角的数据服务器模块开始,提供数据引擎以查询和处理原始数据。利用检索的数据,研究者可以在数据增强模块中构建自己的数据集。研究者尝试了许多解决方案,通过探索和构建有效因子/特征来构建更好数据集[Potvin et al., 2004; Neely et al., 1997; Allen and Karjalainen, 1999; Kakushadze, 2016]。生成训练数据集[Feng et al., 2019]是提供数据集解决方案的另一研究方向。模型创建模块基于数据集学习模型。近年,众多研究者探索了各种模型从金融数据集中挖掘交易信号[Sezer et al., 2019]。此外,元学习[Vilalta and Drissi, 2002]通过“学会学习”提供了一种新学习范式,适用于模型创建模块。鉴于现代研究工作流程中建模金融数据的众多方法,模型管理系统已成为工作流程的必要部分。模型管理模块旨在为现代量化研究者处理此类问题。利用多样化模型,集成学习是提升机器学习模型性能和鲁棒性的有效方法,在金融领域被频繁使用[Qiu et al., 2014; Yang et al., 2017; Zhao et al., 2017]。它由模型集成模块支持。投资组合生成模块旨在从模型输出的交易信号生成投资组合,即投资组合管理[Qian et al., 2007]。Barra[Sheikh, 1996]为此任务提供了最流行的解决方案。有了目标投资组合,我们提供了一个高保真交易模拟器——订单执行模块,以检验策略性能,以及分析模块,自动分析交易信号、投资组合和执行结果。订单执行模块设计为响应式模拟器,而非回测功能,可为需要分析模块产生环境反馈的学习范式(如强化学习)提供基础设施。
量化投资中的数据为时间序列格式,并随时间更新。样本内数据集的规模随时间增加。利用新数据的典型做法是定期更新模型[Wang et al., 2019b]。除了更好利用增加的样本内数据,动态更新模型[Yang et al., 2019]和交易策略[Wang et al., 2019a]将进一步提升性能,因为股票市场具有动态特性[Adam et al., 2016]。因此,在静态工作流程中使用一组静态模型和交易策略显然不是最优解决方案。动态更新模型和策略是量化投资的重要研究方向。动态建模中的模块为此类解决方案提供接口和基础设施。
3.3 高性能基础设施
金融数据
本节总结了量化研究中的数据要求。在量化研究中,最常用的数据格式如下:
BasicData T = { x i , t , a } , i ∈ Inst , t ∈ Time , a ∈ Attr \text{BasicData}_T = \{x_{i,t,a}\}, i \in \text{Inst}, t \in \text{Time}, a \in \text{Attr} BasicDataT={xi,t,a},i∈Inst,t∈Time,a∈Attr
其中,
x
i
,
t
,
a
x_{i,t,a}
xi,t,a 是基本类型(如浮点数、整数)的值,
Inst
\text{Inst}
Inst 表示金融工具集(如股票、期权等),
Time
\text{Time}
Time 表示时间戳集(如股票市场的交易日),
Attr
\text{Attr}
Attr 表示工具的可能属性集(如开盘价、成交量、市值),
T
T
T 表示数据的最新时间戳(如最新交易日)。
x
i
,
t
,
a
x_{i,t,a}
xi,t,a 表示工具
i
i
i 在时间
t
t
t 的属性
a
a
a 的值。
(博主:这里意思就是,比如今天A股茅台的开盘价、今天A股茅台的的成交量、…等等,由很多个数据组成。它们可以随意组合。)
此外,工具池是指定随时间变化的金融工具集的必要信息:
Pool
T
=
{
pool
t
}
,
t
∈
Time
,
pool
t
⊆
Inst
\text{Pool}_T = \{\text{pool}_t\}, t \in \text{Time}, \text{pool}_t \subseteq \text{Inst}
PoolT={poolt},t∈Time,poolt⊆Inst
标普500指数⁴是一个典型的工具池示例。
⁴ https://en.wikipedia.org/wiki/S%26P_500_Index
数据更新是一项基本功能。现有历史数据不会随时间变化,仅需追加新数据。更新操作形式化如下:
BasicData
T
=
OldBasicData
T
∪
{
x
i
,
t
,
a
new
}
\text{BasicData}_T = \text{OldBasicData}_T \cup \{x_{i,t,a_{\text{new}}}\}
BasicDataT=OldBasicDataT∪{xi,t,anew}
BasicData
T
+
1
=
BasicData
T
∪
{
x
i
,
T
+
1
,
a
}
\text{BasicData}_{T+1} = \text{BasicData}_T \cup \{x_{i,T+1,a}\}
BasicDataT+1=BasicDataT∪{xi,T+1,a}
Pool
T
+
1
=
Pool
T
∪
{
pool
t
+
1
}
\text{Pool}_{T+1} = \text{Pool}_T \cup \{\text{pool}_{t+1}\}
PoolT+1=PoolT∪{poolt+1}
用户查询可形式化为:
DataQuery
=
{
x
i
,
t
,
a
∣
i
t
∈
pool
t
,
pool
t
∈
Pool
query
,
a
∈
Attr
query
,
timestart
≤
t
≤
timeend
}
\text{DataQuery} = \{x_{i,t,a} | i_t \in \text{pool}_t, \text{pool}_t \in \text{Pool}_{\text{query}}, a \in \text{Attr}_{\text{query}}, \text{timestart} \leq t \leq \text{timeend}\}
DataQuery={xi,t,a∣it∈poolt,poolt∈Poolquery,a∈Attrquery,timestart≤t≤timeend}
表示在特定时间范围内、特定工具池中、某些属性的数据查询。
此类要求较为简单,许多开源解决方案支持此类操作。我们将其分为三类,并列出每类中的流行实现:
- 通用数据库:MySQL[MySQL, 2001]、MongoDB[Chodorow, 2013]
- 时间序列数据库:InfluxDB[Naqvi et al., 2017]
- 科学计算数据文件:以numpy[Oliphant, 2006]数组或pandas[McKinney, 2011]数据框组织的数据
通用数据库支持多种格式和结构的数据,并提供许多复杂机制,如索引、事务、实体关系模型等。但这些机制为特定任务增加了不必要的复杂性。时间序列数据库优化了时间序列数据的数据结构和查询,但并未专为量化研究设计,量化研究中的数据通常为紧凑的基于数组(array-based)的格式,以利用硬件加速。如果数据从磁盘到客户端保持紧凑的基于数组格式,无需格式转换,将节省大量时间。然而,通用数据库和时间序列数据库以通用格式存储和传输数据,对科学计算效率较低。
由于数据库的低效,基于数组的数据在科学界越来越受欢迎。Numpy数组和pandas数据框是科学计算的主流实现,通常以HDF5或pickle⁵存储在磁盘上。此类格式依赖轻量,科学计算效率高。然而,此类数据存储在单一文件中,难以更新或查询。
⁵ https://docs.python.org/3/library/pickle.html
在调查上述存储解决方案后,我们发现没有一种能很好适应量化研究场景,因此有必要设计定制化解决方案。
文件存储设计

图2展示了文件存储设计。如图左侧所示,Qlib以树形结构组织文件。数据按不同频率、工具和属性分为文件夹和文件。所有属性值以紧凑的固定宽度二进制格式存储,便于按字节索引。共享时间线单独存储在名为“calendar.txt”的文件中。属性值的数据文件将其前4字节设置为时间线索引值,以指示数据序列的起始时间戳。借助起始时间索引,Qlib可以在时间维度上对齐所有值。
数据以紧凑格式存储,便于组合成数组进行科学计算。在实现类似基于数组数据的高性能同时,满足量化投资场景的数据更新要求。所有数据按时间顺序排列,新数据可通过追加更新,效率高。添加或删除属性或工具也简单高效,因其存储在单独文件中。此设计极为轻量,无数据库开销,Qlib实现高性能。
表达式引擎
基于基本数据开发新因子/特征是一项常见任务,占据了许多量化研究者的时间比例。无论是通过代码实现因子,还是计算过程都非常耗时。因此,Qlib提供了一个表达式引擎,以最小化此类任务的工作量。
因子/特征的本质是将基本数据转换为目标值的函数。该函数可分解为一系列表达式的组合。表达式引擎基于此理念设计。借助该引擎,量化研究者可通过编写表达式而非复杂代码实现新因子/特征。例如,布林带技术指标[Bollinger, 2002]是广泛使用的技术因子,其上界可通过简单表达式“(MEAN($close, N)+2*STD($close, N)-$close)/MEAN($close, N)”实现。此类实现简单、可读、可重用且易维护。用户可通过一系列简单表达式轻松构建数据集。搜索表达式以构建有效交易信号是典型研究课题,许多研究者已探索此方向[Allen and Karjalainen, 1999; Neely et al., 1997; Potvin et al., 2004]。表达式引擎为此类研究课题提供了必要工具。
缓存系统
为避免重复计算,Qlib内置了缓存系统,包括内存缓存和磁盘缓存。
内存缓存
当Qlib使用其表达式引擎计算因子/特征时,会将表达式解析为语法树。所有节点的计算结果存储在内存中的LRU(最近最少使用)缓存中,可节省相同(子)表达式的重复计算。
磁盘缓存

量化投资中的典型数据处理工作流程可分为三步:获取原始数据、计算表达式、将数据组合为数组进行科学计算。计算表达式和组合数据非常耗时。如果能缓存共享的中间数据,可节省大量时间。在实际数据处理任务中,许多中间结果可共享。例如,不同数据处理任务可共享相同的表达式计算。因此,Qlib设计了二级磁盘缓存机制。如图3所示,左侧为第3.3节描述的原始数据。第一级是表达式缓存,将所有计算的表达式保存到磁盘缓存。表达式缓存的数据结构与原始数据相同。有了表达式缓存,同一表达式仅需计算一次。表达式缓存后是数据集缓存,存储组合数据以节省组合时间。两级缓存数据按时间排列,可在时间维度上索引,因此即使查询时间变化,磁盘缓存也可共享。此外,Qlib通过按时间排列数据支持数据追加更新,数据维护更加简单。
3.4 机器学习指导
如第2节所述,机器学习算法的指导非常重要。Qlib提供了为量化投资设计的典型数据集,典型机器学习算法可在这些数据集上成功学习具有泛化能力的模式。Qlib为机器学习用户提供了一些基本指导,并集成了合理任务设置,如数据预处理、学习目标等。研究者无需从头探索一切。这些指导为研究者提供了大量领域知识,帮助他们开启这一研究领域的旅程。
对大多数机器学习算法,超参数优化是实现更好泛化的必要步骤。尽管重要,但它耗费大量精力且重复性高。因此,Qlib提供了超参数调优引擎(HTE)以简化此类任务。HTE提供接口以定义超参数搜索空间
Θ
\Theta
Θ,并自动搜索最佳超参数
θ
\theta
θ。在建模时间序列数据的典型金融任务中,新数据按时间顺序到达。为利用新数据,模型需定期在新数据上重新训练。新最佳超参数
θ
\theta
θ 会变化,但通常接近之前的最佳超参数。HTE提供了一种专为金融任务超参数优化设计的机制,生成新的超参数搜索空间分布,以更少尝试获得最佳点的更大机会。搜索
θ
\theta
θ 的分布形式化如下:
p
new
(
x
)
=
p
prior
(
x
)
ϕ
θ
prev
,
σ
2
(
x
)
E
x
∼
p
prior
[
ϕ
θ
prev
,
σ
2
(
x
)
]
p_{\text{new}}(x) = \frac{p_{\text{prior}}(x) \phi_{\theta_{\text{prev}}, \sigma^2}(x)}{\mathbb{E}_{x \sim p_{\text{prior}}}[\phi_{\theta_{\text{prev}}, \sigma^2}(x)]}
pnew(x)=Ex∼pprior[ϕθprev,σ2(x)]pprior(x)ϕθprev,σ2(x)
其中,
p
prior
p_{\text{prior}}
pprior 是原始超参数搜索空间;
ϕ
θ
prev
,
σ
2
(
x
)
∼
N
(
θ
prev
,
σ
2
)
\phi_{\theta_{\text{prev}}, \sigma^2}(x) \sim \mathcal{N}(\theta_{\text{prev}}, \sigma^2)
ϕθprev,σ2(x)∼N(θprev,σ2);
θ
prev
\theta_{\text{prev}}
θprev 是上次模型训练的最佳超参数。超参数搜索空间的域保持不变,但
θ
prev
\theta_{\text{prev}}
θprev 附近的概率密度增加。
4 用例与性能评估
4.1 用例

Qlib提供了配置驱动流水线引擎(CDPE),帮助研究者更轻松地构建图1所示的完整研究工作流程。用户仅需通过简单配置文件(如图4所示,部分细节已省略)即可定义工作流程。此接口非强制性,我们为用户保留最大灵活性,可通过代码像搭积木一样构建量化研究工作流程。
4.2 性能评估
数据处理性能对数据驱动方法(如AI技术)至关重要。作为AI导向平台,Qlib提供了数据存储和处理的解决方案。为展示Qlib性能,我们将其与第3.3节讨论的几种解决方案(包括HDF5、MySQL、MongoDB、InfluxDB和Qlib)进行比较。Qlib +E -D表示启用表达式缓存、禁用数据集缓存,依此类推。
任务是从股票市场的基本OHLCV⁶日数据创建数据集,涉及数据查询和处理。最终数据集包含从OHLCV数据衍生的14个因子/特征(如“Std($close, 5)/$close”)。数据时间范围为2007年1月1日至2020年1月1日。股票池每日包含800只股票,且每日变化。
⁶开盘价、最高价、最低价、收盘价和交易量
除比较每种解决方案的总时间外,我们将任务分解为以下步骤以获取更多细节:
- 加载数据:将OHLCV数据或缓存加载到RAM中,格式为基于数组的科学计算格式。
- 计算表达式:计算衍生的因子/特征。
- 转换索引:仅适用于Qlib。因Qlib不在原始数据中存储索引(即时间戳、股票ID),需设置数据索引。
- 按池过滤数据:按特定股票池过滤数据。例如,标普500包含超过一千只股票,但每日仅包括500只。需过滤掉未包含在标普500某日的数据,尽管其曾出现在标普500中。加载数据时无法过滤,因某些衍生特征依赖历史OHLCV数据。
- 组合数据:将不同股票的数据拼接为单一块基于数组的数据。

如表1所示,Qlib的紧凑存储实现与专用科学计算HDF5数据文件相似的存储大小和加载速度。数据库加载数据耗时过长。深入研究底层实现后,我们发现通用数据库和时间序列数据库的数经过多层接口和不必要的格式转换,大大减慢了加载过程。由于Qlib的内存缓存,Qlib -E -D节省了约24%的表达式计算时间。此外,Qlib提供表达式缓存和数据集缓存机制。启用表达式缓存的Qlib +E -D若无缓存缺失,可节省80.4%的表达式计算时间。将因子/特征组合为每只股票的单块基于数组数据是Qlib +E -D的主要耗时步骤,包含在计算表达式步骤中。除计算成本外,最耗时的步骤是数据组合。数据集缓存旨在减少此类开销。如Qlib +E +D列所示,时间成本进一步降低。
此外,Qlib可利用多核CPU加速计算。如表1最后一行所示,Qlib在多核CPU下的时间成本显著降低。Qlib +E +D因仅读取现有缓存几乎不计算而无法进一步加速。
4.3 更多关于Qlib
Qlib是一个持续开发的开源平台。更详细文档可在GitHub仓库⁷获取。本文未详细介绍的许多功能(如客户端-服务器架构的数据服务、分析系统、云端自动部署)可在在线仓库中找到。欢迎您的贡献。
⁷ https://github.com/microsoft/qlib/
5 结论
在本文中,我们介绍了AI时代现代量化研究者面临的实际问题。基于这些问题,我们设计并实现了Qlib,旨在赋能量化研究者实现AI技术在量化投资中的巨大潜力。
参考文献
[Adam et al., 2016] 克劳斯·亚当、阿尔伯特·马塞特、胡安·巴勃罗·尼科利尼。股票市场波动与学习,2016。
[Allen and Karjalainen, 1999] 富兰克林·艾伦、里斯托·卡贾莱宁。使用遗传算法寻找技术交易规则。《金融经济学杂志》,51(2):245–271,1999。
[Bollinger, 2002] 约翰·布林格。布林带技术分析。麦格劳-希尔专业出版社,2002。
[Chodorow, 2013] 克里斯蒂娜·乔多罗。MongoDB:权威指南:强大且可扩展的数据存储。奥莱利媒体,2013。
[Deng et al., 2016] 邓越、鲍峰、孔有勇、任志权、戴琼海。深度直接强化学习用于金融信号表示和交易。《IEEE神经网络与学习系统交易》,28(3):653–664,2016。
[Feng et al., 2019] 冯富丽、陈慧敏、何向南、丁基、孙茂松、蔡达成。使用对抗训练增强股票走势预测。《第二十八届国际人工智能联合会议论文集》,5843–5849页。AAAI出版社,2019。
[Firth, 2004] N·弗斯。为什么使用QuantLib。可在http://www.quantlib.co.uk/publications/quantlib.pdf获取,2004。
[Kakushadze, 2016] 祖拉·卡库什泽。101公式化因子。《威尔莫特》,2016(84):72–81,2016。
[Li et al., 2016] 宾·李、杜延·萨胡、史蒂文·C·H·霍伊。OLPS:在线投资组合选择工具箱。《机器学习研究杂志》,17(1):1242–1246,2016。
[McKinney, 2011] 韦斯·麦金尼。pandas:数据分析与统计的基础Python库。《高性能与科学计算的Python》,14,2011。
[Murphy, 1999] 约翰·J·墨菲。金融市场技术分析:交易方法与应用的综合指南。企鹅出版社,1999。
[MySQL, 2001] MySQL公司。MySQL,2001。
[Naqvi et al., 2017] 赛达·努尔·泽赫拉·纳克维、索菲亚·伊凡蒂杜、埃斯特班·齐曼伊。时间序列数据库与InfluxDB。布鲁塞尔自由大学研究报告,2017。
[Neely et al., 1997] 克里斯托弗·尼利、保罗·韦勒、罗布·迪特马尔。外汇市场技术分析是否盈利?遗传编程方法。《金融与量化分析杂志》,32(4):405–426,1997。
[Oliphant, 2006] 特拉维斯·E·奥利芬特。NumPy指南,第1卷。Trelgol出版公司,2006。
[Petkova, 2006] 拉利察·佩特科娃。法玛-弗伦奇因子是否代表预测变量的创新?《金融杂志》,61(2):581–612,2006。
[Potvin et al., 2004] 让-伊夫·波特万、帕特里克·索里亚诺、马克西姆·瓦利。使用遗传编程生成股票市场交易规则。《计算机与运筹学研究》,31(7):1033–1047,2004。
[Qian et al., 2007] 爱德华·E·钱、罗纳德·H·华、埃里克·H·索伦森。量化股权投资组合管理:现代技术与应用。CRC出版社,2007。
[Qiu et al., 2014] 薛恒·邱、张乐、任烨、庞努图赖·N·苏甘坦、葛汉·阿马拉通加。用于回归和时间序列预测的集成深度学习。《2014 IEEE计算智能与集成学习研讨会》,1–6页。IEEE,2014。
[Sezer et al., 2019] 奥梅尔·贝拉特·塞泽、梅赫梅特·乌古尔·古德莱克、艾哈迈德·穆拉特·奥兹巴约卢。金融时间序列预测与深度学习:2005-2019年系统文献综述。arXiv预印本 arXiv:1911.13288,2019。
[Sheikh, 1996] 阿米尔·谢赫。Barra风险模型。《Barra研究洞察》,1–24页,1996。
[Vilalta and Drissi, 2002] 里卡多·维拉尔塔、优素福·德里西。元学习视角与综述。《人工智能评论》,18(2):77–95,2002。
[Wang et al., 2019a] 乐文·王、刘维清、杨晓、卞江。保守还是激进?基于信心的动态投资组合构建。《2019 IEEE全球信号与信息处理大会》,1–5页。IEEE,2019。
[Wang et al., 2019b] 守祥·王、轩·王、少民·王、王丹。基于注意力机制和滚动更新的双向长短期记忆方法用于短期负载预测。《国际电力与能源系统杂志》,109:470–479,2019。
[Yang et al., 2017] 冰·杨、子佳·龚、文琪·杨。使用深度神经网络集成预测股票市场指数。《2017第三十六届中国控制会议》,3882–3887页。IEEE,2017。
[Yang et al., 2019] 杨晓、刘维清、乐文·王、程曲、卞江。基于分而治之的注意力组合多投资策略框架。《2019 IEEE全球信号与信息处理大会》,1–5页。IEEE,2019。
[Zhao et al., 2017] 杨·赵、李建平、于连。用于原油价格预测的深度学习集成方法。《能源经济学》,66:9–16,2017。

5230

被折叠的 条评论
为什么被折叠?



