分享

ailabx AI量化投资平台以及hello qlib示例

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

”qlib AI量化平台建设“ 系列文章第 15 篇

我们的目标是星辰大海,涓涓细流,功不唐捐。

第一个百天计划:三个月内以qlib为基础框架,搭建AI量化投研平台

8月底前要完成qlib框架内建于系统平台中。

好多朋友催更新aliabx上的代码,今天来收拾一下,后续系统的代码会继续开源,欢迎大家关注(公众号:ailabx)。

开源地址:https:///ailabx/ailabx

01 ailabx项目说明

项目原先是我完全自研的回测系统,借鉴了qlib的规则表达式,适用于传统的规则型的策略回测,还支持定投,市值恒定等策略。

本次“重构”,完全引入qlib作为底层框架,包括金融数据库,模型库,以及回测引擎,会结合自己对金融量化的理解,加上界面开发成系统,方便大伙的投研与投资工作。

适用人群: 

1、对量化投资感兴趣的群体。

2、对机器学习感兴趣且喜欢金融的AI从业者。

3、传统投资遇见到瓶颈,希望借力AI找到突破的投资者。

4、主动投资转量化投资的人。

5、...

朴素的常识告诉我们,AI和金融都是”很长的坡,很湿的雪“,二者遇见,一定会有故事。也许AI发展短期会不及预期,但人工智能一定是生产力进步的方向,没有人会怀疑;而金融500年来只会更强,更健康,是资源配置最有效的方向。

金融业数据很多,结构化非结构化的,而处理手段仍然是”刀耕火种“,需要革新和进步。

02 系统架构

为方便用户投研工作,会提供GUI界面,初定方案是wxpython。

底层框架以qlib为主,辅以自主研发的策略和工具。

使用gui的逻辑是保证用户策略的”私密性“,另外就是算法对于计算资源是有要求的,在网页端运行体验不好。

如果有一些数据需要服务端支持,以Fastapi为后端提供能力, 以momgo db提供存储能力。

03 主框架

入口文件main.py, 核心业务逻辑core文件夹,

core/qlib_mgr.py完成qlib框架初始化。

模型初始化比较简单,从类和模块里直接加载,当然你要自己直接导入模块也可以:

def init_model(self, config=None):
config = {
"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,
},
}
model = init_instance_by_config(config)
return model

这里初始化一个GBDT的树模型。

再来初始化一个数据集:

def init_dataset(self, config=None):
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": self.market,
}

config = {
"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"),
},
},
}
ds = init_instance_by_config(config)
return ds

模型训练与预测:

class ExpMgr:
def run(self, model, dataset):
# start exp
with R.start(experiment_name="workflow"):
# train
#R.log_params(**flatten_dict(task))
model.fit(dataset)

# prediction
recorder = R.get_recorder()
sr = SignalRecord(model, dataset, recorder)
sr.generate()

得到预测得分——每天每一个instument都会算出一个pred_score用于回测:

实验结果会保存在mlruns里(mlflow的格式,一个机器学习过程管理平台)

运行mlflow ui命令,在本机5000端口,可以直接看到实验结果:

年化12.7%,最大回撤8.8%,还可以的结果,当然这里还有大量的参数没有调优,只作用框架入门使用的一个示例。

小结:

阶段核心目标确定,100天计划本月要完成qlib作为底层框架整合到平台当中。


mlflow使用的必要性,目前我的判断是不高,目前看只是作为一些参数与指标的管理。

当然因为它提供了保存和加载的机制,倒也没有必要自己从头造轮子。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多