DIF 由兩條價格 EMA 相減,DEA 再對 DIF 作平滑。算 MACD 訊號線時,最容易出錯的不是相減,而是把 DEA 算成股價均線、忘記初始化,或只看當期大小就稱出現交叉。以下用固定假設 DIF 序列,從每一列公式到交叉條件逐項驗算,不把示例冒充市場訊號。

先完成價格 EMA,再求 DIF
常見 EMA 12/26/9 設定下,DIF=EMA12−EMA26。兩條 EMA 必須取自同一標的、同一根 K 棒、相同價格口徑及時間週期。若十二期用調整後收市價、二十六期用未調整價格,結果雖然有數字,卻不是你要研究的均線差值。TradingView 的計算定義可作公式核對。
例如獨立單點中,EMA12=86.40、EMA26=86.70,DIF=−0.30。它表示較短的平滑價格低於較長的平滑價格,不能推出當天跌了零點三元,更不等於負零點三個百分點。差值的單位跟價格有關,不是投資報酬率。
若其中一條 EMA 還未初始化,DIF 也應暫缺。不要用零代替尚不存在的二十六期平均,否則第一個差值會被誇大,後續 DEA 也會受污染。先驗證價格層,再延伸到差值層,錯誤比較容易追查。
DEA 的輸入是 DIF 序列,不是九筆股價
九期 EMA 的更新權重是 2÷(9+1)=0.2,因此當期 DEA=前期 DEA+0.2×(當期 DIF−前期 DEA)。這個公式並沒有直接引用當期股價。它平滑的是已算好的主線。Fidelity 的 MACD 計算說明亦以主線的九期 EMA 作訊號線。
為了獨立驗算這一層,下面直接給定假設 DIF 輸入:零、零點二、零點一、負零點零五、零點一五、零點三。T0 的 DEA 設為零,之後逐列更新。這不是聲稱某檔股票的價格 EMA 曾產生這組主線;它是一份專門測試訊號平滑的數學輸入。
T1 的 DEA=0+0.2×0.2=0.04。T2 的 DEA=0.04+0.2×(0.10−0.04)=0.052。雖然 T2 的 DIF 比前期下降,DEA 仍上升,因為當期 DIF 仍高於前期 DEA。這個細節能幫助理解兩線為何不會永遠同步轉向。
用完整表格判斷上穿與下穿
| 觀察點 | 假設 DIF | DEA:零初始化 | 單倍柱體 |
|---|---|---|---|
| T0 | 0.00000 | 0.00000 | 0.00000 |
| T1 | 0.20000 | 0.04000 | 0.16000 |
| T2 | 0.10000 | 0.05200 | 0.04800 |
| T3 | -0.05000 | 0.03160 | -0.08160 |
| T4 | 0.15000 | 0.05528 | 0.09472 |
| T5 | 0.30000 | 0.10422 | 0.19578 |
若定義金叉為「前期 DIF 小於或等於 DEA,當期 DIF 大於 DEA」,便要看兩列,不能只看到 DIF 高於 DEA 就計一次。連續五根都在上方,是持續處於上方,不是五次新金叉。死叉可用相反條件:前期大於或等於、當期小於。
採用等號是本文事前選定的事件規則。其他研究可以另外處理連續相等的情況,但同一份資料內必須一致。上表 T0 恰好相等,T1 是由相等到上方;T3 下穿,T4 再上穿。記清楚定義,別在統計結果不滿意時臨時改算法。
Excel 欄位與誤差排查
若 C、D 欄分別是 EMA12、EMA26,E 欄為 DIF,則 E3 可寫 =C3-D3。假設 F 欄放 DEA,T0 所在第二列採 F2=E2 初始化,第三列用 =F2+(E3-F2)*2/10,向下填滿。G3=E3-F3 便是單倍柱體;若平台採兩倍,另設一欄 =2*G3,不要改掉基準欄。
若要用前九筆 DIF 的 SMA 初始化 DEA,就先累積足夠的有效 DIF,早期行保持缺值,然後才開始遞迴。這與首筆 DIF 起步的方法不同,不能只比最初幾列就判定其中一種錯誤。價格 EMA 的初始化與訊號 EMA 的初始化,都要各自記錄。
計算保留完整精度,只在顯示層調小數位。畫面同時顯示零點零零,不表示兩線原始值完全相等。若在交叉附近差一根,先查原始精度、資料時間與價格來源,而不是直接改參數直到箭頭對上。
實作:留下公式、數值與事件三種證據
- 先在試算表輸入本文的六筆假設 DIF,完成 DEA 與柱體,逐列對照表格。
- 加入上一期相對位置欄與當期相對位置欄,明確標示「首次上穿」「首次下穿」「維持原側」。
- 另用同一份美股收市價算兩條 EMA,再接上本篇公式;記錄標的、來源、日期、調整方式及計算起點。
- 選定暖機後的同一日期,與平台主線、訊號線和柱體核對;無法取得資料時保持空白。
- 保存公式版本、未四捨五入數值及交叉定義,讓別人能獨立重算。
完成品應讓每個交叉都能回到兩期的實際數字。只保留折線圖,通常無法解釋是四捨五入、缺值還是真正跨越。若圖和表有衝突,先處理資料與計算,別用主觀畫線取代公式判定。
反例:算出交叉,不等於找到可賺錢的規則
上表 T1 的 DIF 已高於 DEA,但兩根之後 T3 就下穿。這是輸入序列本身的假設反覆,足以提醒訊號可能短暫,不能被稱為經過美股驗證的交易例子。即使你把這些點連成漂亮曲線,也沒有增加市場證據。
訊號線計算正確、事件定義一致,只是研究的基本門檻。要談交易結果,還要有當時可取得的價格、下單與成交時點、持有期間、成本及退出規則。當根收市才確定的交叉,不應在模擬裡免費取得收市前已知的有利成交。
如果需要和別人比較,先確認雙方說的 DIF、DIFF 或 Diff 指甚麼。thinkorswim 的圖例中,Diff 是柱體,不是本文主線。名稱相近不代表同一欄,公式與輸入來源才是最後的核對依據。
連續幾期恰好相等的情況,值得單獨留一欄。例如主線先在下方,接著兩根等於訊號線,再到上方。若你選擇把首次嚴格轉正的那根算作事件,就不能又在兩根相等時各加一次訊號。這不是要尋找唯一正確的計數習慣,而是確保每一個樣本都按同一條事前規則處理。
另可增加一個人工驗算欄,使用「主線減訊號線」與你記錄的柱體相減。單倍版本的結果應接近零;若不接近,先檢查是否混用兩倍柱。注意浮點運算可能出現很小的機器誤差,驗證容許值與交易事件的門檻要分開,不能為了讓表格顯示通過,任意把真正的微小正負差距刪掉。
最後,用缺值標記保護資料邊界。當上一期不存在時,沒有足夠資訊判定跨越;當本期尚未收市時,也不能用預覽數值冒充收市確認。這些狀態都應在表上清楚看見。
常見問題
DIF 為負代表甚麼?
表示快速價格 EMA 低於慢速價格 EMA,不代表當日一定下跌,也不保證之後的價格方向。請先分清主線與柱體。
DEA 是 MACD 的九日均線嗎?
本文採 DIF 的九期 EMA,期數依 K 棒決定;日線與週線的時間尺度不同。它不是股價的九日均線。
訊號線與快線交叉如何計算?
要比較本期與前期 DIF 相對 DEA 的位置,並事前定義相等如何處理。只看當期在上方,不足以確認當期剛發生上穿。
參考來源:TradingView:MACD 計算與設定、Fidelity:MACD 與盤整假訊號、Schwab thinkorswim:MACD 參數及圖例。文中假設數據只供驗算,不代表實際行情或績效。
如需整體讀圖架構,可參考MACD 指標完整教學;其他工具的用途與限制,見技術指標教學。
本文供投資研究與學習,不構成個別投資建議。指標可能延遲或失效,投資可能損失本金。