工作流:工作流管理
介绍
Qlib框架中的组件是以松耦合的方式设计的。用户可以使用这些组件构建自己的量化研究工作流程,如示例所示。
此外,Qlib
提供了更用户友好的接口,名为 qrun
,用于自动运行由配置定义的整个工作流程。运行整个工作流程被称为 执行。
使用 qrun
,用户可以轻松启动一个 执行,其中包括以下步骤:
- Data
加载中
处理
切片
- Model
训练和推理
保存与加载
- Evaluation
预测信号分析
回测
对于每次执行,Qlib
都有一个完整的系统来跟踪所有信息以及在训练、推理和评估阶段生成的工件。有关Qlib
如何处理此问题的更多信息,请参阅相关文档:Recorder: Experiment Management。
完整示例
在深入了解细节之前,这里有一个完整的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
注意
qrun 在安装 Qlib
时将被放置在你的 $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。
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
的工具,用于初始化 Qlib
中的任何类,配置包括以下字段:class、module_path 和 kwargs。
数据集部分
数据集字段描述了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) 和 回测。
以下脚本是回测的配置以及回测中使用的策略:
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。
以下是不同记录模板的配置详细信息,例如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。