【實戰教學】EA程式從零寫起:MQL三步驟、風險管理與手動交易取捨

【實戰教學】EA程式從零寫起:MQL三步驟、風險管理與手動交易取捨

2026-10-28

作者:Dicky CCY|Ace Fortune 領財智庫 AI Trading Academy 講師、量化交易·盈利分裂教練

有學員在課堂上問我,第一次自己寫 ea程式,應該從哪一行開始動手。我通常不直接回答,而是反問他另一件事:你打算先寫進場條件,還是先寫止損。多數人的答案是先寫進場,因為進場聽起來比較像策略的靈魂。等寫到一半才發現,沒有風控的策略,根本沒有一份可以拿來回測的樣子。我這套次序不是什麼流派,它只是把會出錯的地方,提前搬到寫完之後無法改的階段。所以這篇文章按同一個次序走:先定義策略,再設風險管理,最後才測試。

我打算把從零寫一支 ea程式 的完整流程拆成六個部分,慢慢講清楚。先說市場,因為外匯這個市場的結構,決定了自動化到底有沒有存在的意義。再說工具,MQL4 跟 MQL5 差在哪裡,新手該從哪一個開始。中間三段是本文的核心,也就是定義策略、設置風控、測試與優化這三個步驟。最後我會把兩種典型用法拿出來講,再做一張 EA 與手動交易的對照表。這張表不是要選邊站,而是要你知道什麼情況下該用哪一種。

為什麼外匯市場特別適合自動化

先講市場,外匯是全世界最像一條自來水管網的市場,做過自動交易的人都有同感。全球外匯日均成交額早已超過六兆美元,交易時間一天接一段,幾乎沒有真正的休市。主要貨幣對的成交最集中,例如歐元美元、鎊元美元,價差通常壓到最低。交叉貨幣對則不同,例如歐元英鎊、歐元日圓,深度薄一點,滑價也高一點。一個好的自動化系統,本質上就是在這些細微差別裡替你把功課做完。所以我常說,先把市場結構看清楚,再談要不要寫程式。

四個交易時段的波動性並不相同

外匯一日分成四個主要時段,倫敦、紐約、東京、雪梨,每一段的性質都不一樣,就像同一條水管的不同管段,壓力並不相同。倫敦與紐約重疊的時段流動性最高,點差最窄,也是趨勢最容易走出來的一段。東京時段是亞洲盤,成交量較小,但因日圓的緣故,波動有時反而更急。雪梨時段緊接亞洲盤收尾,很多突破會在那裡補上最後一段。我見過不少學員把同一組參數套在四個時段,結果發現只有其中一段穩定。原因不是程式壞了,是波動性本來就不同,最佳參數自然不會一樣。

另一個原因是價格本身會被外部事件推動,央行政策、經濟數據、地緣政治消息,一夜之間可以改變一整個幣對的節奏。手動交易要靠人盯著這些時刻,人總會累、總會慢、總會在關鍵幾秒裡判斷失準。自動化在這裡的價值很單純:事件來了就照規則執行,不受狀態影響。我為什麼把自動化的第一個優點寫成排除情緒,而不是提高回報率:回報高低取決於策略本身,情緒排除才是結構上必然帶來的部分。

交易室牆上掛著四個不同時區的時鐘,桌上螢幕映著起伏的行情曲線,窗外天色剛亮。

MQL4 與 MQL5:工具先選對

要寫程式,先要決定用哪一套語言,這兩代 MQL 的差異不是版本號而已。MQL4 對應 MT4,語法結構比較直覺,適合第一次接觸自動化的學員。它內建常用的技術分析指標,做基本自動化策略剛好夠用。MQL5 對應 MT5,除了指標更齊全,最大分別是支援多線程,能做更複雜的策略開發。換句話說,你可以同時做回測、同時算參數、同時監察行情,效率是另一個級數。

我自己的做法是先用 MQL4 寫第一支,把邏輯與風控跑通,再搬去 MQL5。因為 MQL4 的心智負擔低,學員可以專心盯住策略本身,不會被編譯錯誤纏住。第一支程式能跑起來,比花俏重要得多。做外匯與技術指標這類基礎策略,我通常建議用 MQL4 起步。但若你的策略需要同時處理多個品種、需要網絡請求或自訂指標運算,MQL5 就是合理選擇。判斷標準很簡單:你的策略需不需要同時處理多件事,需要就選 MQL5。

第一步:把交易策略定義成可翻譯的規則

定義策略是第一步,也是最少人願意好好做的一步,我在課堂上問學員,你的進場條件是什麼,答案常常是均線金叉就買。問題是,金叉是什麼均線、什麼週期、什麼價格類型,全部都沒有寫下來。這種寫法翻譯不成程式,因為它是一個印象,不是一個條件。你這個『應該』是從哪裡來的?多數人答不上來,因為它來自某張圖表,而不是某條規則。你要交出去的,是一支 ea程式,而實作者只會照你寫下的條件寫。

出場條件往往比進場條件更難寫

一個合格的進場條件必須具體到三件事:用什麼指標、什麼參數、什麼方向才算訊號成立。例如短期均線上穿長期均線、相對強弱指標低於三十、收盤價站上區間上緣,三項同時成立才開倉。出場條件則要分兩種:達到目標自動平倉,以及反向時主動減虧或鎖利。這一組條件決定了你的程式在震盪市裡會不會被反覆磨損。如果出場邏輯只寫獲利後平倉,那它在震盪市裡會不斷被出場,又不斷進場。我見過學員在這裡卡住,回測跑出一串互相抵消的交易,才發現問題不在指標。所以進場與出場必須同一時間寫,缺一邊都會浪費你後面的測試時間。

寫完進場與出場之後,策略還缺一樣東西,就是它適不適合拿去跑全天候。很多策略在歐洲盤表現很好,換到亞洲盤就連續被掃。所以我在策略定義的最後,一定會加一段適用時段與適用品種。這些限制寫在策略裡,程式才知道什麼時候該拒絕開倉。順帶一提,如果你對不同策略類型的分工還沒概念,可以先看 EA 程式入門的整理想法 那一篇。先把分類搞懂,再回來定義自己的策略,會比直接抄別人的參數省很多時間。

第二步:把風險管理寫進程式裡

風控是第二步,也是順序最容易被搞錯的一步,我在課堂上見過學員先寫進場條件,寫得很完整,風控卻留到最後才加。他不是不重視風控,而是覺得策略還沒成形,現在談止損太早。這個想法很自然,結果就是回測跑完才發現,連虧的時候根本撐不住。問題在於,沒有風控設定的回測,測出來的只是一組訊號,不是策略。風控不是策略完成後的裝飾,它是策略的一部分。

止損的正確單位是單筆風險

止損點位本身不等於風險,正確的單位是這一筆最多虧掉總資金的幾百分比。設定方法很機械:先決定單筆風險比例,再由比例反推止損點位與手數。止盈也是同一套邏輯,設定獲利目標,達到就自動平倉,不留情緒。程式的好處在於這兩件事都不會被臨時改動,因為它已經寫死在規則裡。人在盤中會心軟,程式不會,這正是自動化最實際的一個價值。如果再加上追蹤止損與時間止損,風控這一層才算完整。

談到止損點位,還有一個常見誤區,就是把止損設在一個好看的整數。例如固定設在一百點,但你的訊號發生在不同的價格位置。同一個一百點,在低波動時可能是很合理的距離,在高波動時卻太緊。所以比較穩的做法,是讓止損跟著波動走,例如用真實波幅均值這類指標換算。這樣做等於每次都用同一把尺去量,而不是每一筆換一次尺子。這套規則要寫進 ea程式 的原始碼,也要寫進你的說明文件,之後才有辦法逐項核對。

第三步:回測與優化,以及最常被跳過的順序

第三步才是測試,分成回測與優化兩件事:回測是用歷史數據模擬策略在過去的表現,先確認它在不同市況下是否站得住。優化則是依回測結果調整參數,找出在哪一段設定下表現最好。這兩件事在流程上是有順序的,先回測確認邏輯有效,再優化微調數字。很多新手會跳過第一步,直接拿一堆參數去優化,優化出一條漂亮曲線。曲線漂亮,邏輯卻從來沒有被驗證過,那條曲線只是在描述過去。

風控沒寫就回測,等於在測一個沒有保護的策略

我在這個環節最常強調的一句話是:風控沒寫進去就回測,等於在測一個沒有保護的策略。沒有止損的策略在回測裡會怎樣?它會一路持有到行情回頭,然後顯示賺了大錢,而真實市場裡,你等不到那個回頭,因為槓桿已經先把本金消耗完。槓桿會把輕微的匯率變動放大,這一點在 投委會對槓桿式外匯的基本認識 裡有明確說明。回測的樣本再長,也長不過一個真實的極端行情,所以正確的順序是:策略定義完成,風控寫進程式,再把完整版本丟進回測器。

回測跑完之後,還有一件事很多人不做,就是檢視失效的條件。一套策略總有它不適用的市況,例如重大數據公布前後、假期流動性抽乾的時段。我在課堂上會要求學員把失效條件寫成一張清單,貼在螢幕旁邊。因為你不可能二十四小時都在看,所以要讓清單替你提醒。同一個道理,ea程式 的參數也不是一次調到位的,要靠這張清單反覆校正。另外,回測與實盤之間的落差是必然的,成本會吃掉一部分,關於 回測與實盤之間的隱形成本,我在另一篇拆解過。做這一步的目的不是打擊信心,是知道落差大概在哪個量級。

兩種典型用法:短線高頻與趨勢跟隨

策略定下來之後,常見的落地方式有兩種,先講清楚差在哪裡。第一種是短線或高頻,靠秒級或分鐘級的訊號完成多筆交易。它的優點是樣本多、回測容易跑出統計意義,缺點是對成本與網絡很敏感。每一筆手續費與滑價都要被重複支付很多次,稍微有偏差,淨利潤就被吃光。第二種是趨勢跟隨,順勢開倉,在趨勢結束之前平倉。它的優點是單筆利潤大、交易頻率低,缺點是等待的時間長,連續假訊號在所難免。

我自己的取法是看策略本身有沒有優勢,而不是看哪一種名稱比較好聽。一套在固定時間框、固定條件下有效的策略,本來就會在某種市況裡反覆出現。高頻策略要在幾秒內完成決策,對網絡延遲與虛擬主機的品質都敏感,門檻明顯更高。趨勢策略允許錯過,它假設的是自己的訊號會在某些段落成批出現。你如果連續三個月都要盯盤,趨勢型比高頻型更貼近你承受的節奏,這一點沒有公式可以算,只能靠你回顧那三個月坐在電腦前的時間。

EA 與手動交易:把取捨攤在桌上

很多學員最後會問,那到底該用程式,還是自己做?我把兩者的差別列成下面這張表,因為它是我用來跟學員核對現況的工具,而表格的重點不在誰比較好,而在每一列的取捨方向是否相反。看完整張表你就會發現,程式贏在時間與情緒,人手贏在判斷的彈性。兩者其實不是二選一,比較實際的做法是把程式當成外掛的一部分。能不能用,關鍵在於你怎麼把這兩段接起來,而不是硬要挑一個。

比較維度 EA 程式交易 手動交易
運作時間 全天 24 小時 受盯盤限制
情緒影響 依規則,不追單 受疲勞影響
決策依據 參數與數據 直覺與盤面
執行成本 成本被放大 頻率低,成本小
環境要求 網絡與主機 一台電腦
適應能力 需定期更新 可即時改

表格之後我要補三句話,因為只看表格容易得出過度簡化的結論。第一,程式不是不用管,它只是把管的方式從盯著價格,變成定期檢查。第二,人手也不是完全不靠數據,只是把數據用在判斷上,而不是用在執行上。第三,兩者的成本結構不同,所以適合的策略類型也不同。第四,人類的反應再快,也快不過機器在同一秒內做完的判斷,高頻這一欄程式是先天佔優。我自己在課堂上最常強調的是,若你的資金與時間只夠做好一件事,就把它做好。程式適合規則清楚、可以重複執行的策略,人手適合需要即時判斷的環境。我講這張表時也會提醒學員,ea程式 與手動互相補位,不是互相取代。

交易員坐在電腦前看著行情,旁邊一台運算裝置同步運作,桌上攤著手寫規則筆記。

三條不能省的風險管理規則

講完工具與流程,我把風險管理收成三條規則,這三條是我給學員的最低標準。第一條,單筆風險要控制在總資金百分之一到百分之二之間。第二條,程式自動運行不代表不用管,要定期檢查策略是否出現異常,我整理過的 上實盤前的常見陷阱 可以照著對一次。第三條,市場條件會變,適用於一段時期的策略可能會失效,所以要持續調整。這三條有一個共同點,它們都把風險變成事前規則,而不是事後補救:虧損發生才去想怎麼辦,能選的選項已經很少。

第一條聽起來保守,但差別有多大,我們用一個可以自己驗算的假設來看。假設帳戶總額是十萬美元,每筆交易的最大虧損固定為百分之一或百分之二。先看百分之一那一組:每一筆結束後,帳戶剩下原來的 0.99,0.99 × 0.99 = 0.9801,這就是第二筆之後的餘額,繼續連乘十次,0.99 的十次方等於 0.9043。1 減 0.9043 等於 0.0957,也就是帳戶下跌 9.6%,這是單筆風險 1% 連虧十筆的累計回撤。再看百分之二那一組:每一筆剩下 0.98,0.98 的十次方等於 0.8171,帳戶下跌 18.3%。把兩條相減,18.3 減 9.6 等於 8.7 個百分點,接近一倍。

這還只是同一個假設下的比較,實際市場裡連虧十筆不算罕見,尤其在趨勢反轉時。第二條與第三條也有可以換算的東西:人工每天盯四小時,四除以 24 等於 0.167,也就是 17% 的覆蓋率。而程式連續運行是 24 除以 24,等於 1,覆蓋率是 100%,而 100 除以 17 等於 5.9,取整約 6 倍,這就是覆蓋率上的差距。所以風險設定差 8.7 個百分點,覆蓋率差約 6 倍,兩者都必須在策略階段就寫死。這兩件事如果留到實盤才討論,你等於在最貴的時候做決定。

順帶一提,這裡談的都是風險管理的做法,不是投資建議。若你打算用槓桿部位做外匯,產品機制與風險一定要向持牌人士查證。根據 SFC 的懷疑投資產品警示名單,不少以自動交易作招徠的平台,曾被列入需要公眾警惕的類別。任何要求你交出帳戶權限、又或者保證固定收益的說法,都應該直接跳過。根據 CFTC 對降低外匯交易風險的建議,事前把風險規則寫下來,是保護本金最基本的一步。

動手之前,先回答這三個問題

走到這裡,如果你要從今天開始寫,我建議先不要打開編輯器。這三個問題的順序,跟前面三個步驟是對應的,先用三分鐘寫在紙上,寫不出答案,就代表策略還沒成形。

  • 我的進場條件是什麼,用哪個指標、哪個參數、什麼方向?
  • 我的出場條件是什麼,止損、止盈、追蹤止損分別怎麼算?
  • 我的單筆風險是總資金的百分之幾,風控有沒有真的寫進程式裡?

我的答案很直接:先寫策略,再寫程式,風控要在回測之前。這條路我不建議照先寫程式再想風控的順序走。你省下的只是前面幾小時,賠上的是整段回測時間與真實本金。什麼情況下我會改口?如果你的策略已經寫死在現成的框架裡,風控也有人做過並且可以查證,那順序可以往前挪。除此之外,我建議按這個次序走。

立即 WhatsApp 聯繫小風團隊免費諮詢:+852 5378 5383 網站:https://aitrading.ace-fortune.com/EA

常見問題

投資涉及風險,過往表現不代表未來回報。本內容僅供教育參考,不構成任何投資建議。

分享到:
null

Ace Fortune 2018年成立於香港,早期研究方向包括面向 PI(個人專業投資者)的大數據智能指標及選股器,以及運用量化模型研究交易策略。
今天,我們將這份系統思維,延伸至 AI 工具與程式交易教育,讓新手學習運用 AI Agent 輔助整理資料、編撰程式與檢查邏輯。
從理解工具到動手實作,讓科技更容易入門,支持個人增值與成長。Let Intelligence Empower Your Growth. 

null
© 2026 Weber All Right Reserved