工作流程: 工作流程管理
介绍
在 Qlib Framework 中,组件被设计为松耦合的方式。用户可以使用这些组件构建自己的量化研究工作流程,例如 Example 。
此外,Qlib
提供了更加用户友好的接口 qrun
,用于自动运行由配置文件定义的整个工作流程。运行整个工作流程被称为 执行。
通过 qrun
,用户可以轻松开始一次 执行,其中包括以下步骤:
- 数据
载入
处理
切片
- 模型
训练和预测
保存和加载
- 评估
预测信号分析
回测
对于每个 执行,Qlib
都有一个完整的系统来跟踪在训练、预测和评估阶段产生的所有信息和生成物。有关 Qlib
如何处理这些信息的更多信息,请参阅相关文档: Recorder: 实验管理 。
完整示例
在进入细节之前,这是一个完整的 qrun
示例,它定义了典型的量化研究工作流程。
下面是一个典型的 qrun
配置文件。
qlib_init:
provider_uri: "~/.qlib/qlib_data/cn_data"
region: cn
market: &market csi300
benchmark: &benchmark SH000300
data_handler_config: &data_handler_config
start_time: 2008-01-01
end_time: 2020-08-01
fit_start_time: 2008-01-01
fit_end_time: 2014-12-31
instruments: *market
port_analysis_config: &port_analysis_config
strategy:
class: TopkDropoutStrategy
module_path: qlib.contrib.strategy.strategy
kwargs:
topk: 50
n_drop: 5
signal: <PRED>
backtest:
limit_threshold: 0.095
account: 100000000
benchmark: *benchmark
deal_price: close
open_cost: 0.0005
close_cost: 0.0015
min_cost: 5
task:
model:
class: LGBModel
module_path: qlib.contrib.model.gbdt
kwargs:
loss: mse
colsample_bytree: 0.8879
learning_rate: 0.0421
subsample: 0.8789
lambda_l1: 205.6999
lambda_l2: 580.9768
max_depth: 8
num_leaves: 210
num_threads: 20
dataset:
class: DatasetH
module_path: qlib.data.dataset
kwargs:
handler:
class: Alpha158
module_path: qlib.contrib.data.handler
kwargs: *data_handler_config
segments:
train: [2008-01-01, 2014-12-31]
valid: [2015-01-01, 2016-12-31]
test: [2017-01-01, 2020-08-01]
record:
- class: SignalRecord
module_path: qlib.workflow.record_temp
kwargs: {}
- class: PortAnaRecord
module_path: qlib.workflow.record_temp
kwargs:
config: *port_analysis_config
将配置保存到 configuration.yaml 后,用户可以使用以下命令启动工作流程并测试他们的想法。
qrun configuration.yaml
如果用户想在调试模式下使用 qrun
,请使用以下命令:
python -m pdb qlib/workflow/cli.py examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml
备注
安装 Qlib
后,qrun 将放置在您的 $PATH 目录中。
备注
yaml 文件中的符号 & 代表字段的定位符号,当其他字段将该参数作为值的一部分时,它非常有用。以上面的配置文件为例,用户可以直接更改 market 和 benchmark 的值,而无需遍历整个配置文件。
配置文件
在这一节中,我们将详细介绍 qrun
。
在使用 qrun
之前,用户需要准备一个配置文件。以下内容显示了如何准备配置文件的每个部分。
配置文件的设计逻辑非常简单。它预定义了固定的工作流,并为用户提供了这个 yaml 接口来定义如何初始化每个组件。 它遵循 init_instance_by_config 的设计。它定义了 Qlib 每个组件的初始化,通常包括类和初始化参数。
例如,以下的 yaml 和代码是等价的。
model:
class: LGBModel
module_path: qlib.contrib.model.gbdt
kwargs:
loss: mse
colsample_bytree: 0.8879
learning_rate: 0.0421
subsample: 0.8789
lambda_l1: 205.6999
lambda_l2: 580.9768
max_depth: 8
num_leaves: 210
num_threads: 20
from qlib.contrib.model.gbdt import LGBModel
kwargs = {
"loss": "mse" ,
"colsample_bytree": 0.8879,
"learning_rate": 0.0421,
"subsample": 0.8789,
"lambda_l1": 205.6999,
"lambda_l2": 580.9768,
"max_depth": 8,
"num_leaves": 210,
"num_threads": 20,
}
LGBModel(kwargs)
Qlib 初始化部分
首先,配置文件需要包含几个基本参数,这些参数将用于 qlib 的初始化。
provider_uri: "~/.qlib/qlib_data/cn_data"
region: cn
每个字段的含义如下:
- provider_uri
类型:str。Qlib 数据的 URI。例如,它可以是
get_data.py
加载的数据存储位置。
- region
如果 region == “us”,则
Qlib
将以美国股票模式进行初始化。如果 region == “cn”,则
Qlib
将以中国股票模式进行初始化。
备注
region 的值应与 provider_uri 中存储的数据相对应。
任务部分
配置中的 task 字段对应一个 task,其中包含三个不同子部分的参数:Model、Dataset 和 Record。
模型部分
在 task 字段中,model 部分描述了用于训练和推理的模型的参数。有关基础 Model
类的更多信息,请参阅 Qlib模型 。
model:
class: LGBModel
module_path: qlib.contrib.model.gbdt
kwargs:
loss: mse
colsample_bytree: 0.8879
learning_rate: 0.0421
subsample: 0.8789
lambda_l1: 205.6999
lambda_l2: 580.9768
max_depth: 8
num_leaves: 210
num_threads: 20
每个字段的含义如下:
- class
类型:str。模型类的名称。
- module_path
类型:str。在qlib中模型的路径。
- kwargs
该模型的关键字参数。请参阅具体的模型实现以获取更多信息:models 。
备注
Qlib
提供了一个名为 init_instance_by_config
的实用工具,用于使用包含字段:class、module_path 和 kwargs 的配置初始化 Qlib
中的任何类。
数据集部分
dataset 字段描述了 Qlib 中 Dataset 模块和 DataHandler 模块的参数。有关 Dataset 模块的更多信息,请参阅 Qlib Data。
DataHandler
的关键字参数配置如下:
data_handler_config: &data_handler_config
start_time: 2008-01-01
end_time: 2020-08-01
fit_start_time: 2008-01-01
fit_end_time: 2014-12-31
instruments: *market
用户可以参考 DataHandler 文档,了解配置中每个字段的含义。
以下是 Dataset 模块的配置,它将负责在训练和测试阶段进行数据预处理和切片。
dataset:
class: DatasetH
module_path: qlib.data.dataset
kwargs:
handler:
class: Alpha158
module_path: qlib.contrib.data.handler
kwargs: *data_handler_config
segments:
train: [2008-01-01, 2014-12-31]
valid: [2015-01-01, 2016-12-31]
test: [2017-01-01, 2020-08-01]
记录部分
record 字段是关于 Qlib
中 Record
模块的参数。Record
负责以标准格式跟踪训练过程和结果,如 信息系数(IC) 和 回测(backtest)。
下面的脚本是 回测(backtest) 的配置以及在 回测(backtest) 中使用的 策略(strategy):
port_analysis_config: &port_analysis_config
strategy:
class: TopkDropoutStrategy
module_path: qlib.contrib.strategy.strategy
kwargs:
topk: 50
n_drop: 5
signal: <PRED>
backtest:
limit_threshold: 0.095
account: 100000000
benchmark: *benchmark
deal_price: close
open_cost: 0.0005
close_cost: 0.0015
min_cost: 5
有关 策略(strategy) 和 回测(backtest) 配置中每个字段的含义的更多信息,用户可以查阅文档:策略(Strategy) 和 回测(Backtest)。
以下是不同的 Record Template(记录模板)
的配置细节,如 SignalRecord
和 PortAnaRecord
:
record:
- class: SignalRecord
module_path: qlib.workflow.record_temp
kwargs: {}
- class: PortAnaRecord
module_path: qlib.workflow.record_temp
kwargs:
config: *port_analysis_config
关于 Qlib
中 Record
模块的更多信息,用户可以参考相关文档:Record 。