均线策略应该是我们刚进入股市时就听过的一个策略,而双均线策略,顾名思义,就是两根均线:短期均线和长期均线。当短线均线上穿长期均线(金叉)时买入,当短期均线下穿长期均线(死叉)时卖出,这就是双均线策略的核心思想。
下图中,黄色的线表示30日均线,白色的线表示5日均线,可以看出,当5日均线下穿30日均线时,形成死叉,股价也成空头趋势;当5日均线上穿30日均线时,形成金叉,股价之后也一直在上涨。当然了,这是个必要不充分条件,我们要研究的就是金叉和死叉对上涨和下跌的概率估计。
首先来讲均线,均线有两种计算方法:MA(Moving Average)和EMA(Exponential Moving Average)
MA就是简单的移动平均线,做算术平均,新旧数据的权重是一样的。
MA(k)=P(N)+P(N−1)+...+P(N−k+1)kMA(k)= \frac{P(N) + P(N-1) + ... + P(N - k + 1)}{k} MA(k)=kP(N)+P(N−1)+...+P(N−k+1)
EMA是指数移动平均,越新的数据权重越大。
EMAtoday=α∗Pricetoday+(1−α)∗EMAyesterdayEMA_{today} = \alpha * Price_{today} + ( 1 - \alpha) * EMA_{yesterday} EMAtoday=α∗Pricetoday+(1−α)∗EMAyesterday
其中,α为平滑指数,一般取作2/(N+1)。在计算MACD指标时,EMA计算中的N一般选取12和26天,因此α相应为2/13和2/27。其中EMA1可以使用MA计算。
上面的EMA公式可以推导如下:
EMAtoday=α∗(Pricetoday−EMAyesterday)+EMAyesterdayEMA_{today} = \alpha * (Price_{today} - EMA_{yesterday}) + EMA_{yesterday} EMAtoday=α∗(Pricetoday−EMAyesterday)+EMAyesterday
将EMA_{yesterday}按公式继续迭代,可得:
EMAtoday=α∗(p1+(1−α)∗p2+(1−α)2∗p3+...)EMA_{today} = \alpha * (p_{1} + (1-\alpha)*p_{2} + (1-\alpha)^{2}*p_{3} + ...) EMAtoday=α∗(p1+(1−α)∗p2+(1−α)2∗p3+...)
其中,p1表示今天价格,p2表示昨天价格。
从该式中可以更清楚地看出EMA加权平均的特性。在EMA指标中,每天价格的权重系数以指数等比形式缩小。时间越靠近当今时刻,它的权重越大,说明EMA函数对近期的价格加强了权重比,更能及时反映近期价格波动情况。
对双均线策略进行回测,可以分为直接对指数进行回测,也可以对多个股票进行回测。对指数进行回测时,直接用指数的ma5和ma30来判断,当金叉时买入,死叉时卖出。
当对股票池进行回测时,每天判断每只个股的金叉死叉情况,同样是金叉时买入,死叉时卖出,控制每只股票的仓位是总资金量均分即可。
下图为对指数做回测的结果,年均收益在10%以上,这还是经理了暴跌和一年的熊市之后的收益,看似还不错。从图中也可以看出,双均线策略几乎都必过了暴跌和熊市。这也给我们一个提示,如果自己做投资,不靠程序的话,那跌破30(或60)日均线清仓的操作还是很有必要的。
那现在还有个问题,为什么我们要取5日均线和30日均线呢?这是个好问题,而且似乎我们的答案只能是:这是个经验值。那这个值真的是最优值吗?有没有其他的均线组合效果要更好一些?
下面的内容参考了《中低频量化交易策略研究》。
我们来做进一步研究,很简单,把所有的参数组合都测一遍(1日均线和2日均线组合,1日均线和3日均线组合,2日均线和3日均线组合…),就知道哪一种的组合从历史数据看是最优的了,这种方法也称之为网格搜索。但这么暴力的方法从直观上来讲有点太费时费力了,而且从理论上来讲,长度越大的两根相邻均线之间的差异越小,例如2日均线和3日均线之间的差异,远远大于100日均线和101日均线之间的差异,后两者由于一个交易日的差距被百分之一化,因此相差其实很小。这样,如果从1开始直到某一个长度结束所有可能的均线均参与搜索,那么长度小的均线的变化较快,搜索会偏向于变化不大的长期均线,进而造成计算上的冗余。(参考《中低频量化交易策略研究》)
所以,我们采用Fibonacci数列来处理均线的搜索范围,该数列在此处并无特殊意义,读者也可以自行换成其他组合。
斐波那契数列的形式为[1,2,3,5,8,13,21,34,55,89,144,…],也就是说,均线趋势策略的简单优化将使用 1 日均线 ① 、2 日均线、3 日均线、5日均线、等等直到144日均线一共11种均线的长短组合进行搜索,寻找盈利能力最好的组合,从而确定最优的均线趋势策略形式。这里限定短期均线最大搜索到 34 日均线,长期均线则从短期均线的后一根开始搜索一直到 144日均线结束。
下表给出了所有的短期、长期均线组合下均线趋势策略的年化收益率情况。整个表中年化收益率为正的均线趋势策略一共有 47 个,年化收益率为负的仅仅5个,因此纯粹从优化的角度来看,均线趋势策略是一个相对而言比较稳健的策略。收益率表现最差的一个策略是短期均线为3日均线、长期均线为 5 日均线的趋势组合,年化收益率为-12.77%。收益率表现最好的一个策略是短期均线为 3 日均线、长期均线为21 日均线的趋势组合,年化收益率达到25.51%。值得注意的是,这两个均线组合中的短期均线都是3日均线,也就是说在使用 3 日均线形成的短期均线时,均线趋势策略的收益表现具有比较大的变化幅度,这在网格搜索当中是一个不太好的现象。但是同时,长期均线是21日均线的6个均线趋势策略的收益都比较高而且相对稳定,年化收益率最低的一个也达到了 18.13%。综合来看,通过收益最优原则选择出来的短期均线为 3 日均线、长期均线为21日均线的均线趋势策略,所处的区域应该算是比较稳健的。
当然,书里并没有对5日均线和30日均线做回测,有兴趣的同学可以自行尝试一下。当从5日和34日的收益看,5日和30日的组合能超过3日和21组合的可能性比较小。
所以,今后我们在使用均线策略时,可以使用书中回测过的最佳组合ma3和ma21.
如果需要本篇中回测的程序,可以直接在微信公众号 Quant_Times 中发消息即可。