Qlib智能因子挖掘系统(五):让因子自己长出来,遗传编程初探

频道:生活应用 日期: 浏览:23

引言

“数据是土壤,算法是阳光,因子则是要破土而出的那颗种子。”

先前我们探讨了 Qlib 的因子系统,虽然手动编写策略具备高适应性,但本质上还是遵循“人工设定指标、系统进行验证”的传统模式。现在,我们将尝试让机器自主完成指标设计环节——通过运用***遗传编程 (Genetic Programming, GP)*** 技术,观察这些指标如何像生物体一样自我优化、不断进步。

Qlib 的瓶颈:只能“拼”不会“生”

系列开篇介绍了Alpha158,这个模型包含了158个手工设计因子,让使用者体验到了即插即用的便捷性,然而,当你希望系统能够自主生成新因子时,便会意识到Qlib目前仅支持对已有因子进行线性或非线性的组合,尚不具备自动生成的功能

那么,能不能让机器自己写因子?

能够实现,并且想法十分顺理成章:将因子视为“生命体”,让它们在优胜劣汰的环境中自主发展。

遗传算法&遗传编程,一分钟入门

如果你已经熟悉 GA/GP,可以直接跳到下一节。

遗传算法和遗传编程的区别归纳如下,将遗传编程整合进 Qlib 需要明确方法和步骤,开始前必须设定初始种群

生成一些因子公式开yun体育官网入口登录app,其中元素包含:加法,减法,乘法,除法,指数移动平均,标准差,相关系数等,然后进行适配度评价

借助 Qlib 的模拟交易或 IC/RankIC 衡量,针对每支因子树进行评分评估,接着挑选并组合

让高分因子优先“繁衍”,交叉子树、互换基因。变异

随机替换节点或子树,注入新血。循环迭代

若干世代后开元ky888棋牌官网版,保留表现最优或稳健度最高的因子。

这个流程很面熟,确实,跟农业种植类似,先撒下种子,接着挑选出优质幼苗,然后进行品种改良,再筛选一遍,如此循环,最终选育出一些产量高的种子。

推荐工具:DEAP,一行代码都不嫌多

快速上手(伪代码):

import deap.gp as gp
算子被设定为 gp 的 PrimitiveSet 类型,命名为 FINANCE,参数个数是四个
# ... 添加 add, sub, ema 等
toolbox = gp.Toolbox()
注册一个评估函数,该函数用于执行因子回测,这是你的Qlib回测方法
# 初始化、进化、选优...

进化现场:一段真实 Log

为了让大家直观感受,下面是某次实验里的父子代对比。

父代 1: 当标准差($收盘价,13)等于指数移动平均($最高价,11)时,取最小值($开盘价,31)在56周期内的最低点,否则计算相关系数($未平仓合约量,$收盘价,6)在55周期内的斜率,最后取结果的8周期rsquare值
父代 2: 先判断数量与收盘价是否不等,再确认最低价是否等于持仓量,最后将结果转化为数值
关联→后代:Rsquare(当(标准差($open_interest,13)等于移动平均($high,11))时,取最小值($open,31)在56位置的最小值,否则计算相关系数($open_interest,$close,6)斜率在55位置的值),取8
变异→子代: *同上,节点变异...*

看着像天书?不用急开元ky888棋牌官方版,关键在于 —— 机器确实在自行生成元素,并且部分芯片效果相当不错。

写在最后

从“手工构建因子”到“因子自主生成”,遗传编程为量化分析开辟了新途径。接下来,我们将进行实践操作:借助 DEAP 与 Qlib,执行一次完整的因子培育,并评估其对投资组合表现的影响。

网友留言(0)

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。