【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阶导的操作,捕捉成交(高维度)变化的信号。

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

  • 14
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值