继续优化我们的“零代码”AI量化系统。
金融数据使用未来N天的收益率来做自动标注,qlib是使用这个收益率当做对应股票的得分,比如未来五天收益率,越大意味得分越高。这个逻辑本身没有问题,这就变成一个回归问题,一是评估结果不直观,二是分类比回归更加简单。
引入qlib的alpha158因子集,以及把label改成20天收益之后,lgb的准确率与召回率都超过了50%,金融数据的低信噪比,这个已经不容易了,而且轮动模型是取分最高者,所以能够进一步提升收益。这个可以交由策略引擎回测看看效果。
所以,参考bigquant的做法,把label离散化。使用的是pandas的qcut等频切分。
class QCut(CustomOps): def __init__(self,feature,N): self.N = N super(QCut, self).__init__(feature) def _load_internal(self, instrument): series = self.feature.load(instrument) quantiles = [step / 100 for step in range(0, 100, int(100 / self.N))] if len(quantiles) <= self.N: quantiles.append(1) labels = pd.qcut(series, quantiles, labels=range(0, self.N)).astype('float') return pd.Series(labels, index=series.index)
注册了这个自定义的因子表达式之后,使用上就很简单了。
fields.append('Ref($close,-1)/$close -1') names.append('label_value') fields.append('QCut($label_value,10)') names.append('label')
继续优化主界面,提升我们的投研效率。
一是把可视化分成了四个子图,除了之初的收益序列equity,还是年度收益与基准的对比,与基准收益率序列相关性等,以及年化收益、最大回撤等指标。
二是引入了styledtextctrl,可以显示与编辑代码,特征抽取与数据标注的规则、还有规则策略的交易逻辑可以在这里直接以脚本的方式输入。
对于机器学习模型,只需要特征提取与自动化标注即可。目前我们的规则与qlib一致,表达式如下:
'Ref($close, -2)/Ref($close, -1) - 1';
bigquant的表达式为 'shift(close,-2)/shift(close,-1)-1'。两者的区别在于qlib的函数是大写字母开头,另外特征需要以$开头。
另外bigquant有一些预计算的因子,类似这样的规则amount_*,就是shift(amount,N)的简写。这个确实方便不少。
后续希望把这个优化过来,表达式会简洁很多。
return_*,
rank_return_*,
ta_bbands_lowerband_14_0,
rank_avg_amount_*。
用我们的表达式应该是:Rank(Avg($amount,N),还是正则表达式转换的问题。
return_5就是过去5天的收益率(动量)。
转化为Ref($return,5)。考验正则表达式的功力,现在功能是兼容的,就是看如何做更加简洁。
然后训练好的模型,需要整合的流程里,直接完成训练并生成策略。
规则型的策略,需要什么样的参数。
再有就是模型如何更优的抽取与评判因子。
因子挖掘有特征工程一定是未来的大头。当然还有强化学习的环境、强化学习框架要整合进来。
我的开源项目及知识星球
零代码AI量化平台基本成型,支持三种范式