【ML】用遗传规划进行因子挖掘

【ML】用遗传规划进行因子挖掘

原创 Yud. 2AMquant 2024-04-02 07:30 广东

本文使用deap pkg进行基于遗传算法的因子挖掘。并对代码进行部分修改。

自定义了多个算子如下,同样包括时间序列相关的算子:

winsorize(x)

kurtdev(df,window)

if_then_else(condition,  out1, out2)

ts_zscore(df,window)

ts_sum(df, window=10)

ts_mad(df,window)

sma(df, window=10)

max_item(x,y)

stddev(df, window=10)

min_item(x,y)

correlation(x, y,  window=10)

negative(x)

add(x,y)

minmaxscale(df,window)

sub(x,y)

normscale(df,window)

mul(x,y)

decay_linear(x,window)

div(x,y)

covariance(x, y,  window=10)

power(x,constant = 2)

ts_rank(x, window=10)

log(x)

ts_min(df, window=10)

abs(x)

ts_max(df, window=10)

sign_(x)

delta(df, window=1)

inv_(x)

ts_argmax(x,  window=10)

sqrt(x)

ts_argmin(x, window=10)

sigmiod_(x)

ts_coef(x,window)

ts_prod(x,window =  10)

ts_intercept(x,window)

ts_range(df,window  =10)

ema(x,window)

ts_median(x0,window =  10)

sin(x)

delay(df,window = 10)

cos(x)

ts_percent(df,window  = 10)

tan(x)

ts_pct(df,window)

ts_r_avg(df,window)

skewdev(df,window)

signpower(x,constant)

根据所需因子的结果预期,定义编码方式变异规则、适应度需求。使用表达式树PrimitiveTree定义(编码)个体,在集合PrimitiveSet中定义个体所涉及的上述算子。在变异规则上限制复杂度/树的深度。

对于时间序列算子,为了使因子更具备解释意义,移动窗口的选择范围是(5,10,22),分别代表的时间区间是周,两周,一月。

为保证量纲一致,每个挖掘出的因子都会先进行zscore处理,随后根据优化目标进行遗传优化。(优化问题中其实也可以使用多目标优化,但想到各优化目标之间的配比权重其实也是个优化目标。综合考虑后暂时采用单一目标。)

实验过程结果展示如下:

图片

(以夏普为优化目标)

图片

(以IC为优化目标)

将上述因子进行因子检测,筛选出alpha因子。使用最高分组收益率作为因子收益计算绩效指标,并使用换手率评估交易成本。

以IC为优化目标的结果之一:

decay_linear_10(ts_mad_22(TURNOVER))

样本内

样本外(半年)

年化收益

19.58%

15.61%

年化波动率

17.05%

11.43%

夏普

1.1486

1.3652

IC

0.0419

0.0432

IR

0.2730

0.2833

换手率

0.1409

0.1496

走势

图片

              

综上,使用GP挖掘因子可以拓展思维,引入非线性运算,实现归纳演绎。

经过观察挖掘出来的因子,大多跟股票的成交情况有关,而差分、截距、斜率时间序列相关的算子被应用的较多,或者进行了类似2/3阶导的操作,捕捉成交(高维度)变化的信号。

可为人工挖掘因子提供灵感,或者定义新的算子。

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

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

相关文章

信号----硬件中断

硬件中断 键盘组合键是向进程发送信号,那么键盘数据是如何输入到内核中,然后变成信号的?这个信号又是由谁发送给进程的? 当键盘被按下,操作系统先知道用户用键盘输入了内容 那么操作系统是如何知道键盘上有内容了&…

模电期末复习(五)集成运算放大电路

集成运算放大电路 5.1 集成放大电路的特点5.2 集成运放的主要技术指标5.3 集成运放的基本组成部分5.3.1 偏置电路5.3.2 差分放大输入级5.3.3 中间级5.3.4 输出级 5.4 集成运放的典型电路5.4.1 双极型集成运放LM741 5.5 各类集成运放的性能特点5.6 集成运放使用中的几个具体问题…

【Linux驱动层】iTOP-RK3568学习之路(三):字符设备驱动框架

一、总体框架图 二、字符设备相关函数 静态申请设备号 register_chrdev_region 函数原型:register_chrdev_region(dev_t from, unsigned count, const char *name) 函数作用:静态申请设备号,可以一次性申请多个连续的号,count指定…

自学网络安全,一般人我劝你还是算了吧

学前寄语:走进网络安全的世界 持之以恒的追求:网络安全不是一朝一夕的学问,对于那些只有三分钟热度的朋友,可能需要重新考虑自己的选择。网络安全需要长期的投入和热情。 独立思考与实践:学习网络安全,光看…

HWOD:计算日期到天数转换

一、知识点 这里所有涉及到的都是公历(阳历) 1、闰年的判断 能被100整除的年份,能被400整除时,闰 不能被100整除的年份,能被4整除时,闰 2、一年有多少天 一年有12个月,这12个月分3类 第一类:大月&am…

SQL约束

文章目录 约束约束的分类:按照约束的作用效果不同唯一约束主键约束外键约束检查约束非空约束默认值约束 按照是否跟随列和字段属性来创建约束行级约束表级约束 创建约束创建唯一约束创建完表之后创建唯一约束创建表的同时创建唯一约束行级约束表级约束 创建主键约束…

如何对图片进行压缩和缩放

在手机像素越来越高的时代,照片的体积也在不断地膨胀,大部分情况下我们是不需要这么大的图片的,这个时候我们就需要对图片进行压缩或者缩放了,今天教大家如何缩小图片体积 打开智游剪辑(官网: zyjj.cc)&…

GO环境及入门案例

文章目录 简介一、win GO开发环境安装二、Linux go运行环境二、GO代码入门2.1 导包案例2.2 赋值2.3 变量、函数2.4 三方库使用 简介 go不是面向对象语言, 其指针、结构体等比较像C,知名的go 开源项目有docker k8s prometheus node-exporter等 一、win …

信息系统项目管理师(第四版)- 第12章 项目质量管理

项目质量管理 12.质量管理12.1.规划质量管理(定标准)12.1.1 定义12.1.2 作用12.1.3 输入12.1.4 工具与技术12.1.5 输出 12.2.管理质量(管过程)12.2.1 定义12.2.2 作用12.2.3 开展频次12.2.4 输入12.2.5 工具与技术12.2.6 输出 12.…

CompletableFuture编排异步线程

CompletableFuture 是 Java 8 引入的一种新的 Future,设计目的是为了编写非阻塞的异步代码。 传统异步编程方式 传统异步编程方式获得异步任务值,首先我们得通过future task ,然后创建一个实现callable内部类,或者通过lambda的表…

【Linux开发 第六篇】Linux常用命令知识

常用命令知识 关机和重启用户管理用户组运行级别帮助指令文件目录类时间日期类搜索查找类压缩和解压类 关机和重启 shutdown -h now //立刻进行关机 shutdown -h 1 “1分钟后进行” //一分钟后进行关机 并向登录Linux的各个用户发送字符串 shutdown -r now //现在重新启动…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释,Kiabana 服务的默认监听端口为5601 server.po…