基于qlib框架的“AI+”的典型架构

AI量化,即AI+量化。

之前我的思路是投资,而后是量化投资,然后是AI赋能量化投资。一切是围绕投资进行,先学会投资,而后可量化的量化,然后量化中可以使用AI的赋能的则进行赋能。

AI+的逻辑会更加“颠覆”一些。

比如传统投资,从投资到量化,自然而然会以技术面量化为主,辅以一些基本面因子等,有点像传统策略的“自动化”。如何调优,完全出自于人工,需要人本身对投资的理解。好像alphago 1.0学习大量的人类棋谱一样。但master直接绕过人类棋谱,而是从0开始去理解市场,战斗力更强。

AI+的逻辑从数据,问题出发,把投资看成是基于大数据的决策问题。传统策略可以借鉴,但不必重从一次传统路线。

01 基于qlib框架的“AI+”的典型架构

初始化:

可转债的策略可以使用REG_US,没有一手100股的约束,也没有涨跌停限制。

import qlib
from qlib.constant import REG_CN, REG_US


def init_qlib():
    provider_uri = "./data/cb_data"  # "./data/cn_data"  # target_dir
    qlib.init(provider_uri=provider_uri, region=REG_US)

数据层-加载特征工程:

def load_features(instruments, fields, start_time='2020-01-01', end_time='2022-12-31'):
    df = D.features(instruments, fields, start_time, end_time, freq='day')
    return df

可以把所有的可转债在2020-01-01起的序列数据都返回来,而且支持各种表达式的运算。

todo:这里在加载instruments时需要判断,比如到期日<90天

使用loader来加载,可以对列进行重命名。

def load_by_loader(fields, names, start_time='2020-01-01', end_time='2022-12-31'):
    data_loader_config = {

        "feature": (fields, names),
        # "label": (labels, label_names)
    }
    loader = QlibDataLoader(config=data_loader_config)
    df = loader.load(instruments='all', start_time=start_time, end_time=end_time)
    return df

索引的排序变成了按日期为一级索引,这个更符合回测的逻辑,回测是按日期来对各个instrument进行回测。

qlib对数据进行了逐层封装,

qlib_loader数据加载,可以传入表达式以及命名。

DataHandlerLP负责加一些预处理器,对数据进行预处理,比如填弃空值,正则化等。

dataset是按时间对数据进行划分,这对于机器学习有两段train、valid特别有用。

def get_qlib_loader(fields, names):
    loader = QlibDataLoader(config=(fields, names))
    return loader


def get_handler(instruments, qlib_loader, start_time='2020-01-01', end_time='2022-12-31'):
    # NOTE: normally, the training & validation time range will be  `fit_start_time` , `fit_end_time`
    # however,all the components are decomposed, so the training & validation time range is unknown when preprocessing.
    ZScoreNorm(fit_start_time='20170101', fit_end_time='20181231'),
    dh = DataHandlerLP(instruments=instruments, start_time=start_time, end_time=end_time,
                       infer_processors=[Fillna()],
                       data_loader=qlib_loader)

    return dh


def get_dataset(dh, train_start='2019-01-01', train_end='2020-12-31', valid_start='2021-01-01', valid_end='2022-12-31'):
    ds = DatasetH(dh, segments={"train": (train_start, train_end), "valid": (valid_start, valid_end)})
    return ds


def get_ts_dataset(dh, train_start='2019-01-01', train_end='2020-12-31', valid_start='2021-01-01',
                   valid_end='2022-12-31'):
    ds = TSDatasetH(step_len=10, handler=dh,
                    segments={"train": (train_start, train_end), "valid": (valid_start, valid_end)})
    return ds

模型训练及使用,对于AI+而言,前面是数据准备、预处理,这里是模型训练与指标生成,这里是关键——特征工程决定模型效果。

这里fit生成模型,然后使用模型计算pred_score。

回测与绩效评估:这一部分基本上是确定的。

输入pred_score,topK策略进行回测,并对回测结果进行可视化的分析。

小结:

把qlib例子里很多ymal拿掉,变成一个个小模块,复用qlib的能力。

当下的年轻人,成功更难。

用好代码和媒体的杠杆,专注一件小事,做出产品化,做出价值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI量化投资实验室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值