移動平均 (英語:moving average ,縮寫:MA ),又稱滾動平均值 、滑動平均 ,在統計學 中是一種通過創建整個數據集中不同子集的一系列平均數來分析數據點的計算方法。它也是有限脈衝響應濾波器的一種。變化包括: 簡單移動平均、指數移動平均、加權移動平均,以及累積移動平均(描述如下)。
兩條移動平均線的例子
給定一個數列和一個固定子集大小,移動平均數的第一個元素是由數列的初始固定子集的平均值得到的。然後通過「向前移位」修改子集,即排除序列的第一個數,並在子集中包含下一個值。
移動平均通常與時間序列 數據一起使用,以消除短期波動,突出長期趨勢或周期。短期和長期之間的閾值取決於應用,移動平均的參數將相應地設置。例如,它通常用於對財務數據進行技術分析 ,如股票價格 、收益率或交易量。它也用於經濟學 中研究國內生產總值、就業或其他宏觀經濟時間序列。數學上,移動平均是卷積 的一種類型,因此它可以被看作是用於信號處理 的低通濾波器 的一個例子。當與非時間序列數據一起使用時,移動平均濾波器的頻率分量更高,但與時間沒有任何特定的聯繫,儘管通常暗含某種排序。簡單地看,它可以看作是把數據變得更平滑。
台股加權指數技術線圖: 上圖為K線 和其簡單移動平均線(SMA,周期:5,10,20,60,120,240); 下圖為成交量和其均量(周期:5,20)。
在金融應用中,一個簡單移動平均 (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將消除這種波動(平均值總是包含一個完整的周期)。但是完全規律的循環是幾乎不會遇到的。[ 1]
對於許多應用來說,這有利於避免僅使用「過去」數據而引起的移位。因此,可以使用在計算平均值的系列中點的任一側等距分布的數據來計算中心移動平均 。[ 2] 這需要在樣本窗口中使用奇數個數據點。
SMA的主要缺點是,它使比窗口長度短的大量信號通過。更糟糕的是,它實際上將其反轉。這可能會導致意外的偽影,例如,平滑結果中的峰值出現在數據中出現波谷的位置。由於某些較高的頻率未正確消除,這也導致結果不如預期的平滑。
在技術分析中,不同的市場對常用天數(n值 )有不同的需求,例如:某些市場普遍的n值 為10日、40日、200日;有些則是5日、10日、20日、60日、120日、240日,視乎分析時期長短而定。投資者冀從移動平均線的圖表中分辨出支持位或阻力位。
比較:圖中同時呈現20日的三種移動平均線-SMA、EMA和WMA。
EMA,N=15
指數移動平均 (英語:exponential moving average ,EMA 或EWMA )是以指數式 遞減加權的移動平均。
各數值的加權影響力隨時間而指數式遞減,越近期的數據加權影響力越重,但較舊的數據也給予一定的加權值。右圖是一例子。
加權的程度以常數 α 決定,α 數值介乎 0 至 1。α 也可用天數N 來代表:
α
=
2
N
+
1
{\displaystyle \alpha ={2 \over {N+1}}}
,所以,N=19天,代表 α=0.1。
設時間 t 的實際數值為 Y t ,而時間t 的EMA則為S t ;時間 t-1 的EMA則為 S t-1 ,計算時間 t≥2 是方程式為:[ 3]
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%.
在累積移動平均 (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}}}
有時計算移動平均時會加入其他變數,例如,「交易量加權 」會加入交易量的因素。