EA 開發與 Builder beginner 12 分鐘閱讀

MT5 MACD EA 不用寫程式怎麼做(以及為什麼它最好看的那個成績反而最危險)

MACD EA 不用寫一行程式也做得出來:在瀏覽器裡把區塊接成一支 MACD 交叉策略,編譯成真的 .ex5,然後誠實地把它的數字讀完。這裡也放上最該讓你不安的那個結果——EA Builder 自己的參數搜尋,找到了一組 MACD 設定在樣本外拿到 1.14,而同一組設定在它前面那一段區間上只剩 0.74。

發佈於 · 審閱於

你在 MT5 裡不用寫程式做出一支 MACD EA(智能交易)的方式,是放一個 Start 節點、兩個 MACD 區塊——一個讀主線、一個讀訊號線——一個接在它們之間的 Cross 條件,以及一個下單區塊。伺服器會替你產生並編譯 MQL5,然後把一個真的 .ex5 交到你手上。十五分鐘,不碰語法。

接著就是決定這個檔案到底值不值錢的那一段。這個做法有量測過的紀錄,而它最好看的那個數字,正是你最不該相信的那一個。

你會做出什麼

一支跑在單一貨幣對上的單部位 EA:MACD 線向上穿過訊號線時買進,向下穿過時賣出,配一組固定的止損與目標,編譯成一個真的 .ex5。八個區塊。

那個數字裡有兩個區塊的存在只有一個理由:MACD 指標區塊一次只回傳一條線。

開始之前:MACD 回報什麼,以及你正在讀的是哪一條線

你需要一個附帶已驗證電子郵件的免費帳號(設計是免費的,也不需要登入;編譯成 .ex5 才需要)、大約十五分鐘,以及一個 MetaTrader 5 終端機。

MACD 是把一條慢速移動平均從一條快速移動平均裡減掉,然後把那個差值再平均一次。所以線量的是兩條均線已經拉開了多遠,而訊號線就是那個量測值被平滑之後的樣子。一條 MACD 規則能講的每一句話,都是關於兩條均線之間距離的陳述——這表示它是一個穿著擺盪指標外衣的趨勢工具,而且它把組成它的那兩條均線的落後全部繼承了下來。

EA Builder 的 MACD 區塊開放這些設定:

區塊設定預設值它控制什麼
fast_ema12比較快的那條均線。範圍 1–999
slow_ema26比較慢的那條。兩條之間的差距就是這個訊號的全部
signal_period9在你拿去比較之前,那個差值被平滑了多少
lineMODE_MAIN這個區塊輸出哪一條線——MODE_MAINMODE_SIGNAL
applied_pricePRICE_CLOSE哪一個價格餵進計算
shift00 是正在形成的那根 K 棒;1 是最後一根已收的
timeframe當前圖表M1 到 MN1 都可以,和圖表本身分開讀

line 是會改變你整個流程形狀的那一列。它是一個只有兩個值的選單,所以一個區塊只給你一條線。因此訊號線交叉需要兩個 MACD 區塊;零軸交叉只需要一個,再加上一個和常數的比較。

逐步操作:在 EA Builder 裡做出這支 MACD EA

  1. 打開 EA Builder,然後從範本庫載入 macd_signal 範本,或者從一張空白畫布開始自己接。
  2. Utility 面板放一個 Start 節點。少了它,驗證會以 EAB-E202 中止建置。
  3. 加上一個 MACD 區塊,line 留在 MODE_MAIN。第一次做的時候先別動 12/26/9,這樣你的結果才和下面那組基準可比。
  4. 加上第二個 MACD 區塊,週期設成一模一樣,然後把 line 設成 MODE_SIGNAL。同一個指標、同一組設定、不同的輸出——這就是大家會跳過的那一步,而跳過它正是為什麼他們的流程在拿一條線和它自己比較。
  5. 把兩個都接進一個 Cross 條件。Cross 收兩個輸入,問的是其中一個有沒有在這根 K 棒上穿過另一個;它的 cross_typecrossovercrossunder,所以買方和賣方是兩個各自獨立的條件,不是一個反過來用。
  6. 把每個條件各自接到自己的 Open Buy / Open Sell 區塊。把指標直接接到下單區塊會被以 EAB-E205 擋下來——一個原始的數值並不是一個決定。
  7. Settings 分頁裡設定風險。共用的預設值是 50 pip 的止損、100 pip 的目標,以及固定 0.01 的手數;一個沒有有效止損的流程會在它願意建置之前,先觸發一個 CRITICAL 的預檢診斷。
  8. Measure,然後對照面板自己印出來的那條標準去讀結果:獲利因子至少 1.2、至少 60 筆交易、回撤不差過 20%。
  9. 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 區塊,而零軸版本不用

如果你想要的是零軸那個版本,就把第二個 MACD 區塊刪掉,並且把 Cross 換成 Compare,它的運算子是 > < >= <= == !=,而它的 offset 預設是 0。「MACD 主線在零軸之上」這句話講的是快速均線根本上已經在慢速均線之上了——那是一件比兩條線碰在一起罕見得多、也晚得多的事。面板裡也附了 OsMA,它直接把主線減訊號線的差值輸出成一個值,所以一條柱狀圖規則只要一個區塊,而不是兩個。

MACD 的進場、出場與參數設定

設定範本值動它會發生什麼
fast_ema12調低反應更早、交叉次數也多得多;交易筆數會比勝率先動
slow_ema26調高會拉寬快線必須走完的那段距離,所以訊號來得更晚、更少
signal_period9比較用的那條線上的平滑量。越短交叉越多,而其中大部分是雜訊
lineMODE_MAIN這不是一個調參的旋鈕——它決定你做出來的是哪一條規則
shift0設成 1 就只在已收的 K 棒上做決定
止損50 pips(共用預設)被搜尋過的範圍是 30–80
止盈100 pips(共用預設)被搜尋過的範圍是 60–250

關於落後,也就是對這個指標最誠實的那個抱怨。這裡的每一個值,都是兩條均線疊在第三條上算出來的輸出。所以一次交叉是一份「某一段走勢已經發生了」的回報——問題只在於晚多久。把 fast_ema 縮短是拿假交叉去換提早;把 slow_ema 拉長是拿走勢結束後才進場去換可靠度。這個範本自己的紀錄透露了它落在哪裡:一年 698 筆交易,是在一模一樣的條件下量測的十三個趨勢與動能範本裡第二高的筆數。那是一個一直在觸發的設計,而一直觸發,正是短落後付出的代價。

那次搜尋動了什麼、又沒動什麼。那次留下紀錄的參數搜尋只動了停損與目標——SL30-80 × TP60-250,在 H1 上橫跨三段區間的 12 組組合。它從來沒有改過 fast_emaslow_emasignal_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
1.14那次留下紀錄的搜尋找到的最佳樣本外獲利因子
0.74同一組設定在它前面那一段區間上拿到的分數
13 個中第 8MACD 範本在同樣條件下量測的趨勢與動能設計裡排在哪裡

那個搜尋結果值得的不只一行。範本庫裡有八個範本帶著留下紀錄的參數搜尋,而八個全部以 no_robust_edge 收場。但它們失敗的方式有兩種,而那個差別比它們共同的判決更重要。其中兩個從頭到尾沒有產生過任何一組會賺的設定,連在搜尋被配適的那段期間裡都沒有。macd_signal 是唯一一個產生出樣本外越過 1.0 的設定的範本——在最寬的那個目標上是 1.14 到 1.15——然後在它前面那一段區間上拿到 0.74 到 0.77。manifest 自己用來形容這件事的字是市場狀態依賴

讀一下這對測試意味著什麼。如果你把資料切一次、在前半段配適、然後在後半段檢查,這個範本會遞給你一個及格的結果。真正抓到它的,是去檢查一段搜尋從來沒看過的第三段區間。那就是前推分析在一個具體案例裡的論據,而它比任何關於過度配適的一般性警告都值錢。

MACD 在它的鄰居之間站在哪裡,全部在上面那一組條件下量測:

範本區塊數獲利因子回撤交易筆數
ma_perfect_order_trend101.07-0.36%305
mtf_osc_filter271.04-0.64%187
consecutive_bars_momentum71.03-0.36%377
ao_ama_trend140.97-0.95%239
adx_trend120.96-0.76%534
multi_tf_trend150.96-0.51%247
ma_crossover90.95-0.84%420
macd_signal80.93-1.05%698
ma_slope_trend70.92-1.00%478
mtf_adx_filter140.92-0.84%343
elder_ray90.90-1.34%529
pitch_trail_trend90.77-1.61%467
dynamic_sl_trend90.68-1.62%708

把這十三個從它們自己的交易筆數中位數 420 切開,兩半會乾淨地分開。交易比較少的那六個,平均獲利因子是 1.00283 筆交易、回撤 -0.61%。交易比較多的那六個,平均是 0.86569 筆交易、回撤 -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。在你相信任何策略——包括你自己做出來的那一支——之前,先拿其中一則去對照上面那張表。

常見問題

MACD 的訊號線交叉和零軸交叉差在哪裡?
它們問的是不一樣的問題,而在 EA Builder 裡也是不一樣的接法。訊號線交叉問的是 MACD 線有沒有穿過它自己那條 9 週期的平均線,所以它需要兩個 MACD 區塊——一個設成 MODE_MAIN、一個設成 MODE_SIGNAL——一起餵進一個 Cross 條件。零軸交叉問的則是動能到底有沒有換邊,所以它只需要一個設成 MODE_MAIN 的 MACD 區塊,加上一個和 0 的 Compare。訊號線那個版本觸發得頻繁得多、也早得多;零軸那個版本很少觸發,而且很晚。內建範本用的是訊號線那個形式,而它是它整個鄰近範圍裡第二忙的設計。
EA 的 MACD 參數應該設多少?
這一頁沒有辦法告訴你,而這件事值得講得直白一點。EA Builder 的 MACD 區塊預設是 12/26/9、取收盤價,而這個範本留下紀錄的那次參數搜尋只動了停損與目標——SL30-80 對上 TP60-250,橫跨三段區間的 12 組組合。它從頭到尾一次都沒有改過 fast_ema、slow_ema 或 signal_period。任何文章報給你一組「最好的」週期,報的都是一個偏好,不是一個量測值。那次搜尋真正確立的事情是:沒有任何一組停損與目標的組合,能讓這個設計變得穩健。
MACD 交叉策略真的會賺嗎?
以它出廠的樣子來說,不會。在美元/日圓 5 分鐘圖上量測一年,EA Builder 的 macd_signal 範本在 698 筆交易上收在 0.93 的獲利因子——在同一組一模一樣的條件下量測的十三個趨勢與動能範本裡,它是第二忙的設計,而依成績排是 13 個中第 8。更有用的是,它留下紀錄的那次搜尋確實找到了一組設定,在樣本外達到 1.14 到 1.15,而那組設定接著在更早的那一段區間上掉到 0.74 到 0.77。那就是誠實的答案:看起來會賺的結果確實存在,而它們沒有撐過不同的市場狀態。
我應該加更多指標來替 MACD EA 做濾網嗎?
在假設它有幫助之前,先看看那個組合實際上做了什麼。範本庫裡附了一個正好包含這個範本的組合——macd_signal 加上一條 CCI 水準規則再加上 Elder Ray——而在一模一樣的條件下,它收在 0.91 的獲利因子,對上 MACD 單獨的 0.93,回撤是 3.76 倍,橫跨 2,016 筆交易。這三個部分全都是對同一段價格所做的動能讀數,所以它們傾向於彼此同意、一起觸發,而不是分散風險。一個濾網之所以有用,是因為它有時候會不同意你的進場;同一個想法的三個版本做不到這件事。