EMA 的計算不是把最近十二筆價格直接平均,而是用當期價格更新前期 EMA。要在 Excel 算出能核對的 EMA12/26,關鍵有三件事:價格欄位一致、起始值寫清楚、計算過程保留精度。以下用完全假設的短序列示範公式,再說明如何與長歷史圖表比較,避免把一張教學小表當成成熟的市場數據。
權重公式:每一列都依賴上一列
常見 EMA 更新式是「當期 EMA=前期 EMA+α×(當期價格−前期 EMA)」,其中 α=2÷(N+1)。十二期的 α 為 2/13,二十六期為 2/27。StockCharts 的平均線文件說明這種權重與初始簡單平均的做法;Fidelity 的公式也使用前期 EMA 逐次更新。
同一公式也可寫成「α×當期價格+(1−α)×前期 EMA」。兩種形式相等,不需要在工作表同時放兩套主計算;可選一列用另一寫法作獨立驗算。十二期對新資料給較高權重,並不代表只保留最近十二根棒,之前的資料會透過前期結果逐步衰減。
以下全部以收市價作輸入,期數按觀察棒計,不插入沒有交易的日子。如果把開市價、調整後收市價與未調整價格混放,同樣的公式仍然能算出數字,卻失去了可比性。算得出來不等於資料定義正確。
先準備一份乾淨、由舊到新排序的價格表
假設六筆價格依序是三十、三十一、三十二、三十、三十三、三十四,標為 T0 至 T5,不對應真實股票或日曆日期。為了看清遞迴,這張小表採首價初始化:T0 的兩條 EMA 都設為三十。它不是宣稱六筆資料足以完成十二或二十六期暖機。
在真正資料中,日期和證券身份應跟價格一起保存。先檢查日期重複、排序顛倒、空白或文字價格,以及拆股前後是否使用同一口徑。不要遇到空白就填零;零是一個真實數值,會把平均大幅拉低,可能製造不存在的訊號。
若某天沒有交易,按資料定義保留缺少交易棒的事實。若本來應有行情卻未取得,先補正資料來源或標明不可計算,不能悄悄用上一日價格代替,再與另一平台的完整資料比較。
把首價初始化和 SMA 初始化分清楚
| 觀察點 | 假設收市價 | EMA12:首價起步 | EMA26:首價起步 |
|---|---|---|---|
| T0 | 30.00 | 30.000000 | 30.000000 |
| T1 | 31.00 | 30.153846 | 30.074074 |
| T2 | 32.00 | 30.437870 | 30.216735 |
| T3 | 30.00 | 30.370505 | 30.200681 |
| T4 | 33.00 | 30.775043 | 30.408038 |
| T5 | 34.00 | 31.271190 | 30.674109 |
另一種做法是用最初十二筆的 SMA 作為 EMA12 首值,EMA26 則用最初二十六筆的 SMA 起步。這時兩條線可使用的起始列不同,在兩者都存在以前,不應硬算完整 DIF。沒有足夠前置資料的欄位保持空白,比強行補零更誠實。
首價法便於教學,SMA 法是常見初始化方法,但無論用哪一種,都要把起點寫下來。用相同後續價格遞迴,初值差距通常會逐步縮小;若完全不說初值,只比較前幾行的末位數字,很容易把合理差異當成程式錯誤。
Excel 公式可以怎樣排
將 A 欄放觀察點,B 欄放收市價,C 欄放 EMA12,D 欄放 EMA26。第 二列是 T0,C2 與 D2 都等於 B2;從第三列開始,C3 輸入 =C2+(B3-C2)*2/13,D3 輸入 =D2+(B3-D2)*2/27,再向下填滿。這裡採首價法,只為對照上方示例。
計算保持原始精度,畫面可顯示六位小數,但不要每列都用 ROUND 截短後再遞迴。逐列四捨五入會讓誤差帶到下一行,長序列的差異可能因此累積。若需要顯示金額兩位小數,改儲存格格式即可,別把底層數值改成文字。
試算其中一筆:T1 的 EMA12 是 30+(31−30)×2/13,約為 30.153846;EMA26 約為 30.074074。下一列必須引用這些前期結果,不是又從三十重新開始。把上一列引用寫錯,往往比公式本身更難察覺。
實作:從教學表走到可核對的美股資料
- 先輸入六筆假設價格,完成兩條 EMA,核對上方小表。不要把這六筆標成 SPY 或任何真實股票。
- 另外取得合法可用的美股日線資料,記錄代碼、來源、下載日、價格調整及時區;將更早資料作前置計算。
- 事先選定初始化方法與可接受誤差,再比較同一天、相同口徑的平台 EMA12 與 EMA26。
- 把資料長度增加後重算,觀察比較日期的誤差是否縮小;不要只盯著最前面的暖機區間。
- 保留一份原始價格、一份公式及一份差異紀錄,讓每一筆結果能回到輸入數據。
你需要的完成品,是可追蹤輸入與公式的計算表,而不是只有兩條看起來很順的線。若仍無法對上,分別檢查數據、時間週期、價格欄位與初值;每次只改一項,才知道差異的來源。
反例:初值不同,不是立刻有一方算錯
假設兩個 EMA12 的起始值相差一元,之後每筆輸入完全相同。經過一次更新,差距變成 11/13 元;經過十次,差距為 (11/13) 的十次方,約零點一八八元。誤差會減弱,卻不會在第十二筆突然自動消失。這是遞迴式可直接推得的性質。
因此,拿只有短歷史的自算表對照平台長歷史值,末位不同是可以預期的。先確認差距是否符合初始化與資料長度的影響,再討論是否需要更多前置資料。也不宜宣稱某個固定暖機筆數能滿足所有價位、序列與精度需求。
EMA 計算正確,只代表平均值按所選方法更新。它沒有直接產生保證有效的買點,也不會解決資料授權、成交假設或風險管理;把公式驗證與交易評估分開,研究才不會跨越證據所能支持的範圍。
還有一項容易漏掉的人工檢查:輸入價格雖然看起來都是數字,實際上可能含貨幣符號、空格或千位分隔,已被試算表當成文字。先核對資料型別,再看公式是否被自動略過。若一段價格被反向排序,遞迴計算甚至會把後來的價格帶回較早日期;把時間軸畫出來,通常比只看最後一個結果更容易找出這種錯誤。
每次更換資料檔,也保留下載日期與檔案版本。歷史資料可能因調整或更正而改動,明確的來源版本能幫你分辨是公式改了,還是輸入已不同。
常見問題
EMA12 公式是甚麼?
常見做法為當期 EMA12=當期價格×2/13+前期 EMA12×11/13。第一筆 EMA 的來源仍需另外指定,不能只靠更新式得到。
Excel 為甚麼算出不同 EMA?
常見原因包括起始值、可用歷史長度、調整價格、排序、缺值及逐列四捨五入。先比資料與設定,再判斷公式是否錯誤。
EMA26 比 EMA12 慢嗎?
在相同輸入與方法下,二十六期對單筆新價格的權重較低,通常更平滑。這描述反應特性,不代表交易一定更好或更差。
參考來源:StockCharts:簡單與指數移動平均線、Fidelity:EMA 定義與遞迴計算。文中假設數據只供驗算,不代表實際行情或績效。
如需整體讀圖架構,可參考MACD 指標完整教學;其他工具的用途與限制,見技術指標教學。
本文供投資研究與學習,不構成個別投資建議。指標可能延遲或失效,投資可能損失本金。