2014年2月5日 星期三

[技術分析] 移動平均(MA)與指數移動平均(EMA)

簡單移動平均

        移動平均通常是指簡單移動平均 (Simple Moving Average; SMA),就是股票每天都有很多起起伏伏,真正的趨勢會被雜訊給掩蓋,所以我們把前幾天的股價一起拿出來平均,常用的有5日平均(MA5)20日平均(MA20)60日平均(MA60),如下圖所示。

簡單移動平均公式
$$ SMA = { p_1 + p_2 + p_3  +\cdots + p_{n-1} \over n } $$
$p_1$是今天的價格
$p_2$是昨天的價格,也就是前1天的價格。
$p_3$是前天的價格,也就是前2天的價格。依此類推。
$p_{n-1}$是前n天的價格。

指數移動平均

        指數移動平均(Exponentional Moving Average)一個比較特別的概念,就是考慮不同時期的的價格對現在的影響,是指數遞減的。就像是國中失戀、高中失戀、大學失戀對現在的你來說,越近的越痛。也就是之前的股價依照經過的天數,越靠近現在的權重越重,而每一天是以幾何級數或是稱指數關係遞減。他有一個很酷的遞迴表示法。

$$\text{EMA}_{\text{today}} = \text{EMA}_{\text{yesterday}} + \alpha \times(\text{price}_{\text{today}} - \text{EMA}_\text{yesterday})$$

當然乍看這條公式,根本看不出,這裡哪裡有指數關係呢?我們可以舉幾個例子。
$\text{EMA}_1 = \text{EMA}_2 + \alpha \times(\text{price}_1 - \text{EMA}_2)$
$=\alpha\times\text{price}_1 + (1-\alpha )\times\text{EMA}_2)$

$EMA_1$是今天的指數移動平均
$EMA_2$是昨天的指數移動平均,依此類推
$price_1=p_1$是今日的價格
$\alpha$是平滑係數,是小於1的參數。


$\text{EMA}_1$
$=\alpha\times\text{p}_1 + (1-\alpha )\times\text{EMA}_2)$
$=\alpha\times\text{p}_1 + (1-\alpha )\times[\alpha\times\text{p}_2 + (1-\alpha )\times\text{EMA}_3]$
$=\alpha\times[\text{p}_1 + (1-\alpha )\times\text{p}_2]-(1-\alpha)^2\times\text{EMA}_3$

有沒有找到甚麼規則呢?
那這個關係可以一直寫下去,最後就會變成這樣,
$\text{EMA}_1$
$=\alpha\times[\text{p}_1 + (1-\alpha )\times\text{p}_2+ \cdots + (1-\alpha )^{n-1}\times\text{p}_n]-(1-\alpha)^n\times\text{EMA}_{n+1}$
就會發現,每多一天,價格的權重就會多乘$(1-\alpha )$,成指數關係,公比是$(1-\alpha )$。
而因為平滑係數小於1,所以如果考慮很長的一段時間,最後一項也就是,一減平滑係數的n+1次方再乘指數移動平均價格($(1-\alpha)^n\times\text{EMA}_{n+1}$)幾乎可以忽略。所以我們今天的指數移動平均價格就變成是
$\text{EMA}_1=\alpha\times[\text{p}_1 + (1-\alpha )\times\text{p}_2+ \cdots + (1-\alpha )^{n-1}\times\text{p}_n]$
每一天我們都可以問之前的股價是多少,可以一直問,問的無窮無盡,但是我希望如果可以的話,我想知道大概需要往前推算幾天,就可以涵蓋86%的權數。86%這個數字也不是亂挑的,他是1-$e^{-2}$,所以要怎麼算呢?

假設加了N天可以有86%的權數,

$$\frac{\alpha \times \left(1+(1-\alpha)+(1-\alpha)^2+\cdots +(1-\alpha)^N \right)} {\alpha \times \left(1+(1-\alpha)+(1-\alpha)^2+\cdots +(1-\alpha)^\infty \right)}= 1-e^{-2}=0.86$$

左邊利用等比級數的公式化簡,可以發現簡化如下:
$$1-(1-\alpha)^{N+1}=1-e^{-2}$$,
這個時候, 在1697年 Johann Bernoulli寫出了一個有趣的公式可以解決這個問題,
$$\exp(x) = \lim_{n\to\infty}\left(1 + \frac{x}{n}\right)^{n}$$
有沒有很熟悉? 所以我們令
$$\alpha=\frac{2}{N+1}$$
,就會發現如果N不太小的時候,$1-(1-\alpha)^{N+1}$就會滿接近0.86的。
所以為了讓權數接近0.86,我們希望$\alpha=\frac{2}{N+1}$,
實際試看看N=12以及N=26,發現帶入$1-(1-\alpha)^{N+1}$分別等於0.886跟0.875,很接近我們的目標,所以很夠用了。那弄懂指數移動平均,很多線圖的由來你大概就懂了。

那你會說EMA很難算我不知要怎麼算,那我教你兩種方法,
法一
在yahoo股市的技術分析指標選MACD,指道你想要的那天股價,中間就會有一排寫EMA12、EMA26囉。






















法二

2 則留言:

匿名 提到...

你的公式第三段有錯誤,
EMA1
=α×p1+(1−α)×EMA2)
=α×p1+(1−α)×[α×p2+(1−α)×EMA3]
=α×[p1+(1−α)×p2]−(1−α)^2×EMA3

實際上是:
=α×[p1+(1−α)×p2]+(1−α)^2×EMA3


EMA1
=α×[p1+(1−α)×p2+⋯+(1−α)^(n−1)×pn]−(1−α)^n×EMA^(n+1)
事實上是
=α×[p1+(1−α)×p2+⋯+(1−α)^(n−1)×pn]+(1−α)^n×EMA^(n+1)

匿名 提到...

結果我自己也打錯了ww,反正是+號不是-號,希望你有get到