一个典型的机器学习驱动的量化模型会分成如下几个主要步骤: 首先是基本数据加载,从价量的角度看就是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确实帮助我们做了大量的工作,尤其是工程上的事情。 所以,我们只需要做几件事。
后续再把这个过程与我们的gui结合起来,方便我们一站式做实验,随时进行回测结果分析,因子分析,交易分析,投资组合分析等等。 可以看出来,Qlib确实是个非常好的框架,为AI量化做了大量的工作,而且还在持续开始当中,我们对于强化学习,高频交易,投资组合优化等充满期待。同时我们可以专注做我们的策略开发。 传统技术面量化分析,Qlib兼容的相对少,范式不太一样,如果需要,后续我们可以把pyalgotrade或者backtrader这样的开源回测平台整合进来。我自己也实现了一个轻量级的量化回测平台,到时候一并提交到开源项目里。 由于github不太稳定,项目迁移到gitee。 欢迎大家fork 或 star。 https:///ailabx/ailabx 星球在内测中,大家多支持。 ETF数据从tushare下载导入Qlib | Qlib入门到精通 #2 (公众号:七年实现财富自由(ailabx),专注普通人财富自由探索,话题覆盖投资理财、个人成长,案例分析等干货) |
|