移動平均

<image>

移動平均（moving average，縮寫：MA），又稱滾動平均值、滑動平均，在統計學中是一種通過創建整個數據集中不同子集的一系列平均數來分析數據點的計算方法。它也是有限脈衝響應濾波器的一種。變化包括: 簡單移動平均、指數移動平均、加權移動平均，以及累積移動平均（描述如下）。

給定一個數列和一個固定子集大小，移動平均數的第一個元素是由數列的初始固定子集的平均值得到的。然後通過「向前移位」修改子集，即排除序列的第一個數，並在子集中包含下一個值。

移動平均通常與時間序列數據一起使用，以消除短期波動，突出長期趨勢或周期。短期和長期之間的閾值取決於應用，移動平均的參數將相應地設置。例如，它通常用於對財務數據進行技術分析，如股票價格、收益率或交易量。它也用於經濟學中研究國內生產總值、就業或其他宏觀經濟時間序列。數學上，移動平均是卷積的一種類型，因此它可以被看作是用於信號處理的低通濾波器的一個例子。當與非時間序列數據一起使用時，移動平均濾波器的頻率分量更高，但與時間沒有任何特定的聯繫，儘管通常暗含某種排序。簡單地看，它可以看作是把數據變得更平滑。

## 數位訊號處理觀點下的移動平均

在數位訊號處理（DSP）領域中，移動平均可視為一種用來平滑離散時間訊號的低通濾波器。不同類型的移動平均在系統特性上，對應著不同的濾波器架構與頻率響應：

簡單移動平均在數學上等同於一個有限脈衝響應（FIR）濾波器。若將時間序列視為離散時間訊號 $x[n]$，一個長度為 $N$ 的 SMA 其差分方程式為：

$$y[n] = \frac{1}{N}\sum_{k=0}^{N-1} x[n-k]$$

在時域中，這相當於對訊號施加一個長度為 $N$ 的矩形窗（Rectangular window）。其頻率響應呈現Sinc函數 $\frac{\sin(\omega N/2)}{\sin(\omega/2)}$ 的特徵。由於 Sinc 函數具有顯著的旁波瓣（Side lobes），這意味著 SMA 雖然能濾除大部分高頻雜訊，但對於某些特定頻率的週期性波動無法完全抑制，甚至可能產生相位反轉（Phase reversal），這在資料分析上會導致偽影或偽訊號的產生。

相較之下，指數移動平均（EMA）由於在計算時引入了前一次的輸出結果，在數位訊號處理中對應於一階無限脈衝響應（IIR）濾波器。其差分方程式具備回饋（Feedback）特徵：

$$y[n] = \alpha x[n] + (1-\alpha) y[n-1]$$

由於具備指數遞減的脈衝響應，EMA 在系統運算上不需儲存大量的歷史資料，且其頻率響應的滾降（Roll-off）特性通常能比同長度的 SMA 更平滑地衰減高頻訊號。

在金融技術分析中常提及移動平均具有「滯後性（Lag）」，此現象在訊號處理中稱為群延遲或相位延遲。任何處理即時訊號的因果濾波器（Causal filter）皆會產生時間差。對於長度為 $N$ 的 SMA，其線性相位特性會產生精確的 $\frac{N-1}{2}$ 個取樣點的群延遲。這解釋了為何數據趨勢發生反轉時，SMA 的轉折點會落後於實際數據。而 EMA 作為一階 IIR 濾波器，其非線性相位特性使其在低頻區域的群延遲較小，因此對最新數據的反應速度在數學結構上會比 SMA 更為迅速。

## 在美國線（OHLC）與價格特徵的進階應用

在金融市場的技術分析中，移動平均最常被應用於平滑美國線（OHLC chart）所記錄的價格波動。傳統上，移動平均的輸入訊號 $x[n]$ 多半僅採用美國線四項資訊中的「收盤價（Close）」。然而，單一收盤價容易受到市場尾盤的極端交易或人為高頻雜訊影響。

結合訊號預處理的觀念，進階的應用會提取美國線中的多維度資訊來重建輸入訊號。例如，將最高價（High）、最低價（Low）與收盤價（Close）取算術平均，計算出「典型價格（Typical Price）」：

$$Typical\ Price = \frac{High + Low + Close}{3}$$

將典型價格或其他加權價格（如包含開盤價的 $\frac{Open+High+Low+Close}{4}$）作為離散訊號再輸入至 SMA 或 EMA 濾波器中，相當於在進行時間軸的低通濾波前，先進行了振幅軸的降噪處理。這種做法能更客觀地反映該取樣區間的真實價格重心，有效降低單一數據點極端波動對移動平均線造成的誤導。

## 簡單移動平均

<image>

在金融應用中，一個簡單移動平均（SMA）是以前 n 個數據的未加權平均數。然而，在科學和工程中，平均值通常取自中心值兩邊相等數量的數據。這樣可以確保平均值的變化與數據的變化一致，而不是隨時間變化。

例如，對於 n 天的收盤價樣本，簡單等權重移動平均是前 n 天收盤價的平均值。如果收盤價為 $p_M, p_{M-1}, \dots, p_{M-(n-1)}$，則公式為

$$\begin{align} <pre> \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}. </pre> \end{align}$$

當計算下一天的移動平均的時候，就會在求和中加入一個新值，剔除一個舊值，無需把所有數值重新加一遍：

$$\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日，視乎分析時期長短而定。投資者冀從移動平均線的圖表中分辨出支持位或阻力位。

## 指數移動平均

<image>

指數移動平均（exponential moving average，EMA或EWMA）是以指數式遞減加權的移動平均。

各數值的加權影響力隨時間而指數式遞減，越近期的數據加權影響力越重，但較舊的數據也給予一定的加權值。右圖是一例子。

加權的程度以常數 α 決定，α 數值介乎 0 至 1。α 也可用天數N來代表：$\alpha={2\over{N+1}}$，所以，N=19天，代表 α=0.1。

設時間 t 的實際數值為 Yt，而時間t的EMA則為St；時間 t-1 的EMA則為 St-1，計算時間 t≥2 是方程式為：

$$S_{t} = \alpha \times Y_{t} +(1-\alpha) \times S_{t-1}$$

設今日（t）價格為$p_{t}$，則今日（t）的$EMA_{t}$方程式為：

$$EMA_{t} = \alpha \times p_{t} + (1-\alpha) \times EMA_{t-1} = EMA_{t-1} + \alpha \times (p_{t} - EMA_{t-1})$$

將$EMA_{t-1}$遞迴代入：

$$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 - \alpha)$小於 1，後面的數值會越來越小，可以被忽略只計算前 (N+1) 項。

對於近似均勻無變的數據少算的部份約為$(1-\alpha)^{N+1}$

$$\text{EMA權 重}\;= \alpha \times \Big[1+(1-\alpha)+(1-\alpha)^2+(1-\alpha)^3+ \cdots +(1-\alpha)^N \Big]$$

$$\qquad\qquad\;=\Big[ 1 - (1 - \alpha)^{N+1} \Big]$$

假設MA和EMA有相同質心, MA質心= ${(1+N) \over 2}$ ,

EMA 質心= $\alpha \times \Big[1+2(1-\alpha)+3(1-\alpha)^2 + \cdots \Big]= {1 \over \alpha}$ ,

即 ${{(1+N)} \over 2} = {1 \over \alpha} , \quad \alpha= {2 \over{ (N+1)}}$

根據1697年 Johann Bernoulli: $\lim_{n \to \infty} {(1 + {x \over n})^n} = \mbox{e}^x$ , 則

$1 - (1 - \alpha)^{N+1} = 1- \left(1 - {2 \over (N+1)}\right)^{N+1} \approx 1 - \mbox{e}^{-2} \approx 86%$ ;

即當 $\alpha = {2 \over (N+1)}$時, 只計算前 N+1 項已涵蓋了 86% 完整權重;

若要計算函蓋 99.9% 的完整加權，計算前 k-1 項( k-1 天) 忽略第k項之後, 則約略漏算了$\;(1 - \alpha)^{k} = 0.1%=0.001$ , 則

$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-\alpha)$ = $- \alpha + {\alpha^2 \over 2} + \cdots$ 將趨近$- \alpha$ (泰勒展開)。

若只要函蓋 99% 的加權則 $k \approx {\log_{e}(0.01) \over {- \alpha} } \approx 2.30(N+1)$;

要包含 95% 的加權則 $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：

$$WMA_{M} = { n p_{M} +(n-1) p_{M-1} + \cdots + 2 p_{M-n+2} + p_{M-n+1} \over n +(n-1) + \cdots + 2 + 1}$$

<image>

由於$WMA_{M+1}$與$WMA_{M}$的分子相差$n p_{M+1} - p_{M} - \cdots - p_{M-n+1}$，假設$p_{M} + p_{M-1} + \cdots + p_{M-n+1}$為總和M：

總和M+1 $=$總和M $+ p_{M+1} - p_{M-n+1}$

分子M+1 $= N_{M+1} =$分子M $+ n p_{M+1} -$總和M

$$WMA_{M+1} = { N_{M+1} \over n +(n-1) + \cdots + 2 + 1}$$

留意分母為三角形數，方程式為$n(n+1)\over2$

右圖顯示出加權是隨日子遠離而遞減，直至遞減至零。

## 累積移動平均

在累積移動平均（CMA）中，數據以有序數據流的形式到達，使用者希望獲得直到當前數據點為止的所有數據的平均值。例如，投資者可能想要特定股票直到當前時間的所有股票交易的平均價格。隨著每筆新交易的發生，可以使用累計平均值（通常是直到當前時間的 n 個值序列 $x_1, \ldots, x_n$ 的均等加權平均值）計算該點之前所有交易的平均交易價格：

$$\text{CMA}_n = {{x_1 + \cdots + x_n} \over n}\,.$$

計算此問題的暴力方法是存儲所有數據，並計算總和，並在每次新數據點到來時除以數據點數。但其實，可以使用下面地公式，在拿到新值 $x_{n+1}$ 時，簡單地更新累計平均值：

$$\text{CMA}_{n+1} = {{x_{n+1} + n \cdot \text{CMA}_n} \over {n+1}}.$$

因此，新數據點的當前累積平均值等於先前的累積平均值乘以 n，再加上最新的數據點，所有這些均除以到目前為止已接收的點數 n+1。當所有數據點都到達（n = N）時，累積平均值將等於最終平均值。還可以存儲數據點的當前總和以及點的數目，並將總數除以數據點的數目，以便在每次有新的基準點到達時得到CMA。

累積平均公式的推導很直接。使用

$$x_1 + \cdots + x_n = n \cdot \text{CMA}_n$$

對於 n + 1，我們有

$$\begin{align} x_{n+1} & = (x_1 + \cdots + x_{n+1}) - (x_1 + \cdots + x_n) \\[6pt] \end{align}$$

求解 $\text{CMA}_{n+1}$ 就可以得到

$$\begin{align} \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{align}$$

## 其他加權

有時計算移動平均時會加入其他變數，例如，「交易量加權」會加入交易量的因素。

## 內部連結

- 技術分析
- K線
- 布林帶（BBands）
- 隨機指標（KD）
- 相對強弱指數（RSI）
- 指數平滑異同移動平均線（MACD）
- 乖離率（BIAS）