zoukankan      html  css  js  c++  java
  • 指数滑动平均EMA拾遗

    1  基本公式

    EMA(Exponential Moving Average)是常用的技术指标之一,也称为指数平滑(Exponential Smoothing),计算公式为

    $$S(n) = ux(n)+(1-u)S(n-1)$$

    其中$S(n)$表示$x(n)$在时刻$n$的EMA值,而$x(n)$使用如下的信号模型

    $$x(n) = a(n)+e(n)$$

    其中$a(n)$和$e(n)$分别表示信号项和噪声项。

    现在EMA的这一常用形式由Robert Goodell Brown提出。

     

    2  EMA的前提

    注意,Brown在分析EMA的时候,使用如下的前提

    $$a(n) = \mathrm{Constant}$$

    也就是说,$x(n)$中的信号分量是常数。实际信号通常不满足此条件,处理方法是局部近似为常数。

     

    3  EMA与SMA的等效

    3.1 Average Age

    我们知道,EMA的平滑常数

    $$ u = \frac{2}{N+1} $$

    这时EMA和一个时间长度为$N$的SMA(Simple Moving Average)“等效”。Brown在给出这一结论时使用了Average Age的概念

    $$ \mathrm{Age}\{x(n-k)\} = k $$

    其中$x(k)$的Age即为$x(k)$的观察时刻$k$到当前时刻$n$的时间,$\mathrm{Age}\{x(n)\}=0$, $\mathrm{Age}\{x(n-1)\}=1$, ...。$w(k)$为数据加权时的权重。对于SMA:当$0 \leq k \leq N-1$时,$w(k)=1/N$;其余$w(k)=0$。对于EMA,$w(k)=u(1-u)^k$ 。故有

    $$\mathrm{AverageAge}\{\mathrm{SMA}\} = \frac{0+1+...+N-1}{N} = \frac{N-1}{2} \\ \mathrm{AverageAge}\{\mathrm{EMA}\} = \sum_{k=0}^{n} u(1-u)^k k = \frac{1-u}{u}$$

    令SMA和EMA的Average Age相等,得$u=2/(N+1)$ 。

    3.2 方差

    此外,从估计方差的角度也能得出这一结论。对于$y(n)=\mathrm{Conv}(w(n),x(n))$,Conv表示卷积,$y$和$x$间的方差有如下关系

    $$\sigma_y^2 = \sigma_x^2 \sum w(k)^2$$

    而$\sigma_x^2=\sigma_e^2$,故

    $$\mathrm{var}\{\mathrm{SMA}\{x\}\} = \sigma_e^2 \sum_{k=0}^{N-1} \frac{1}{N^2}=\frac{\sigma_e^2}{N} \\ \mathrm{var}\{\mathrm{EMA}\{x\}\} = \sigma_e^2 \sum_{k=0}^\infty (u(1-u)^k)^2 = \sigma_e^2 \frac{u}{2-u}$$

    令以上两式相等,得$u=2/(N+1)$。

    3.3 直观

    从直观上看,等效的EMA和SMA拐点的个数、出现的时间、趋势的长度基本一致。

     

    4  从AR模型的角度看EMA

    EMA是一个一阶AR模型,有一个极点$1-u$,这样的系统只能跟踪阶跃信号$x(n)=\mathrm{step}(n)$,而不能跟踪线性斜变信号 $x(n)=n \mathrm{step}(n)$。其中

    $$\mathrm{step}(n)=\left\{ \begin{array}{ll} 1 & n \ge 0 \\ 0 & n \lt 0 \end{array} \right. $$

    实际上,该系统的阶跃响应为

    $$g(n) = 1-(1-u)^{n+1} \\ \lim_{n \to \infty} \{g(n)-x(n)\} = 0 $$

    也就是说,EMA跟踪阶跃信号的稳态误差为0。而对于斜变信号,系统响应为

    $$ y(n) = n-\frac{1-u}{u} (1-(1-u)^n) \\ \lim_{n \to \infty} \{y(n)-x(n)\} = \frac{1-u}{u} $$

    稳态误差不为0,这也就说明了,有趋势的时候,MA通常持续位于价格的下方(上升趋势)或上方(下降趋势)。

     

    5  从SMA到EMA

    另外,Brown使用如下的方法从SMA自然导出了EMA。设$x(n)$的时间长度为$N$的SMA为$M(n)$,当新数据到来时,需要剔除前面第$N$个数据,并将新数据计入,得

    $$M(n) = M(n-1)+\frac{x(n)-x(n-N)}{N}$$

    当我们不知道$x(n-N)$时,自然想到用估计值$M(n-1)$来代替,则有

    $$M(n) = M(n-1)+\frac{x(n)-M(n-1)}{N}$$

    $$M(n) = u x(n)+(1-u) M(n-1), u=\frac{1}{N}$$

    注意,尽管这样导出的$u=1/N$,但是它并不和长度为$N$的SMA等效。

     

     

    参考文献

    [1] http://en.wikipedia.org/wiki/Exponential_smoothing#cite_ref-3

    [2] Brown, Robert Goodell (1963). Smoothing Forecasting and Prediction of Discrete Time Series. Englewood Cliffs, NJ: Prentice-Hall.



     

  • 相关阅读:
    康复计划
    Leetcode 08.02 迷路的机器人 缓存加回溯
    Leetcode 38 外观数列
    Leetcode 801 使序列递增的最小交换次数
    Leetcode 1143 最长公共子序列
    Leetcode 11 盛水最多的容器 贪心算法
    Leetcode 1186 删除一次得到子数组最大和
    Leetcode 300 最长上升子序列
    Leetcode95 不同的二叉搜索树II 精致的分治
    Leetcode 1367 二叉树中的列表 DFS
  • 原文地址:https://www.cnblogs.com/aquastone/p/EMATips1.html
Copyright © 2011-2022 走看看