移動平均

移动平均（英語：moving average，縮寫：MA ），又稱滾動平均值、滑動平均，在統計學中是一種通過創建整個數據集中不同子集的一系列平均數來分析數據點的計算方法。它也是有限脈衝響應濾波器的一種。變化包括: 簡單移動平均、指數移動平均、加權移動平均，以及累積移動平均（描述如下）。 给定一个数列和一个固定子集大小，移动平均数的第一个元素是由数列的初始固定子集的平均值得到的。然后通过“向前移位”修改子集，即排除序列的第一个数，并在子集中包含下一个值。 移动平均通常与時間序列数据一起使用，以消除短期波动，突出长期趋势或周期。短期和长期之间的阈值取决于应用，移动平均的参数将相应地设置。例如，它通常用于对财务数据进行技术分析，如股票价格、收益率或交易量。它也用于经济学中研究国内生产总值、就业或其他宏观经济时间序列。数学上，移动平均是卷积的一种类型，因此它可以被看作是用于信号处理的低通滤波器的一个例子。当与非时间序列数据一起使用时，移动平均滤波器的频率分量更高，但与时间没有任何特定的联系，尽管通常暗含某种排序。简单地看，它可以看作是把数据变得更平滑。 在金融应用中，一个简单移动平均（SMA）是以前 n 个数据的未加权平均数。然而，在科学和工程中，平均值通常取自中心值两边相等数量的数据。这样可以确保平均值的变化与数据的变化一致，而不是随时间变化。 例如，对于 n 天的收盘价样本，简单等权重移动平均是前 n 天收盘价的平均值。如果收盘价为 p M , p M − 1 , … , p M − ( n − 1 ) {\displaystyle p_{M},p_{M-1},\dots ,p_{M-(n-1)}} ，则公式为 p ¯ SM = p M + p M − 1 + ⋯ + p M − ( n − 1 ) n = 1 n ∑ i = 0 n − 1 p M − i . {\displaystyle {\begin{aligned}{\overline {p}}_{\text{SM}}&={\frac {p_{M}+p_{M-1}+\cdots +p_{M-(n-1)}}{n}}\\&={\frac {1}{n}}\sum _{i=0}^{n-1}p_{M-i}.\end{aligned}}} 当计算下一天的移动平均的时候，就会在求和中加入一个新值，剔除一个旧值，无需把所有数值重新加一遍： p ¯ SM = p ¯ SM , prev + 1 n ( p M − p M − n ) . {\displaystyle {\overline {p}}_{\text{SM}}={\overline {p}}_{{\text{SM}},{\text{prev}}}+{\frac {1}{n}}(p_{M}-p_{M-n}).} 所选择的时间段取决于利率变动的类型，如短期、中期或长期。从金融角度来看，移动平均线水平可以解释为市场下跌时的支撑，或者市场上涨时的阻力。 如果使用的数据不以平均值为中心，那么简单移动平均就会落后于最新的数据点一半的采样宽度。旧数据点的丢掉和新数据点的加入也会对SMA造成较大影响。SMA的一个特点是，如果数据存在周期性波动，那么应用该周期的SMA将消除这种波动（平均值总是包含一个完整的周期）。但是完全规律的循环是几乎不会遇到的。 对于许多应用来说，这有利于避免仅使用“过去”数据而引起的移位。因此，可以使用在计算平均值的系列中点的任一侧等距分布的数据来计算中心移动平均。 这需要在样本窗口中使用奇数个数据点。 SMA的主要缺点是，它使比窗口长度短的大量信号通过。更糟糕的是，它实际上将其反转。这可能会导致意外的伪影，例如，平滑结果中的峰值出现在数据中出现波谷的位置。由于某些较高的频率未正确消除，这也导致结果不如预期的平滑。 在技術分析中，不同的市場對常用天數（n值）有不同的需求，例如：某些市場普遍的n值為10日、40日、200日；有些則是5日、10日、20日、60日、120日、240日，視乎分析時期長短而定。投資者冀從移動平均線的圖表中分辨出支持位或阻力位。 指數移動平均（英語：exponential moving average，EMA或EWMA）是以指數式遞減加權的移動平均。 各數值的加權影響力隨時間而指數式遞減，越近期的數據加權影響力越重，但較舊的數據也給予一定的加權值。右圖是一例子。 加權的程度以常數 α 決定，α 數值介乎 0 至 1。α 也可用天數N來代表： α = 2 N + 1 {\displaystyle \alpha ={2 \over {N+1}}} ，所以，N=19天，代表 α=0.1。 設時間 t 的實際數值為 Yt，而時間t的EMA則為St；時間 t-1 的EMA則為 St-1，計算時間 t≥2 是方程式為： S t = α × Y t + ( 1 − α ) × S t − 1 {\displaystyle S_{t}=\alpha \times Y_{t}+(1-\alpha )\times S_{t-1}} 設今日（t）價格為 p t {\displaystyle p_{t}} ，則今日（t）的 E M A t {\displaystyle EMA_{t}} 方程式為： E M A t = α × p t + ( 1 − α ) × E M A t − 1 = E M A t − 1 + α × ( p t − E M A t − 1 ) {\displaystyle EMA_{t}=\alpha \times p_{t}+(1-\alpha )\times EMA_{t-1}=EMA_{t-1}+\alpha \times (p_{t}-EMA_{t-1})} 將 E M A t − 1 {\displaystyle EMA_{t-1}} 遞迴代入： E M A t = α × ( p t + ( 1 − α ) p t − 1 + ( 1 − α ) 2 p t − 2 + ( 1 − α ) 3 p t − 3 + ⋯ ) {\displaystyle EMA_{t}=\alpha \times (p_{t}+(1-\alpha )p_{t-1}+(1-\alpha )^{2}p_{t-2}+(1-\alpha )^{3}p_{t-3}+\cdots )} 理論上這是一個无穷级数，由於 ( 1 − α ) {\displaystyle (1-\alpha )} 小於 1，後面的數值會越來越小，可以被忽略只計算前 (N+1) 項。 對於近似均勻無變的數據少算的部份約為 ( 1 − α ) N + 1 {\displaystyle (1-\alpha )^{N+1}} EMA權 重 = α × [ 1 + ( 1 − α ) + ( 1 − α ) 2 + ( 1 − α ) 3 + ⋯ + ( 1 − α ) N ] {\displaystyle {\text{EMA權 重}}\;=\alpha \times {\Big [}1+(1-\alpha )+(1-\alpha )^{2}+(1-\alpha )^{3}+\cdots +(1-\alpha )^{N}{\Big ]}} = [ 1 − ( 1 − α ) N + 1 ] {\displaystyle \qquad \qquad \;={\Big [}1-(1-\alpha )^{N+1}{\Big ]}} 假設MA和EMA有相同質心, MA質心= ( 1 + N ) 2 {\displaystyle {(1+N) \over 2}} , EMA 質心= α × [ 1 + 2 ( 1 − α ) + 3 ( 1 − α ) 2 + ⋯ ] = 1 α {\displaystyle \alpha \times {\Big [}1+2(1-\alpha )+3(1-\alpha )^{2}+\cdots {\Big ]}={1 \over \alpha }} , 即 ( 1 + N ) 2 = 1 α , α = 2 ( N + 1 ) {\displaystyle {{(1+N)} \over 2}={1 \over \alpha },\quad \alpha ={2 \over {(N+1)}}} 根據1697年 Johann Bernoulli: lim n → ∞ ( 1 + x n ) n = e x {\displaystyle \lim _{n\to \infty }{(1+{x \over n})^{n}}={\mbox{e}}^{x}} , 則 1 − ( 1 − α ) N + 1 = 1 − ( 1 − 2 ( N + 1 ) ) N + 1 ≈ 1 − e − 2 ≈ 86 % {\displaystyle 1-(1-\alpha )^{N+1}=1-\left(1-{2 \over (N+1)}\right)^{N+1}\approx 1-{\mbox{e}}^{-2}\approx 86\%}  ; 即當 α = 2 ( N + 1 ) {\displaystyle \alpha ={2 \over (N+1)}} 時, 只計算前 N+1 項已涵蓋了 86% 完整權重; 若要計算函蓋 99.9% 的完整加權，計算前 k-1 項( k-1 天) 忽略第k項之後, 則約略漏算了 ( 1 − α ) k = 0.1 % = 0.001 {\displaystyle \;(1-\alpha )^{k}=0.1\%=0.001} , 則 k = log e ⁡ ( 0.001 ) log e ⁡ ( 1 − α ) ≈ log e ⁡ ( 0.001 ) − α ≈ 3.45 ( N + 1 ) {\displaystyle k={\log _{e}(0.001) \over {\log _{e}(1-\alpha )}}\approx {\log _{e}(0.001) \over {-\alpha }}\approx 3.45(N+1)} , 由於當 N 值很大時 α 很小接近零, log e ⁡ ( 1 − α ) {\displaystyle \;\log _{e}(1-\alpha )} = − α + α 2 2 + ⋯ {\displaystyle -\alpha +{\alpha ^{2} \over 2}+\cdots } 將趨近 − α {\displaystyle -\alpha } (泰勒展開)。 若只要函蓋 99% 的加權則 k ≈ log e ⁡ ( 0.01 ) − α ≈ 2.30 ( N + 1 ) {\displaystyle k\approx {\log _{e}(0.01) \over {-\alpha }}\approx 2.30(N+1)} ; 要包含 95% 的加權則 k ≈ log e ⁡ ( 0.05 ) − α ≈ 1.50 ( N + 1 ) {\displaystyle k\approx {\log _{e}(0.05) \over {-\alpha }}\approx 1.50(N+1)} ; 例如: 當 N=9, α = 0.200 , k ∼15 函蓋95% , k ∼23 能函蓋99% ; k ∼35 函蓋達99.9% ; 當 N=26, α ≈ 0.074 , k ∼40 函蓋95%. 加權移動平均（英語：weighted moving average，WMA）指計算平均值時將個別數據乘以不同數值，在技術分析中，n日WMA的最近期一個數值乘以n、次近的乘以n-1，如此類推，一直到0： W M A M = n p M + ( n − 1 ) p M − 1 + ⋯ + 2 p M − n + 2 + p M − n + 1 n + ( n − 1 ) + ⋯ + 2 + 1 {\displaystyle WMA_{M}={np_{M}+(n-1)p_{M-1}+\cdots +2p_{M-n+2}+p_{M-n+1} \over n+(n-1)+\cdots +2+1}} 由於 W M A M + 1 {\displaystyle WMA_{M+1}} 與 W M A M {\displaystyle WMA_{M}} 的分子相差 n p M + 1 − p M − ⋯ − p M − n + 1 {\displaystyle np_{M+1}-p_{M}-\cdots -p_{M-n+1}} ，假設 p M + p M − 1 + ⋯ + p M − n + 1 {\displaystyle p_{M}+p_{M-1}+\cdots +p_{M-n+1}} 為總和M： 總和M+1 = {\displaystyle =} 總和M + p M + 1 − p M − n + 1 {\displaystyle +p_{M+1}-p_{M-n+1}} 分子M+1 = N M + 1 = {\displaystyle =N_{M+1}=} 分子M + n p M + 1 − {\displaystyle +np_{M+1}-} 總和M W M A M + 1 = N M + 1 n + ( n − 1 ) + ⋯ + 2 + 1 {\displaystyle WMA_{M+1}={N_{M+1} \over n+(n-1)+\cdots +2+1}} 留意分母為三角形數，方程式為 n ( n + 1 ) 2 {\displaystyle n(n+1) \over 2} 右圖顯示出加權是隨日子遠離而遞減，直至遞減至零。 在累积移动平均（CMA）中，数据以有序数据流的形式到达，用户希望获得直到当前数据点为止的所有数据的平均值。例如，投资者可能想要特定股票直到当前时间的所有股票交易的平均价格。随着每笔新交易的发生，可以使用累计平均值（通常是直到当前时间的 n 个值序列 x 1 , … , x n {\displaystyle x_{1},\ldots ,x_{n}} 的均等加权平均值）计算该点之前所有交易的平均交易价格： CMA n = x 1 + ⋯ + x n n . {\displaystyle {\text{CMA}}_{n}={{x_{1}+\cdots +x_{n}} \over n}\,.} 计算此问题的暴力方法是存储所有数据，并计算总和，并在每次新数据点到来时除以数据点数。但其实，可以使用下面地公式，在拿到新值 x n + 1 {\displaystyle x_{n+1}} 时，简单地更新累计平均值： CMA n + 1 = x n + 1 + n ⋅ CMA n n + 1 . {\displaystyle {\text{CMA}}_{n+1}={{x_{n+1}+n\cdot {\text{CMA}}_{n}} \over {n+1}}.} 因此，新数据点的当前累积平均值等于先前的累积平均值乘以 n，再加上最新的数据点，所有这些均除以到目前为止已接收的点数 n+1。 当所有数据点都到达（n = N）时，累积平均值将等于最终平均值。还可以存储数据点的当前总和以及点的数目，并将总数除以数据点的数目，以便在每次有新的基准点到达时得到CMA。 累积平均公式的推导很直接。使用 x 1 + ⋯ + x n = n ⋅ CMA n {\displaystyle x_{1}+\cdots +x_{n}=n\cdot {\text{CMA}}_{n}} 对于 n + 1，我们有 x n + 1 = ( x 1 + ⋯ + x n + 1 ) − ( x 1 + ⋯ + x n ) {\displaystyle {\begin{aligned}x_{n+1}&=(x_{1}+\cdots +x_{n+1})-(x_{1}+\cdots +x_{n})\\[6pt]\end{aligned}}} 求解 CMA n + 1 {\displaystyle {\text{CMA}}_{n+1}} 就可以得到 CMA n + 1 = x n + 1 + n ⋅ CMA n n + 1 = x n + 1 + ( n + 1 − 1 ) ⋅ CMA n n + 1 = ( n + 1 ) ⋅ CMA n + x n + 1 − CMA n n + 1 = CMA n + x n + 1 − CMA n n + 1 {\displaystyle {\begin{aligned}{\text{CMA}}_{n+1}&={x_{n+1}+n\cdot {\text{CMA}}_{n} \over {n+1}}\\[6pt]&={x_{n+1}+(n+1-1)\cdot {\text{CMA}}_{n} \over {n+1}}\\[6pt]&={(n+1)\cdot {\text{CMA}}_{n}+x_{n+1}-{\text{CMA}}_{n} \over {n+1}}\\[6pt]&={{\text{CMA}}_{n}}+{{x_{n+1}-{\text{CMA}}_{n}} \over {n+1}}\end{aligned}}} 有時計算移動平均時會加入其他變數，例如，「交易量加權」會加入交易量的因素。 技術分析 K線 布林帶（BBands） 隨機指標（KD） 相對強弱指數（RSI） 指數平滑異同移動平均線（MACD） 乖離率（BIAS） Statistical Analysis, Ya-lun Chou, Holt International, 1975, ISBN 0-03-089422-0, section 17.9. The derivation and properties of the simple central moving average are given in full at Savitzky–Golay filter. NIST/SEMATECH e-Handbook of Statistical Methods: Single Exponential Smoothing （页面存档备份，存于互联网档案馆），National Institute of Standards and Technology Investopedia的介紹 （页面存档备份，存于互联网档案馆）