本文来源于量化小论坛策略分享会板块精华帖,作者为元亨利贞,发布于2023年12月25日。
以下为精华帖正文:
1、起因
去年刚入门B圈,由于之前有做商品期货择时的经验,通常来讲,趋势跟随,并且回测结果还不错的情况,实盘跑起来基本OK。
于是我就用自己比较熟悉的模式上了实盘,用的BOLL,选择了姨太。大概优化了一下参数用的5m的频率。回测结果如下图,红圈是开始实盘的点,之前是回测:
结果扔了几万块钱,跑了一年,结果净值跑成了这样~
2、思考
邢大经常教导我们,要对策略加深理解,知道策略什么时候赚钱,什么时候亏钱,这样才不会慌。不会因为策略暂时的回撤就停策略,虽然这个说法不错,但是其实有一套逻辑即:
对策略有深厚的理解 -> 在回撤的时候心里不慌,甚至加仓 -> 策略净值回升,加仓获得更多收益。
问题是如果策略真的失效了怎么办?就一直加仓?或者即使不失效,但是回撤很长时间怎么办?
比如邢大直播上讲过的美股曾经的漂亮50行情,整整10年,一直是大盘股涨,小盘股就是不如大盘股。规模因子失效了么?
并没有。因为后面规模因子又涨回来了。
但是作为一个交易者,我能坚守信念,面对逆境10年么?
显然不可能。肯定会放弃投资了。
所以这个问题似乎就成了我的达摩利斯之剑,虽然它通常不会来烦扰我(交易赚钱或者保持平稳的时候)。
但是,duang。出现了上面的这样的策略,我就又不得不来面对与思考这个问题了。
我们已有的框架与知识确实有一些解决策略回撤问题的工具:
-
策略再择时。
-
策略轮动。
它们都有一些用,解决了一些问题,不过由于引入了假设(轮动与再择时策略的有效性),又会有新的问题。
策略再择时,通常是使用一些技术指标,对策略的净值进行择时。策略轮动通常也是计算策略净值一段时间的绩效评价指标,然后选最近表现好的,或者表现不好的来下一周期运行。
新的问题在于,再择时与轮动把策略失效的问题,变成了轮动策略失效的问题(逻辑上)即:如果我选的策略跌,没选的涨,择时停的时候策略涨了,跑的时候策跌了。
没有什么东西能够保证策略净值层面的动量与反转一定会稳定有效。于是我就麻了,那这问题不就无解了么。
3、新思路
一个偶然的机会,我在B站上面看某坤的内部人士对于当前量化市场的一个宣讲,他也讲到了策略失效的问题。他说:“我们追求一个高夏普比率,对于夏普为4的策略来说,我能很容易判断它是否失效,对于夏普比为1的策略我也很难判断它是否失效了。”
不知道大家有没有get到他的点,我反正是灵光一现。就是像下图这个样子:(纯手绘,有点丑,将就着看)
这个图啥意思呢,他们表示都是策略净值,上面那个图表示的就是高夏普的策略,一条直线往上,然后遇见回测。
下图就是我们正常的策略(夏普低的策略),波动向上,也在最近遇见了回撤幅度差不多,时间长度也差不多。
上图的策略我们看图就可以说策略应该是出了点问题,或者说最近失效了,但是下图能说最近那一段回撤是失效么?我们只能说是还算比较正常的回撤吧?这就是那个某坤分享的人的意思。于是我就悟了,这样也可以判断策略失效与否。
那么,这个光凭看图似乎太简单了,我们就引出本文的主角——假设检验吧(不太清楚的同学可以自行百度)。
上图的公式中X表示样本均值,μ0表示总体均值,σ表示总体标准差。n表示有多少个样本即自由度。也就是说在样本均值和总体均值之间的偏差经过标准差和自由度的调整之后,应该是符合标准正态分布的。
怎么用在策略失效与否的判断呢?
就是图一的策略之前很稳定(波动小),所以后面出现一定幅度的回撤就可以判断失效,但是图二中策略本身波动就很大,所以出现和图一同样的波动的情况也不能判断是否失效了。
另外就还跟自由度即样本量有关,统计可靠性随自由度增加成平方根增加,也就是回测时间越长,交易次数越多,我们的假设检验不需要太离谱的观测值就可以判断策略失效。这与我们的回测实盘的经验也是相符合的。
总的来说就是使用经过波动(标准差)和自由度(回测时长,净值点个数分钟频的会更多,更容易判断)调整的样本均值(近期的收益)与总体均值(总的回测期的收益)的偏差来判断策略是否正常,统计学认为这个调整后的偏差应该是符合标准正态分布的。
4、代码
前面说了那么多都是在说遇到的问题和新想到的解决方案。接下来我就用gpt给的假设检验代码来实际跑一下,看看我这个策略能不能被判定为有问题了。
代码中的pkl文件就是我最前面那张图的回测的净值曲线,回测至今,使用22年9月1号来切分,也就是接近上实盘的时候,取这个时间前后的数据来进行检验,看看假设检验是否能显著的判断它们的总体均值不一样(策略失效了)。输出结果是:
哎,无情的告诉我该停策略了。
5、不足
这个做法是有一些问题的,我已知的都列举在这里:
1、假设检验一般需要假设两个样本具有相同的分布,如果不是都要求正态分布的话。交易的数据显然不是那么靠谱的。数学不好,现学现卖,说的不对请指正~
2、长期的历史回测并不能代表总体,因为无论多长都是有误差的,但是对于交易策略来说,总体是什么呢?我也没太想明白。
3、假设检验只是从比较量化的方式上来判定策略“出现了问题”。并不代表策略就真的失效。有兴趣的可以去搜索一下“统计学的两类错误”。
6、结论
既然有这许多不足,并且也没有解决我自己开头提出的如何判断策略失效的问题,抑或如何应对策略回撤的问题(我现在依然不知道这个策略该停还是不停,个人倾向于坚持一下,等运气好赚点钱再停)。
那么这玩意有什么用?我觉得可以用来当做一个轮动因子对显著性指标排序,越显著失效的越加仓或者越下线。或者择时因子,检验判断显著失效了就择时停掉。
那么就引入了新的问题,停掉的策略什么时候再上线呢?哎不知道了,想的太过烧脑。感觉交易就是这样,更多的是一个思考者,而不是一个coder。