对于zscore大家应该都比较熟悉,最初用于配对交易策略,思想是2支相关程度高的股票的差价在一定范围内波动,进行低买高卖的操作,具体做法是选取2支相关程度高的股票的某一段时间的价格序列,作差得到差价序列,然后进行正则化处理,公式如下:
zscore[i] = (s[i] - mean) / std
其中s[i]是序列第i个值,mean是这个序列的均值,std是这个序列的标准差,得到的即为序列第i个值的zscore值。
而在这个策略中,我把zscore思想用于单支股票,思想是股价和其均线值的差价在一定范围内波动,并计算其zscore值,获取买卖信号。具体做法如下:
设定股票池,最大持仓数,zscore上下限(即买卖信号点),zscore窗口大小,均线窗口大小
在每个交易日,根据上述公式计算股票池中每支股票当天的zscore值
若触发上限,则卖出;若触发下限,且未达到最大持仓数,则买入
回测结果如下,从13年初到18年7月,大概5年半的时间,年化39.13%,夏普1.756,胜率100%(一共交易15次),最大回撤17.047%,总体还算满意,属于稳健性投资策略。
回过头看,问题总结如下:zscore上下限,zscore窗口大小,均线窗口大小的设置都带有一些主观性,所以提出来大家一起讨论一下,看看有没有更合理的指标设置方法。
另外,对于股票池,我当前只设置了一支股票,因为还不知道如何寻找均值回归特点明显的股票,所以也提出来共同探讨,希望大家积极交流,共享经验!