Quantlab 4.1:基于Deap遗传算法多股票因子挖掘

原创文章第549篇,专注“AI量化投资、世界运行的规律、个人成长与财富自由"。

遗传算法本身并不复杂,但gplearn的实现,把问题复杂化了,尤其在因子挖掘这个场景。

使用deap进行因子挖掘的代码在如下位置:

图片

import copyfrom deap_patch import *  # noqa
from deap import base, creator, gp
from deap import tools
from datafeed.mining.deap_alpha.add_ops import *def convert_inverse_prim(prim, args):"""Convert inverse prims according to:[Dd]iv(a,b) -> Mul[a, 1/b][Ss]ub(a,b) -> Add[a, -b]We achieve this by overwriting the corresponding format method of the sub and div prim."""prim = copy.copy(prim)converter = {'Add': lambda *args_: "{}+{}".format(*args_),'Mul': lambda *args_: "{}*{}".format(*args_),'fsub': lambda *args_: "{}-{})".format(*args_),'fdiv': lambda *args_: "{}*Pow({}, -1))".format(*args_),'fmul': lambda *args_: "{}*{}".format(*args_),'fadd': lambda *args_: "{}+{}".format(*args_),'fmax': lambda *args_: "max_({},{})".format(*args_),'fmin': lambda *args_: "min_({},{})".format(*args_),'isub': lambda *args_: "{}-{}".format(*args_),'idiv': lambda *args_: "{}/{}".format(*args_),'imul': lambda *args_: "{}*{}".format(*args_),'iadd': lambda *args_: "{}+{}".format(*args_),'imax': lambda *args_: "max_({},{})".format(*args_),'imin': lambda *args_: "min_({},{})".format(*args_),}#print(prim.name)#if prim.name == "imul":#print('命中:',prim.name)#print(prim)prim_formatter = converter.get(prim.name, prim.format)return prim_formatter(*args)def stringify_for_sympy(f):"""Return the expression in a human readable string."""string = ""stack = []for node in f:stack.append((node, []))while len(stack[-1][1]) == stack[-1][0].arity:prim, args = stack.pop()string = convert_inverse_prim(prim, args)if len(stack) == 0:break  # If stack is empty, all nodes should have been seenstack[-1][1].append(string)print(string)return stringdef map_exprs(evaluate, invalid_ind, gen, label, split_date):#print(invalid_ind)sources = [f'GP_{i:04d}={stringify_for_sympy(expr)}' for i, expr in enumerate(invalid_ind)]print(sources)def init_pset():pset = gp.PrimitiveSetTyped("MAIN", [], RET_TYPE)pset = add_constants(pset)pset = add_operators(pset)pset = add_factors(pset)return psetdef init_creator():# 可支持多目标优化# TODO 必须元组,1表示找最大值,-1表示找最小值FITNESS_WEIGHTS = (1.0, 1.0)creator.create("FitnessMulti", base.Fitness, weights=FITNESS_WEIGHTS)creator.create("Individual", gp.PrimitiveTree, fitness=creator.FitnessMulti)return creatordef init_toolbox(creator):toolbox = base.Toolbox()pset = init_pset()toolbox.register("expr", gp.genHalfAndHalf, pset=pset, min_=2, max_=5)toolbox.register("individual", tools.initIterate, creator.Individual, toolbox.expr)toolbox.register("population", tools.initRepeat, list, toolbox.individual)toolbox.register("evaluate", print)  # 不单独做评估了,在map中一并做了from datetime import datetimedt1 = datetime(2021, 1, 1)LABEL_y = 'RETURN_OO_1'from itertools import counttoolbox.register('map', map_exprs, gen=count(), label=LABEL_y, split_date=dt1)return toolboxif __name__ == '__main__':random.seed(9527)creator = init_creator()toolbox = init_toolbox(creator)pop = toolbox.population(n=100)fitnesses = toolbox.map(toolbox.evaluate, pop)

重点看add_ops添加咱们自己的因子表达式引擎支持的函数:

# TODO: 请在此文件中添加算子和因子
# TODO: 由于部分算子计算过慢,这里临时屏蔽了
import randomclass RET_TYPE:# 是什么不重要# 只要addPrimitive中in_types, ret_type 与 PrimitiveSetTyped("MAIN", [], ret_type)中# 这三种type对应即可pass# 改个名,因为从polars_ta中默认提取的annotation是Expr
# TODO 如果用使用其它库,这里可能要修改
Expr = RET_TYPEdef _random_int_():return random.choice([1, 3, 5, 10, 20, 40, 60])def add_constants(pset):"""添加常量"""# !!! 名字一定不能与其它名字重,上次与int一样,结果其它地方报错 [<class 'deap.gp.random_int'>]pset.addEphemeralConstant('_random_int_', _random_int_, int)return psetdef add_operators_base(pset):"""基础算子"""# 无法给一个算子定义多种类型,只好定义多个不同名算子,之后通过helper.py中的convert_inverse_prim修正pset.addPrimitive(dummy, [Expr, Expr], Expr, name='fadd')pset.addPrimitive(dummy, [Expr, Expr], Expr, name='fsub')pset.addPrimitive(dummy, [Expr, Expr], Expr, name='fmul')pset.addPrimitive(dummy, [Expr, Expr], Expr, name='fdiv')pset.addPrimitive(dummy, [Expr, Expr], Expr, name='fmax')pset.addPrimitive(dummy, [Expr, Expr], Expr, name='fmin')pset.addPrimitive(dummy, [Expr, int], Expr, name='iadd')pset.addPrimitive(dummy, [Expr, int], Expr, name='isub')pset.addPrimitive(dummy, [Expr, int], Expr, name='imul')pset.addPrimitive(dummy, [Expr, int], Expr, name='idiv')return psetdef add_unary_ops(pset):from datafeed.expr_functions import unary_funcsfor func in unary_funcs:pset.addPrimitive(dummy, [Expr], Expr, name=func)def add_unary_rolling_ops(pset):from datafeed.expr_functions import unary_rolling_funcsfor func in unary_rolling_funcs:pset.addPrimitive(dummy, [Expr, int], Expr, name=func)def add_binary_ops(pset):from datafeed.expr_functions import binary_funcsfor func in binary_funcs:pset.addPrimitive(dummy, [Expr, Expr], Expr, name=func)def add_binary_rolling_ops(pset):from datafeed.expr_functions import binary_roilling_funcsfor func in binary_roilling_funcs:pset.addPrimitive(dummy, [Expr, Expr, int], Expr, name=func)def add_operators(pset):"""添加算子"""pset = add_operators_base(pset)add_unary_ops(pset)add_binary_ops(pset)add_unary_rolling_ops(pset)add_binary_rolling_ops(pset)return psetdef add_factors(pset):pset.addTerminal(1, Expr, name='OPEN')pset.addTerminal(1, Expr, name='HIGH')pset.addTerminal(1, Expr, name='LOW')pset.addTerminal(1, Expr, name='CLOSE')pset.addTerminal(1, Expr, name='VOLUME')# pset.addTerminal(1, Expr, name='AMOUNT')return psetdef dummy(*args):# 由于生成后的表达计算已经被map和evaluate接管,所以这里并没有用到,可随便定义print('dummy')return 1

生成的因子,直接转化为咱们因子表达式可以兼容的表达式:

可以计算出因子值:

图片

明天继续对因子做ic分析,同时进行遗传算法的迭代。

代码每周五在星球更新,本周重点是deap+quantlab的因子表达式做因子挖掘。

AI量化实验室——2024量化投资的星辰大海

吾日三省吾身

听樊登讲雷殿生的《信念》。

他是世界徒步最远的人;十年风雨行,他先后走掉了19个脚趾甲,穿烂了52双鞋,行走八万一千多公里,经历19次抢劫,40多次野兽出没。他被评选为“首届中国十大徒步人物”,被誉为“当代徐霞客” 。

探险家,十年徒步走遍全中国。八万多公里,有涉及沙漠,无人区。

遇过十几次抢劫,狼群,吃过苍蝇,老鼠。。。

听完这些,首先是震撼,人之潜力无限。

然后,不自觉会开始探讨意义。

有人问珠峰攀登者,为什么要去冒险,答:因为它就在那里!

这里会回归到生命的本质与意义的问题。

生命没有意义,什么权情名利,百年之后都是过眼云烟。

生命是一场体验罢了,既然如此,体验某种程度是就是“折腾”。——但不是无意义,没有目标感的折腾,而是带着使命感、仪式感去努力做成一件事。

他受徐霞客启发和激励,花了十年时间做准备,然后花十年时间完成这一壮举。

普通人无法企及,只能仰慕。

于我们,有太多的负担,不允许我们去冒险,甚至“不允许”我们离开工作。

生活还在生存,这是一个问题。

但是人生真的具有无限潜力、惊喜。

无论生在何方,反正只来这么一趟,不要轻易就这么过去了。——无论你情不情愿,都会过去。

愿每个人都能跳出日常的琐碎,找到内心的信念,那个方向感,那个有召唤感的使命。

你若盛开,蝴蝶自来。

deap:多股票多维度遗传算法因子挖掘,可以整合chatGPT。

Quantlab4.1发布 | 新增一些策略,补充Metrics

AI量化实验室——2024量化投资的星辰大海

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企微语音群发软件:开启企业沟通新纪元

在数字化、智能化的今天&#xff0c;企业沟通方式也在不断地迭代和升级。企业微信&#xff08;企微&#xff09;作为企业内部沟通和外部拓展的重要工具&#xff0c;其功能的丰富性和便捷性为企业带来了诸多便利。其中&#xff0c;企微语音群发软件的出现&#xff0c;更是为企业…

consul数据持久化

一、下载consul 下载链接:Install | Consul | HashiCorp Developer 启动&#xff1a; 这里以windows系统为例&#xff0c;需要在consul.exe目录执行 #查看版本号&#xff1a; consul -version #启动命令&#xff1a; consul agent -dev 访问地址&#xff1a;http://localh…

Nexus3(nexus-3.19.1-01)忘记管理员密码

1、停服 ./nexus stop 2、进入OrientDB控制台&#xff1a; cd /apply/nexus3/nexus-3.42.0-01/lib/support/ java -jar ./nexus-orient-console.jar 3、在控制台执行&#xff1a; connect plocal:/apply/nexus3/sonatype-work/nexus3/db/security admin admin 4、重置密码…

前端工程化工具系列(七)—— PNPM(v9.1.4):高性能的 NPM 替代品

PNPM&#xff08;Performant NPM&#xff09;是一个高效的 NPM 包管理器&#xff0c;它使用硬链接和符号链接来减少磁盘空间的使用&#xff0c;并提高了安装速度。 1. 环境要求 v9 的 PNPM 需要 Node.js v18。 2. 安装 npm i -g pnpm3 基本功能 3.1 安装包 安装单个包&am…

【postgresql初级使用】触发器的创建删除,你不知道的触发器函数中的系统变量,数据一致性还可以这样来保证

使用触发器 ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 使用触发器概…

Redis之常用实战场景

1.Redis数据丢失场景 1.1 持久化丢失 采用RDB或者不持久化&#xff0c;就会有数据丢失&#xff0c;因为是手动或者配置以快照的形式来进行备份。 解决: 启用AOF&#xff0c;以命令追加的形式进行备份&#xff0c;但是默认也会有1s丢失&#xff0c;这是在性能与数据安全性中寻…

K-means聚类模型算法

K-means聚类是一种无监督的机器学习算法&#xff0c;用于将数据点划分到K个不同的簇中。这种算法的目标是最小化簇内的方差&#xff0c;即使得每个簇内的数据点与簇中心的距离尽可能小。以下是K-means聚类模型的主要步骤和特点&#xff1a; 主要步骤&#xff1a; 1. 选择K值&…

深入解析Spring Cloud Config:构建高可用分布式配置中心

在微服务架构中&#xff0c;配置管理是一个关键问题。Spring Cloud Config提供了一种解决方案&#xff0c;它是一个高可用、分布式的外部配置中心。本文将深入探讨Spring Cloud Config的原理、架构及其在实际项目中的应用&#xff0c;帮助读者掌握如何构建一个高效、可靠的分布…

SD NAND(贴片式TF卡)在储能领域的应用

储能系统&#xff08;Energy Storage System&#xff0c;简称ESS&#xff09;是指能将电能以化学能、势能、动能等形式储存起来&#xff0c;并在需要时将其转化为电能供应给用户的设备。主要由电池管理系统&#xff08;BMS&#xff09;、能量管理系统&#xff08;EMS&#xff0…

拿到Offer了才知道,这家公司年终奖只有几百块~

我也挠头了 最近又有不少粉丝上岸了&#xff0c;其中一位分享的事情比较有意思&#xff0c;和你分享一下&#xff1a; 以后你对比Offer的时候也可以多个经验。 事情是这样的&#xff1a; 他在经过2个多月空窗期之后终于拿到了Offer&#xff0c;月薪涨幅不大&#xff0c;但是…

java的clone

一、clone的用法&#xff1a; package chatRoom.F5;class Person implements Cloneable{//1.public String name;public Person(String name) {this.name name;}//2.protected Person clone() throws CloneNotSupportedException {return (Person)super.clone();//重写Object…

linux脚本执行报错|syntax error near unexpected token `$‘do\r‘‘

一、问题 在Window上用记事本txt写了个linux脚本&#xff0c;放到Linux上去执行报错|syntax error near unexpected token $‘do\r‘‘ 二、可通过vim的-b命令查询脚本&#xff08;-b表示二进制模式&#xff09; vim -b youtest.sh 发现&#xff0c;sh脚本后面多了^M 三、…

媒体有入口,发稿有入口 是什么意思?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体有入口&#xff0c;发稿有入口是指在新闻媒体发稿时&#xff0c;稿件可以通过一定的路径被访问和浏览。具体来说&#xff0c;有入口的新闻稿件可以通过点击链接&#xff0c;逐步深入…

芯片验证分享1 —— 开篇及名词解释

大家好&#xff0c;我是谷公子的藏经阁&#xff0c;今天和大家很高兴能和大家分享的是芯片验证中的一些内容&#xff0c;希望对大家的日常工作有所帮助&#xff0c;如果这些内容有帮助到大家的话&#xff0c;那么此次的分享就很值得。另外&#xff0c;对于这个课题&#xff0c;…

揭开旅游卡项目!是当下趋势风潮?来这给你整明白!

旅游卡作为一种旅游产品&#xff0c;近年来在市场上逐渐流行起来。它通常包含一系列旅游服务&#xff0c;如门票、住宿、餐饮、交通等&#xff0c;旨在为消费者提供一站式的旅游体验。在您所描述的案例中&#xff0c;云南6天五晚游旅游卡以极低的价格吸引消费者&#xff0c;并通…

ChatTTS增强版,增强音质、批量处理、固定音色、支持长文本

大家好&#xff0c;最近ChatTTS文字生成语音项目挺火。只需要输入一段文字&#xff0c;就可以生成一段非常逼真的声音。声音的效果非常不错。它支持英文和中文两种语言。我在原版的基础上做了一些改动&#xff0c;整合包分享给大家。 功能介绍 除了基础的文本生成音频功能以外…

实验10 RIP协议配置

实验10 RIP协议配置 一、原理描述二、RIPv1配置&#xff08;一&#xff09;实验目的&#xff08;二&#xff09;实验内容&#xff08;三&#xff09;实验配置&#xff08;四&#xff09;实验步骤 三、 RIPv2配置&#xff08;一&#xff09;实验目的&#xff08;二&#xff09;实…

IT闲谈——什么是容器?

目录 什么是容器一、容器的起源与发展二、目前使用较多的容器三、容器能用来做什么四、容器的应用场景 什么是容器 随着云计算和微服务的兴起&#xff0c;容器技术逐渐成为IT行业的热门话题。容器&#xff0c;简而言之&#xff0c;是一种轻量级的、可移植的、独立的软件包&…

windows 使用脚本 批量将一个文件夹下面 子文件夹下的视频文件拷贝到另一个文件下

如果想要在Windows上使用脚本&#xff08;比如批处理脚本 .bat&#xff09;来复制指定文件夹下所有子文件夹中的视频文件到另一个目标文件夹&#xff0c;可以使用以下的批处理脚本示例&#xff1a; echo off setlocal enabledelayedexpansion :: 设置源文件夹和目标文件夹的…

职称继续教育--专业课6

单选题&#xff08;共20题&#xff0c;每题1.5分&#xff09; 1、新型城镇化改革试点的总体要求是&#xff1a;以人的城镇化为核心&#xff0c;以&#xff08;&#xff09;为关键&#xff0c;大胆探索&#xff0c;试点先行。 A、提升质量 2、根据本讲&#xff0c;建设和管理城…