之前认为这些复杂的策略无法在果仁上回测,现在发现其实是可以做到的
只考虑三个简单的因子:总市值、20日换手率,60日涨幅
作为基准的等权加权综合因子:SRankScore(总市值,0,默认股票池,0)+SRankScore(20日换手率,0,默认股票池,0)+SRankScore(60日涨幅,0,默认股票池,0)
年因子动量因子:IF(SRankIC(总市值,0,250,默认股票池,0)>0,1,0)*SRankScore(总市值,0,默认股票池,0)+IF(SRankIC(20日换手率,0,250,默认股票池,0)>0,1,0)*SRankScore(20日换手率,0,默认股票池,0)+IF(SRankIC(60日涨幅,0,250,默认股票池,0)>0,1,0)*SRankScore(60日涨幅,0,默认股票池,0)
月因子动量因子:IF(SRankIC(总市值,0,20,默认股票池,0)>0,1,0)*SRankScore(总市值,0,默认股票池,0)+IF(SRankIC(20日换手率,0,20,默认股票池,0)>0,1,0)*SRankScore(20日换手率,0,默认股票池,0)+IF(SRankIC(60日涨幅,0,20,默认股票池,0)>0,1,0)*SRankScore(60日涨幅,0,默认股票池,0)
根据至今为此的IC值动态调参的综合因子:SRankIC(总市值,0,0,默认股票池,0)*SRankScore(总市值,0,默认股票池,0)+SRankIC(20日换手率,0,(Year()-2007)*240+DayY(0)-21,默认股票池,0)*SRankScore(20日换手率,0,默认股票池,0)+SRankIC(60日涨幅,0,(Year()-2007)*240+DayY(0)-61,默认股票池,0)*SRankScore(60日涨幅,0,默认股票池,0)
.
“默认股票池”剔除了涨跌停、ST和上市不足60日的股票
选择240是发现取更高的值会导致60日涨幅/20日换手率的RankIC出现大量空值
动态调参因子中参数可以对系数进行更复杂的处理,以检验自己调参方式的样本外(而不是样本内)效果
![]()
结果算下来发现换来换去还不如直接等权
尝试了各种方法改善效果,比如反向加权,中性化,叠加等等,但都失败了
所以相比幻想“肯定是因为XXX才XXX"(比如”肯定是因为没有根据最新的数据调整参数策略才失效“乃至更荒谬的“肯定是因为它没有公开性别所以它肯定是女性才会这样”),不如进行实证检验其有效性
当然,还是有强于简单等权的办法的,但真能比简单的IC加权调参方法更好的方法其实不那么容易……
https://www.htsec.com/jfimg/colimg/upload/20200323/26211584942439271.pdf
比如非线性化还是有些潜力的,但这就不只是调权重那么简单的事情了
![]()
![]()
![]()
相比用各种复杂的方式拟合多头表现不佳的因子,类似此前提到的,利用类似ReLU的函数干脆无视多头端,只利用其空头端的排除效果,其实还好一些
![]()
顺带一提,就连中证500里面都是卷成这样,用上这些各种办法也就为了提升平均不到1%的样本内年化超额,所以想在大盘股和这些量化机构拼,还不如在小盘玩比较好
