工作流:工作流管理
章节大纲
-
工作流:工作流管理
简介
Qlib 框架中的组件是松散耦合设计的。用户可以像示例中那样,使用这些组件构建自己的量化研究工作流。
此外,Qlib 还提供了更友好的接口
qrun
,用于自动运行由配置定义好的整个工作流。运行整个工作流被称为一次执行。通过qrun
,用户可以轻松启动一次执行,其中包含以下步骤:-
数据
-
加载
-
处理
-
切片
-
-
模型
-
训练和推断
-
保存和加载
-
-
评估
-
预测信号分析
-
回测
-
对于每一次执行,Qlib 都有一个完整的系统来跟踪在训练、推断和评估阶段生成的所有信息和工件。有关 Qlib 如何处理这些内容的更多信息,请参阅相关文档:记录器:实验管理。
完整示例
在深入细节之前,这里有一个
qrun
的完整示例,它定义了典型的量化研究工作流。以下是一个典型的qrun
配置文件。YAMLqlib_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: start_time: 2017-01-01 end_time: 2020-08-01 account: 100000000 benchmark: *benchmark exchange_kwargs: limit_threshold: 0.095 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
和代码是等价的。YAMLmodel: 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
Pythonfrom 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 初始化的基本参数。
YAMLprovider_uri: "~/.qlib/qlib_data/cn_data" region: cn
每个字段的含义如下:
-
provider_uri
:类型为str
。Qlib 数据的 URI。例如,它可以是get_data.py
加载数据后存储的目录。 -
region
:-
如果
region == "us"
,Qlib 将以美股模式初始化。 -
如果
region == "cn"
,Qlib 将以 A股模式初始化。
-
注意
region
的值应与provider_uri
中存储的数据保持一致。任务部分
配置中的
task
字段对应一个任务,其中包含三个不同子部分的参数:Model、Dataset 和 Record。模型部分
在
task
字段中,model
部分描述了用于训练和推断的模型的参数。有关基础 Model 类的更多信息,请参阅 Qlib 模型。YAMLmodel: 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 数据。DataHandler 的关键字参数配置如下:
YAMLdata_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 模块的配置,该模块将在训练和测试阶段负责数据预处理和切片。
YAMLdataset: 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) 和回测。以下脚本是回测及其使用的策略的配置:
YAMLport_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
有关策略和回测配置中每个字段的含义,用户可以查阅文档:策略和回测。
这是不同记录模板(如
SignalRecord
和PortAnaRecord
)的配置详细信息:YAMLrecord: - class: SignalRecord module_path: qlib.workflow.record_temp kwargs: {} - class: PortAnaRecord module_path: qlib.workflow.record_temp kwargs: config: *port_analysis_config
有关 Qlib 中 Record 模块的更多信息,用户可以参阅相关文档:记录。
-