分享

一个典型机器学习量化策略的实现 | Qlib从入门到精通 #4

 AI量化实验室 2023-10-12 发布于北京

一个典型的机器学习驱动的量化模型会分成如下几个主要步骤:

首先是基本数据加载,从价量的角度看就是OHLCV等数据; 

其次是数据标注,计算因子和label; 

然后把数据分割成训练集和测试集选择合适的模型,并配置适当的参数。

模型训练。

最后利用模型数据样本外数据进行回测,得到回测结果。对回测结果进行可视化。

我们把workflow的代码做一个拆解,来说明这个过程。

第一步是环境初始化

import qlib

from qlib.config import REG_CN

from qlib.data import dataset

from qlib.workflow import R

from qlib.workflow.record_temp import SignalRecord,PortAnaRecord

class QlibMgr:

    def __init__(self, path='cn_data',market='all'):

        self.market = market

        provider_uri ="~/.qlib/qlib_data/{}".format(path)

        qlib.init(provider_uri=provider_uri,region=REG_CN)

这一步好理解,就是引入相应的包,配置数据所在的路径。

第二步:模型训练

def train_model(self):

        model =init_instance_by_config(self._get_model_config())

        dataset =init_instance_by_config(self._get_dataset_config())

        withR.start(experiment_name="train_model"):

           ##R.log_params(**flatten_dict(task))

            self.model.fit(dataset)

            R.save_objects(trained_model=model)

            return R.get_recorder().id

从配置中初始化两个对象,一是model,二是dataset。然后调用model.fit(dataset)完成模型训练,这里使用了mlflow来管理模型训练。

第三步,模型回测及分析

这里使用训练好的模型,对数据进行预测,使用预测的分数进行回测,然后对结果进行可视化的分析。

    def backtest_and_analysis(self, record_id):

        # backtest and analysis

        dataset =init_instance_by_config(self._get_dataset_config())

        withR.start(experiment_name="backtest_analysis"):

            recorder = R.get_recorder(recorder_id= record_id, experiment_name="train_model")

            model =recorder.load_object("trained_model")

            # prediction

            recorder = R.get_recorder()

            sr = SignalRecord(model, dataset,recorder)

            sr.generate()

基本的量化过程就是这么三步。

从机器学习量化的角度,Qlib确实帮助我们做了大量的工作,尤其是工程上的事情。

所以,我们只需要做几件事。

  • 我们自己的数据,比如我们想使用ETF数据来分析,那么自己获取数据,并转化为qlib格式的存储。

  • 实现自己的数据处理器。类似alpha360和alpha158。量化的工作主要也在此,就是因子发现。同时确定一下,label的规则,是未来2天的收益率,还是未来5天的收益率。

后续再把这个过程与我们的gui结合起来,方便我们一站式做实验,随时进行回测结果分析,因子分析,交易分析,投资组合分析等等。

可以看出来,Qlib确实是个非常好的框架,为AI量化做了大量的工作,而且还在持续开始当中,我们对于强化学习,高频交易,投资组合优化等充满期待。同时我们可以专注做我们的策略开发。

传统技术面量化分析,Qlib兼容的相对少,范式不太一样,如果需要,后续我们可以把pyalgotrade或者backtrader这样的开源回测平台整合进来。我自己也实现了一个轻量级的量化回测平台,到时候一并提交到开源项目里。

由于github不太稳定,项目迁移到gitee。

欢迎大家fork 或 star。

https:///ailabx/ailabx

星球在内测中,大家多支持。

Qlib入门到精通系列 #1

ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2

数据标注与自定义特征计算 | Qlib从入门到精通 # 3

(公众号:七年实现财富自由(ailabx),专注普通人财富自由探索,话题覆盖投资理财、个人成长,案例分析等干货)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多