你在 MT5 裡不用寫程式做出一支 MACD EA(智能交易)的方式,是放一個 Start 節點、兩個 MACD 區塊——一個讀主線、一個讀訊號線——一個接在它們之間的 Cross 條件,以及一個下單區塊。伺服器會替你產生並編譯 MQL5,然後把一個真的 .ex5 交到你手上。十五分鐘,不碰語法。
接著就是決定這個檔案到底值不值錢的那一段。這個做法有量測過的紀錄,而它最好看的那個數字,正是你最不該相信的那一個。
你會做出什麼
一支跑在單一貨幣對上的單部位 EA:MACD 線向上穿過訊號線時買進,向下穿過時賣出,配一組固定的止損與目標,編譯成一個真的 .ex5。八個區塊。
那個數字裡有兩個區塊的存在只有一個理由:MACD 指標區塊一次只回傳一條線。
開始之前:MACD 回報什麼,以及你正在讀的是哪一條線
你需要一個附帶已驗證電子郵件的免費帳號(設計是免費的,也不需要登入;編譯成 .ex5 才需要)、大約十五分鐘,以及一個 MetaTrader 5 終端機。
MACD 是把一條慢速移動平均從一條快速移動平均裡減掉,然後把那個差值再平均一次。所以主線量的是兩條均線已經拉開了多遠,而訊號線就是那個量測值被平滑之後的樣子。一條 MACD 規則能講的每一句話,都是關於兩條均線之間距離的陳述——這表示它是一個穿著擺盪指標外衣的趨勢工具,而且它把組成它的那兩條均線的落後全部繼承了下來。
EA Builder 的 MACD 區塊開放這些設定:
| 區塊設定 | 預設值 | 它控制什麼 |
|---|---|---|
fast_ema | 12 | 比較快的那條均線。範圍 1–999 |
slow_ema | 26 | 比較慢的那條。兩條之間的差距就是這個訊號的全部 |
signal_period | 9 | 在你拿去比較之前,那個差值被平滑了多少 |
line | MODE_MAIN | 這個區塊輸出哪一條線——MODE_MAIN 或 MODE_SIGNAL |
applied_price | PRICE_CLOSE | 哪一個價格餵進計算 |
shift | 0 | 0 是正在形成的那根 K 棒;1 是最後一根已收的 |
timeframe | 當前圖表 | M1 到 MN1 都可以,和圖表本身分開讀 |
line 是會改變你整個流程形狀的那一列。它是一個只有兩個值的選單,所以一個區塊只給你一條線。因此訊號線交叉需要兩個 MACD 區塊;零軸交叉只需要一個,再加上一個和常數的比較。
逐步操作:在 EA Builder 裡做出這支 MACD EA
- 打開 EA Builder,然後從範本庫載入
macd_signal範本,或者從一張空白畫布開始自己接。 - 從 Utility 面板放一個 Start 節點。少了它,驗證會以
EAB-E202中止建置。 - 加上一個 MACD 區塊,
line留在MODE_MAIN。第一次做的時候先別動 12/26/9,這樣你的結果才和下面那組基準可比。 - 加上第二個 MACD 區塊,週期設成一模一樣,然後把
line設成MODE_SIGNAL。同一個指標、同一組設定、不同的輸出——這就是大家會跳過的那一步,而跳過它正是為什麼他們的流程在拿一條線和它自己比較。 - 把兩個都接進一個 Cross 條件。Cross 收兩個輸入,問的是其中一個有沒有在這根 K 棒上穿過另一個;它的
cross_type是crossover或crossunder,所以買方和賣方是兩個各自獨立的條件,不是一個反過來用。 - 把每個條件各自接到自己的 Open Buy / Open Sell 區塊。把指標直接接到下單區塊會被以
EAB-E205擋下來——一個原始的數值並不是一個決定。 - 在 Settings 分頁裡設定風險。共用的預設值是 50 pip 的止損、100 pip 的目標,以及固定
0.01的手數;一個沒有有效止損的流程會在它願意建置之前,先觸發一個CRITICAL的預檢診斷。 - 按 Measure,然後對照面板自己印出來的那條標準去讀結果:獲利因子至少 1.2、至少 60 筆交易、回撤不差過 20%。
- 按 Compile .ex5,透過 File > Open Data Folder 把檔案移進
MQL5/Experts,重新整理導覽器,然後在它碰到任何帳戶之前,先在策略測試器裡測過。
- Start 節點
- MACD 區塊,line = MODE_MAIN
- MACD 區塊,line = MODE_SIGNAL
- Cross——買方用 crossover,賣方用 crossunder
- Open Buy 與 Open Sell
- 止損與止盈
- 編譯成 .ex5
如果你想要的是零軸那個版本,就把第二個 MACD 區塊刪掉,並且把 Cross 換成 Compare,它的運算子是 > < >= <= == !=,而它的 offset 預設是 0。「MACD 主線在零軸之上」這句話講的是快速均線根本上已經在慢速均線之上了——那是一件比兩條線碰在一起罕見得多、也晚得多的事。面板裡也附了 OsMA,它直接把主線減訊號線的差值輸出成一個值,所以一條柱狀圖規則只要一個區塊,而不是兩個。
MACD 的進場、出場與參數設定
| 設定 | 範本值 | 動它會發生什麼 |
|---|---|---|
fast_ema | 12 | 調低反應更早、交叉次數也多得多;交易筆數會比勝率先動 |
slow_ema | 26 | 調高會拉寬快線必須走完的那段距離,所以訊號來得更晚、更少 |
signal_period | 9 | 比較用的那條線上的平滑量。越短交叉越多,而其中大部分是雜訊 |
line | MODE_MAIN | 這不是一個調參的旋鈕——它決定你做出來的是哪一條規則 |
shift | 0 | 設成 1 就只在已收的 K 棒上做決定 |
| 止損 | 50 pips(共用預設) | 被搜尋過的範圍是 30–80 |
| 止盈 | 100 pips(共用預設) | 被搜尋過的範圍是 60–250 |
關於落後,也就是對這個指標最誠實的那個抱怨。這裡的每一個值,都是兩條均線疊在第三條上算出來的輸出。所以一次交叉是一份「某一段走勢已經發生了」的回報——問題只在於晚多久。把 fast_ema 縮短是拿假交叉去換提早;把 slow_ema 拉長是拿走勢結束後才進場去換可靠度。這個範本自己的紀錄透露了它落在哪裡:一年 698 筆交易,是在一模一樣的條件下量測的十三個趨勢與動能範本裡第二高的筆數。那是一個一直在觸發的設計,而一直觸發,正是短落後付出的代價。
那次搜尋動了什麼、又沒動什麼。那次留下紀錄的參數搜尋只動了停損與目標——SL30-80 × TP60-250,在 H1 上橫跨三段區間的 12 組組合。它從來沒有改過 fast_ema、slow_ema 或 signal_period。所以這一頁上沒有任何東西支持「12/26/9 是對的、是錯的、或者可以改進」這種說法。它支持的是一個窄得多、也有用得多的說法:沒有任何一組停損與目標的組合救得回這個設計。
回測這支 MACD EA
這是 EA Builder 自己量出來的紀錄,不是重跑一次,而且比較表裡的每一個範本,都共用下面那張條件表。我們如何測試說明了這些紀錄必須達到的標準。
macd_signal 基準 | 數值 |
|---|---|
| 獲利因子 | 0.93 |
| 交易筆數 | 698 |
| 最大回撤 | -1.05% |
| 淨利 | -93.93 |
| 在鄰近設計中依獲利因子的排名 | 13 個中第 8 |
| 在鄰近設計中依交易筆數的排名 | 13 個中第 2 |
| 通過 Measure 面板自己的合格標準 | 否 |
| 測試條件 | |
|---|---|
| 實驗編號 | EXP-MACD-RECIPE-BASELINE-001 |
| 母實驗編號 | EXP-BUILDER-TEMPLATE-BASELINE-001 |
| 商品 / 時間週期 | USDJPYm M5 |
| 期間 | 2025-06-01 – 2026-06-09 |
| 模型 | M1 OHLC (Model=1) |
| 初始資金 | 10,000 |
| 環境 | Exness MT5 |
| 基準測量日 | 2026-06-18 |
| 最後驗證 | 2026-08-25 |
那個搜尋結果值得的不只一行。範本庫裡有八個範本帶著留下紀錄的參數搜尋,而八個全部以 no_robust_edge 收場。但它們失敗的方式有兩種,而那個差別比它們共同的判決更重要。其中兩個從頭到尾沒有產生過任何一組會賺的設定,連在搜尋被配適的那段期間裡都沒有。macd_signal 是唯一一個產生出樣本外越過 1.0 的設定的範本——在最寬的那個目標上是 1.14 到 1.15——然後在它前面那一段區間上拿到 0.74 到 0.77。manifest 自己用來形容這件事的字是市場狀態依賴。
讀一下這對測試意味著什麼。如果你把資料切一次、在前半段配適、然後在後半段檢查,這個範本會遞給你一個及格的結果。真正抓到它的,是去檢查一段搜尋從來沒看過的第三段區間。那就是前推分析在一個具體案例裡的論據,而它比任何關於過度配適的一般性警告都值錢。
MACD 在它的鄰居之間站在哪裡,全部在上面那一組條件下量測:
| 範本 | 區塊數 | 獲利因子 | 回撤 | 交易筆數 |
|---|---|---|---|---|
ma_perfect_order_trend | 10 | 1.07 | -0.36% | 305 |
mtf_osc_filter | 27 | 1.04 | -0.64% | 187 |
consecutive_bars_momentum | 7 | 1.03 | -0.36% | 377 |
ao_ama_trend | 14 | 0.97 | -0.95% | 239 |
adx_trend | 12 | 0.96 | -0.76% | 534 |
multi_tf_trend | 15 | 0.96 | -0.51% | 247 |
ma_crossover | 9 | 0.95 | -0.84% | 420 |
macd_signal | 8 | 0.93 | -1.05% | 698 |
ma_slope_trend | 7 | 0.92 | -1.00% | 478 |
mtf_adx_filter | 14 | 0.92 | -0.84% | 343 |
elder_ray | 9 | 0.90 | -1.34% | 529 |
pitch_trail_trend | 9 | 0.77 | -1.61% | 467 |
dynamic_sl_trend | 9 | 0.68 | -1.62% | 708 |
把這十三個從它們自己的交易筆數中位數 420 切開,兩半會乾淨地分開。交易比較少的那六個,平均獲利因子是 1.00、283 筆交易、回撤 -0.61%。交易比較多的那六個,平均是 0.86、569 筆交易、回撤 -1.23%——成績更差,而深度是兩倍。三個越過 1.0 的設計全部坐在比較安靜的那一半。MACD 坐在比較忙的那一半。
那是對十三個設計在同一套設定下的描述,不是一條定律:進場邏輯、節點數與出場方式也都不一樣,所以「觸發頻率是原因」這件事並沒有被確立。但那就是擺在你面前的模式,而內建的 MACD 範本站在它不利的那一邊。
常見錯誤
相信一次樣本外的通過。這正是這個範本存在來示範的那個錯誤。一段被留下來的區間就是一個樣本,而一條動能規則之所以能贏下一個樣本,可能只是因為市場在那段期間裡走了趨勢。在你相信一個數字之前,先測一段搜尋從來沒看過的第三段區間。
拿一條線和它自己比較。如果兩個 MACD 區塊都留在 MODE_MAIN,那個 Cross 條件比的是一模一樣的值,於是永遠不會觸發——或者只在進位誤差上觸發。在你納悶交易筆數為什麼是零之前,先檢查兩個區塊上的 line 設定。
把一次交叉讀成一個預測。MACD 是一條平均的兩條平均。一次交叉回報的是某一波走勢已經進行了好幾根 K 棒。你要做的設計選擇是接受多少遲到,而不是要不要接受任何遲到。
一直調停損與目標,直到資金曲線看起來順眼為止。那次留下紀錄的搜尋已經系統性地做過那件事了——12 組組合、三段區間——然後回報 no_robust_edge。如果你手動調出來的結果打敗了一次系統性搜尋,請先懷疑那個調參。
把動能濾網疊起來。上面那個組合就是這種直覺被量出來的版本:3.76 倍的回撤,換到一個還稍微差一點的獲利因子。
讓它和另一支 EA 並排跑卻沒有把它們分開。同一個帳戶上的每一支 EA 都需要自己的魔術號碼,否則其中一支 EA 的出場會去平掉另一支的部位。
接下來的步驟與變化
什麼時候不該用 MACD。在盤整區間裡,兩條均線會反覆交叉,而每一次交叉都是雜訊——而一個觸發很快的預設值,正好是盤整區間最會懲罰的東西。如果你講不出一個能在橫盤期間把這條規則關掉的條件,那就要嘛加一個,要嘛換一個不依賴那兩條均線分開的想法。
值得試的變化,依證據強弱排序。先試零軸那個版本:它少一個區塊、觸發頻率也低得多,而這一帶所有越過 1.0 的結果全部坐在比較安靜的那一半。接著在 MACD 區塊裡把同一條規則放到更高的 timeframe 上試,那會在不動圖表的情況下讓訊號變慢。只有在那之後才去動週期——而且一次只改一個。
然後好好測它。Measure 面板是 K 棒層級的、而且是近似的;它是一道濾網,不是一份判決。MT5 回測怎麼做把一次真實執行從頭走到尾,包括報告上那兩個回撤數字該相信哪一個。RSI EA 怎麼做是失效方式正好相反的姊妹篇——它的搜尋從來沒贏過任何東西,這讓它更容易拒絕,也因此不如這一篇有啟發性。不用寫程式做出 MT5 EA涵蓋了更廣的區塊語彙,而回測指南則深入這一頁所主張的那個前推步驟。
而如果你想校準一份有紀錄的成績長什麼樣子,已發布的 EA每一則都附上完整的平倉交易清單與一份執行 manifest。在你相信任何策略——包括你自己做出來的那一支——之前,先拿其中一則去對照上面那張表。