摘要 本篇承接(三)的研究,进一步给出不同参数设置下策略的回测效果。另外讨论了未来函数问题及对应行修正策略。

1. 参数列表

(三)中已经给出策略涉及的各类参数包括:width、q、period、value_thre/slope_thre、delay以及rate。这里暂令rate为千3、delay=1,不参与优化。

2. 参数width/q的二维优化

由于width与q决定了滑动后相对强弱指标的具体形态,可以联合进行优化。首先令参数width(para_wid)从150至300,参数q(para_q)从10至100,步长均为10,考察每对参数组下的策略年化率(re),绘制热区图如下:

规律尚不明显,因此扩大遍历范围:para_wid从50至500(步长为10),para_q从10至100(步长为5)。热区图如下:

似乎para_wid越小,re有越高的趋势,因此继续调整参数遍历范围:para_wid从10至300(步长为10),para_q从10至100(步长为5)。热区图如下:

上图表明,para_wid与para_q均越小时,re越高,且最高的年化率超过了50%。进一步调整遍历范围:para_wid从2至20(步长为2),para_q从5至15(步长为1)。热区图如下:

这种参数越小,收益率越高的规律更为明显。最后将遍历范围调整至取值最小的范围,即para_wid从2至20,para_q从0至20(步长均为1):

由上图,高收益参数区很明显沿着45度主对角线分布,且当width=2、q=3时,策略回测效果最好(年化率超过54%),此时的回测结果如下:

上述过于理想化的结果不免引起反思:是否回测过程中出现了问题。

3. 未来函数的思考以及原有回测方式修正

做策略回测时,需要格外关注是否牵涉到未来函数,即当下的交易是否用到了未来的数据。这一点非常重要,因为未来函数无异于事后诸葛亮,使得一些模拟测效果很好的策略实盘时效果却大打折扣。

进一步思考,认为“未来函数陷阱”大致存在于三类情况中:第一,策略指标的构建时(包括构建指标时所用参数的计算、指标值的计算中是否用到未来数据);第二,交易信号的触发时(例如交易信号是基于当天收盘价的函数,则当天结束前不能基于该信号做交易决策);第三,交易的实施时(例如交易信号是基于当天收盘价的函数,则交易不能当天开展)。后两类情况稍作注意即可避免,而第一种情况,“未来函数”存在的形式多种多样,特别需要注意。

本策略针对后两类情况已经做了规避(delay参数设置大于等于1)。但对于第一类情况,如果回测时不加修正,则存在一些问题:虽然RMA平滑是在一个滑动窗口中不断进行,且平滑后的数据在固定窗口下没有缺失(即在固定某一个窗口的视角下没有未来函数),但具体到某一个平滑值的计算时,用到了未来若干个数据

因此在回测时,需要做如下调整,以规避未来函数陷阱:

  1. 对整个历史数据计算rs指标;
  2. 从rs序列开头,到考察时点,对窗内rs序列做RMA平滑;
  3. 对窗内的rs平滑序列按触发规则确定交易信号;
  4. 随着考察时点的推进,不断循环2、3过程,以确定真实回测情况下的交易信号序列;
  5. 基于交易信号序列,按简单多空交易计算策略收益率

修正后的回测过程真正模拟了该策略在历史数据下的表现。按此调整下,模型的循环大大增加,相应计算耗时会有数量级上的增加。

当然,这种修正方法对于一般前项型均线平滑方法(如SMA、WMA、EMA等)则完全没有必要,而是否需要修正,关键是看该种方法在平滑过程中是否用到了未来数据。又结合(二)的讨论,可以这样说,对于SMA等前项型平滑方法,一方面因为只用到了前项数据,导致平滑序列具有延迟性,但在回测时无需做上述循环修正,无疑大大节省了计算量;而对于RMA等需要用到后续数据的方法,虽然平滑的结果很好且不存在延迟性,但在回测时则必须通过上述循环修正以规避未来函数。这两种方法究竟孰优孰劣,只能从回测结果来说明。

4. 后续一些工作

前面的研究不断促使新的想法出现,新想法不断填充以往模型的框架使之不断丰满。目前来看,基于相对强弱指标的轮动策略框架已经进化如下:

  1. 指标设立层面:两种相对强弱指标
  2. 指标平滑层面:可以选择不平滑直接;也可以选取若干平滑方法进行平滑
  3. 信号触发层面:上下突破阈值即做多(空)等
  4. 交易策略层面:简单多空/5050

仅就上述1、2点,可以变化出8种策略,接下来可以尝试将策略按上述细分进行研究。


著作权归作者刘登峰所有。商业转载请联系作者获得授权(WeChat: terence2015),非商业转载请注明出处。