移动平均:你知道的与你不知道的
1 前言
移动平均(Moving Average,MA),又称移动平均线,简称均线。作为技术分析中一种分析时间序列的常用工具,常被应用于股票价格序列。移动平均可过滤高频噪声,反映出中长期低频趋势,辅助投资者做出投资判断。
根据计算方法的不同,流行的移动平均包括简单移动平均、加权移动平均、指数移动平均,更高阶的移动平均算法则有分形自适应移动平均、赫尔移动平均等。这其中,简单移动平均又最为常见。下图为上证指数日线的 5 个不同计算窗口(20 日,50 日,120 日,200 日,300 日)的简单移动平均线。
简单移动平均(Simple Moving Average, SMA)就是对时间序列直接求等权重均值,因此使用简单。但其最令人诟病的就是它的滞后性。从上图不难看出,随着计算窗口 T 的增大,移动平均线越来越平滑,但同时也越来越滞后。以 120 日均线为例,在 2015 年 6 月份之后的大熊市开始了很长一段时间之后,120 日均线才开始呈现下降趋势。如果我们按照这个趋势进行投资,那这个滞后无疑造成了巨额的亏损。
事实上,任何移动平均算法都会呈现一定的滞后性。它以滞后性的代价换来了平滑性,移动平均必须在平滑性和滞后性之间取舍。然而,滞后性是怎么产生的呢?简单移动平均在时间上滞后多少呢?有没有什么高级的移动平均算法能在保证平滑性的同时将滞后性减小到最低呢?这些就是本文要回答的问题。
2 移动平均的本质
移动平均的本质是一种低通滤波。它的目的是过滤掉时间序列中的高频扰动,保留有用的低频趋势。如何从时间序列中抽取出真正的低频趋势呢?无论采取哪种移动平均算法,理论上的计算方法都相同,下面我们简要说明。同时,我们也会清晰地阐述该计算方法仅在理论上有效,而在实际应用中是无法实现的,并由此揭示产生滞后性的原因。
假设我们有一个时间序列 y = {…, y_(t-2), y_(t-1), y_t, y_(t+1), y_(t+2), …},如下图所示。另外,假设我们有一个作用在时域 t 上的过滤函数 F(注:这个 F 的具体形式根据不同的移动平均算法而不同)。
在理论上,在任意 t 时刻的低频滤波(用 x_t 表示)在数学上可以表示为该时间序列 y 和过滤函数 F 在整个时域上的卷积,即
其中,F_i 为过滤函数 F 在时刻 i 的取值。由于在实际中不可能用到无穷多的数据,因此可以考虑给过滤加一个窗函数,即过滤函数 F 只在窗口长度 T 内有效、在窗口之外为 0,如下图所示:
加入长度为 T 的窗函数后,在时刻t的低频滤波变为该时间序列 y 和过滤函数 F 在这个窗口内的卷积:
然而,无论是否使用加窗函数,上述公式最大的问题是,在计算t时刻的低频分量时,利用到了未来的数据。换句话说,理论上的低通滤波(或者移动平滑)必须要用事后数据,其假设所有数据都发生后再在全局上计算所有时点的低频分量。但这在实时数据中是不可能的,因为在任何当前时刻 t,我们都没有未来数据可以利用。
正因如此,在实际应用中,我们无法使用 t-(T-1)/2 到 t+(T-1)/2 之间的数据,只能退而求其次使用 t-(T-1) 到 t 之间的数据。这相当于我们把计算低频趋势的过滤窗函数在时域上向左平移 (T-1)/2 个单位,如下图所示:
如此处理后,对于实时数据,在当前时刻 t 的低频滤波变为该时间序列 y 和过滤函数 F 在 t-T+1 到 t 之间的卷积:
没有未来数据便是滞后的根本原因。
对于简单移动平均来说,在窗口 T 内,过滤函数在每个时点的取值都是 1/T。利用上述公式计算得到的实际上是 t-(T-1)/2 时刻(而非 t 时刻)的低频趋势,而我们把它当作 t 时刻的低频趋势使用,这便产生了 (T-1)/2 的滞后。当我们使用简单移动平均时,在当前时刻 t,对于给定的时间窗口 T,我们仅能求出 t-(T-1)/2 时刻之前的低频趋势,而无法求出 t-(T-1)/2 之后的低频趋势。这也解释了为什么时间窗口 T 越大,滞后 (T-1)/2 越多。这就是为什
么看股票数据里面 MA20、MA30、MA50 等日均线这种,计算均线的窗口 T 越大,得到的移动平滑曲线越滞后。
既然无论如何都没有未来数据,那么是否意味着我们就只能接受移动平均的滞后性呢?答案是否定的。换个角度来考虑这个问题,滞后性说明由简单移动平均计算得到的低频趋势对近期的最新数据不够敏感。这是由于它在计算低频趋势时,对窗口内所有的数据点都给予相同的权重。按着这个思路延伸,自然的想法就是在计算移动平均时,给近期的数据更高的权重,而给窗口内较远的数据更低的权重,以更快的捕捉近期的变化。由此便得到了加权移动平均和指数移动平均。
3 加权移动平均
在计算加权移动平均(Weighted Moving Average, WMA)时,窗口内的过滤函数的取值从当前数据到之前第 T-1 期的数据依次线性递减。因此,第 t-i 期的 F_(t-i) 为 2(T-i)/(T(T+1)),i = 0, 1,……, T-1。该权重是 i 的单调线性递减函数。下图为 T = 15 时不同 i 的取值对应的权重(图片来自 wiki)。
adaptive在确定了权重后,t 时刻的加权移动平均(记为 WMA_t)由下式得到:
值得一提的是,由于严格的按照线性递减,因此权重会最终在当前时刻之前的第 T 期时点
衰减为 0。
以上证指数过去 10 年的日数据为例,下图比较了 T = 100 时的简单移动平均和加权移动平均的过滤效果。加权移动平均比简单移动平均对近期的变化更加敏感,尤其是在牛熊市转换的时候,加权移动平均的滞后性小于简单移动平均。但是,由于仅采用线性权重衰减,加权移动平均仍然呈现出滞后性。
4 指数移动平均
指数移动平均(Exponential Moving Average, EMA)和加权移动平均类似,但不同之处是各数值的加权按指数递减,而非线性递减。此外,在指数衰减中,无论往前看多远的数据,该期数据的系数都不会衰减到 0,而仅仅是向 0 逼近。因此,指数移动平均实际上是一个无穷级数,即无论多久远的数据都会在计算当期的指数移动平均数值时有一定的作用,只不过离当前太远的数据权重非非常低,因此它们的作用往往可以忽略。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。