之前认为这些复杂的策略无法在果仁上回测,现在发现其实是可以做到的


只考虑三个简单的因子:总市值、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%的样本内年化超额,所以想在大盘股和这些量化机构拼,还不如在小盘玩比较好