MT5 策略測試器:模式、設定與該信任報表到什麼程度
MT5 策略測試器會把 EA 放到券商下載的歷史報價上重跑,報表的可信度取決於四件事:模擬模式、歷史資料品質、點差與成本設定,以及你正在看的這次執行,是不是事後從最佳化結果中挑出來的。單次執行可以照字面解讀;最佳化的最佳格則要看它在前瞻期的表現和相鄰的參數組合。
作者 Soren Huang · 發佈 · 更新於 · 編輯原則
目錄
MT5 策略測試器如何運作?報表能信到什麼程度?
MT5 策略測試器會把 EA 放到券商下載的歷史報價上重跑,逐根 K 棒或逐筆跳動點執行。它的報表可不可信,取決於你能控制的四件事:模擬模式、歷史資料的品質、點差與成本設定,以及你正在看的這次執行,是不是事後從最佳化結果裡挑出來的。
策略測試器是 MetaTrader 5 內的一個視窗,用過去的價格執行交易程式,並記下它會送出的每一筆委託。EA(專家顧問)就是這個交易程式:一組用 MQL5 寫成的規則,決定何時買進、賣出與平倉。整體來看,測試器就是一條重播管線,其背後的概念與任何對期貨規則做的舊價格回測相同:餵入歷史、套用規則、記錄成交、加總結果。
可以把這條管線想成有四個接頭的水管。歷史資料從券商的伺服器進來。模擬模式決定價格流有多細。EA 依你設定的點差與延遲做決策並成交。日誌與報表則收集發生過的一切。信任會從每個接頭漏掉,而最讓交易人付出代價的是最後一個:把一千次執行的最佳化裡那一次最好的結果,當成你做過的唯一測試來看。下面的內容都會回到這個漏洞。
MT5 的「每一跳」與「真實跳動點」有什麼差別?
「每一跳」會在每根 1 分鐘 K 棒內,依其開、高、低、收生成人工跳動點;「真實跳動點」則在券商確實有記錄的地方,重播當時實際記錄下來的跳動點。因此真實跳動點比較接近實際發生的情況,但涵蓋的期間較短,執行也較慢。模擬模式就是測試器把儲存的 K 棒轉成 EA 在兩根 K 棒收盤之間所看到的價格流時,所用的規則。
設定面板中第二個模式的完整名稱是「基於真實跳動點的每一跳」。若券商在日期範圍的某段沒有記錄跳動點,測試器就會對那一段改用生成的跳動點,這也是下一節的歷史資料品質數字為何重要的原因。另外兩個較快的模式,1 分鐘 OHLC 與僅開盤價,讓 EA 每分鐘拿到四個價格,或每根圖表 K 棒拿到一個價格。它們適合那種每根 K 棒只判斷一次、且不會在 K 棒內部觸發停損或掛單的規則。
| 模式 | 價格來源 | 每根 1 分鐘 K 棒的價格數 | 速度 | 適合的規則 |
|---|---|---|---|---|
| Real ticks | 券商記錄的跳動點 | 全部記錄值 | 最慢 | K 棒內的停損與掛單 |
| Every tick | 由每根 1 分鐘 K 棒生成的跳動點 | 生成數個 | 慢 | 多數規則 |
| 1 minute OHLC | 每分鐘四個價格 | 4 | 快 | 收盤判斷的規則 |
| Open prices only | 每根圖表 K 棒一個價格 | 每根圖表 K 棒 1 個 | 最快 | 僅限開盤判斷的規則 |
實用的選法是:先用僅開盤價跑一次 EA,幾分鐘內就能抓出邏輯錯誤;然後用每一跳或真實跳動點跑出你要保留的結果。如果兩種慢速模式的結果差很多,代表這支 EA 的表現取決於停損是在 K 棒內的哪個位置被碰到,這在你實單交易前就值得知道。
如何在 MT5 策略測試器中設定測試?
測試要依固定順序設定,歷史資料最先,這樣後面每個欄位指的才是確實存在的資料。從「檢視」選單開啟策略測試器(Strategy Tester),然後由上而下填寫「設定」分頁:
- 下載商品的歷史資料。 開啟該商品的圖表並往回捲動,或讓測試器在啟動時自動下載。在「Journal」分頁確認下載已完成。
- 選擇專家顧問。 已編譯的 EA 會出現在清單中;有編譯錯誤的則不會。
- 選擇商品與週期。 週期是 EA 讀取的圖表週期,不是模擬的步長。
- 把日期範圍設在有資料的期間內。 起始日早於第一根下載的 K 棒,會從第一天起就降低歷史資料品質。
- 選擇模擬模式,依上表選擇。
- 設定本金、槓桿與點差。 使用你交易的帳戶幣別、券商提供的槓桿,以及一個固定點差,數值至少要和一般實單報價一樣寬。
- 加入執行延遲與前瞻期。 固定或隨機的延遲,代表委託送到伺服器所需的時間。前瞻期則是保留範圍的最後一段,作為最佳化器看不到的檢查。
- 開著「Journal」分頁按下開始。 錯誤會在發生當下顯示在那裡,而不是等跑完才出現。
按下開始前,有兩項設定值得再看一次。測試器會收取券商商品規格定義的手續費;如果規格沒有列出,報表就會顯示沒有手續費,成本就得由 EA 自己承擔。另外,點差若設得很窄,會讓一個剝頭皮規則看起來比實際執行便宜得多。這兩點都屬於第一張圖中的「零點差」漏洞。
MT5 測試器的歷史資料品質為何低?要怎麼修正?
當日期範圍包含沒有資料的期間、只有生成跳動點覆蓋的期間,或起始日早於券商的跳動點歷史時,歷史資料品質就會下降;修正方法是下載完整的歷史資料、把起始日往後移,或改用保存較長跳動點資料的伺服器。歷史資料品質是指測試期間中,測試器能用真實跳動點或完整 1 分鐘 K 棒重播的比例,會以百分比顯示在報表中。
把這個數字當成地圖來看,而不是成績。數字低並不代表 EA 有問題,而是代表報表的一部分描述的是測試器自己生成的價格。多數券商保存的跳動點期間比 1 分鐘 K 棒短,所以在真實跳動點模式下跑一段很長的日期範圍,常常一部分是真實、一部分是生成的,而品質數字告訴你這個比例。
假設範例
假設某券商的商品在 2020 年中以前沒有資料,2020 年中到 2021 年底有 1 分鐘 K 棒,2022 年起有記錄的跳動點。一個真實跳動點測試,若設定為 2019 年 1 月至 2025 年 6 月,會重播約一年半的空白、約一年半的生成跳動點,以及約三年半的真實跳動點,而品質數字反映的就是這個比例。把起始日移到 2022 年 1 月,整段測試就全部是真實跳動點,品質數字隨之提高,代價是測試期間變短。
當你更需要較長的日期範圍,而不是真實跳動點時,可以保留較早的起始日,改用每一跳模式執行,並在筆記中寫明早期年份是模擬的。一個同時在模擬年份與真實跳動點年份都站得住腳的結果,比只在其中一種年份表現好的結果更有說服力。
為什麼 MT5 策略測試器不開任何交易,或拒絕啟動?
無法啟動的測試通常是沒有歷史資料、編譯錯誤,或沒有可用的測試代理;而能跑但沒有任何交易的測試,通常是手數低於商品最小值、本金不足以支付保證金、某個輸入值永遠不會觸發規則,或商品的合約規格與 EA 預期不符。日誌與「Experts」分頁在每一種情況下都會指出原因,所以在改動任何設定前先讀它們。
| 你看到的 | 無法啟動 | 能跑,但零筆交易 |
|---|---|---|
| 日誌一行 | 該期間沒有歷史資料、編譯錯誤、沒有可用的代理 | 「Invalid volume」、「Not enough money」,或根本沒有委託紀錄 |
| 原因 | 資料未下載、EA 未編譯、本機代理被停用 | 手數低於商品最小值或步長、本金低於保證金、規則從未成立、商品規格不符 |
| 修正 | 下載歷史資料或移動日期;修正 EA;在「Agents」分頁啟用本機代理 | 把手數提高到最小值;提高本金;檢查輸入值;打開商品規格,比對合約大小與小數位數和 EA 的預期 |
「規則從未觸發」的情況最不容易察覺,因為不會有任何錯誤被回報。以 K 棒數設定、且長度超過測試期間的移動平均,或以錯誤小數位數輸入的價格門檻,或在券商伺服器時間下永遠不成立的時段過濾,都會產生一次乾淨、零交易的執行。先用視覺化模式在短區間跑一次 EA,看進場條件在圖表上是否真的曾經成立。
最佳化還是單次執行:要怎麼讀 MT5 或 MT4 報表?
單次執行會產生一份報表,其淨損益、獲利因子、交易筆數、最大回撤與歷史資料品質都可以照字面解讀;而最佳化則會產生數百或數千次執行,格子中最好的那一格會因為被挑選而被美化,因此必須依前瞻期與相鄰參數來判斷,而不能只看它本身的數字。最佳化就是一批單次執行,每一組你允許的輸入值組合各跑一次,並依你選擇的準則排序。
以下是單一保留候選策略所產生的報表,來自我們自己的執行,而非來自 MT5 測試器。AlphaPrime(Valynox)用一個以標準指標建立的替代規則進行測試:VWAP 規則是唯一的進場與出場條件,沒有停損、停利或過濾器,回測標的為 ES 日 K,期間 2019-01-02 至 2025-06-30,做多與做空,一口,每筆收取 $20 手續費與 $25 滑價。搜尋嘗試了 1,024 組參數,並依報酬相對回撤保留了這一組。這條規則只是替代品,不是本文的主題,數字描述的也只是這一次重播,而非預測。
來源:AlphaPrime 產品引擎(CPU),2026-10-31 執行。ES 日線,2019-01-02 至 2025-06-30,多空都做,1 口,每筆手續費 $20、滑價 $25。
| 項目 | 結果 |
|---|---|
| 淨利(已平倉) | $109,660 |
| 最大回撤 | $56,977.5 |
| 交易筆數 | 67 |
| 勝率 | 65.67% |
| 獲利因子 | 1.769 |
| 平均每筆 | $1,636.72 |
| 在場時間 | 91.62% |

只當成單次執行來看,這張表說明發生了什麼:67 筆交易、獲利因子 1.769、最大回撤 $56,977.5,對上淨損益 $109,660。若當成它實際的身分來看,也就是 1,024 次嘗試中最好的那一個,那麼上面每一個數字都會高於合理的估計,因為事後挑出贏家,挑到的既有真實規律,也有運氣。Bailey、Borwein、López de Prado 與 Zhu(2014)指出,搜尋嘗試的組合越多,這份挑選紅利就越大;他們後來的論文(2017)則把它換算成所選執行是過度最佳化的機率。六年半的期間內只有 67 筆交易,樣本也很小,幾筆交易就足以左右平均值;而權益曲線模擬器指南:一條回測曲線隱藏了什麼說明了,同樣的交易以不同順序出現時,回撤可以差多少。
MT5 最佳化器會在「最佳化結果」分頁中把同樣的陷阱擺在你面前,MT4 策略測試器則以它的三種模式與報表(Modelling quality、Total net profit、Profit factor、Expected payoff、Maximal drawdown、Total trades)造成同樣的問題。解法是在執行前先寫好一套讀法規則:
- 設定前瞻期(1/4 或 1/3 的範圍),讓每次執行也會在最佳化器沒看過的資料上產生一個結果。判斷保留的格子時,看「前瞻結果」分頁,而不是主分頁。
- 看相鄰的八格。 如果保留的設定很好、而鄰近的格子都很差,那結果就是雜訊造成的尖峰。Pardo(2008)詳細描述了這種參數鄰域檢查。
- 數交易筆數。 交易很少的格子可能只靠兩個運氣好的部位就贏得整個格網。
- 把保留的格子當成單次執行重跑,使用最慢的模擬模式,並採用設定步驟第六與第七步中你設定的點差與延遲,然後讀那份報表,而不是讀格網裡的那一格。
AlphaPrime 的用事先設定的門檻進行策略檢驗,會讓搜尋保留下來的每個候選策略都要通過你在執行前寫好的門檻,包括推進分析在內,所以你看到的候選策略,已經通過了一項早在其數字產生前就寫好的測試。
MT5 策略測試器如何處理期貨資料?
對期貨而言,測試器一次只處理一個券商商品,並採用該券商定義的合約大小、保證金與交易時段,因此每一張到期的合約只帶有很短的歷史,系統不會替你接好連續序列,轉倉跳空與交易時段中斷也得由你自己處理。連續序列是指把每一張到期合約在選定的換月日接到下一張而形成的一條價格歷史,而多年回測需要的正是它。
許多券商把每一張到期合約都列成獨立的商品:三月合約、六月合約等等,每張在停止交易前只有幾個月的價格。在其中一張上跑 EA,測試會在該合約到期時結束;換到下一張上跑,價格水準會跳動,因為兩張合約從來不是以相同價格成交的。同樣這種單一商品的設計,也是選擇權回測比期貨困難的原因之一:每個履約價與到期日都是獨立的一段短歷史。從換月日到跳動點價值,長期期貨測試需要的完整清單,請見期貨回測做對的方法:規格、轉倉與成本。
對使用測試器的期貨交易人而言,有三件事需要注意:
- 先檢查商品規格。 合約大小、最小跳動單位、保證金與交易時段都是券商填入的內容,它們決定每點的損益,以及「Not enough money」檢查所用的保證金。交易所可能會更動合約價值;請把規格和交易所的合約頁面比對。
- 自己建立或匯入連續序列。 MT5 可以保存由你匯入 K 棒所建立的自訂商品,這是做多年拼接序列的途徑,任何想用自有資料回測台股與 ETF的人也能用同一條路。
- 把交易時段中斷與換月日當成規則的一部分。 在跳空後的開盤才碰到的停損,與在交易時段內碰到的停損並不相同,EA 必須知道它碰到的是哪一種。
針對期貨的回測,若使用自己的 K 棒資料,搭配連續序列、交易時段,以及整段歷史只設定一次的手續費和滑價,就是跨越多年與多個合約測試規則的做法。規則之後仍可以進入終端機:AlphaPrime 可以將策略原始碼匯出到 MetaTrader 5(MQL5)與 MetaTrader 4(MQL4),這些平台列於平台匯出頁面,因此你實單運行的版本,就是你測試過的版本。
你的下一步:在 MT5 中打開你交易的期貨合約的商品規格,記下它的合約大小、最小跳動單位與保證金,並與交易所的合約頁面比對。然後開著「Journal」,用僅開盤價模式,把你的 EA 在過去三個月上跑一次,先讀日誌說了什麼,再讀報表。
常見問題
MT4 策略測試器和 MT5 策略測試器一樣嗎?
它們做的是同一件事,只是 MT4 的選項較少。MT4 測試器提供三種模擬方法(Every tick、Control points、Open prices only),每次執行只測一個商品,也沒有真實跳動點模式或前瞻期。判讀原則相同:單次執行可以照字面解讀,而最佳化的最佳結果,必須在它未曾見過的資料與相鄰的設定上再檢查。
要怎麼解讀 MT4 回測報表?
先看 Modelling quality,它告訴你整段測試中有多少比例使用了完整的 1 分鐘資料。接著一起看 Total trades、Profit factor、Expected payoff(每筆交易的平均結果)與 Maximal drawdown。只靠少數幾筆交易得到的高淨利,或回撤接近本金的結果,都不是可用的結果。把 Expected payoff 和你實單支付的點差與手續費比較;如果它只比一買一賣(來回)的成本稍大一點,執行上的小變化就會把它抹掉。
MT5 測試器日誌中的「Not enough money」是什麼意思?
「設定」分頁中設定的本金,小於商品規格對 EA 所送出手數要求的保證金。提高本金、降低手數,或確認槓桿欄位與你的帳戶相符。如果這個訊息只在部分委託出現,代表 EA 正在加碼,而先前的部位已經用掉大部分保證金。
我能在 MT5 策略測試器中回測期貨嗎?
可以,使用券商列出的期貨商品,每個商品都採用該券商定義的合約大小、保證金與交易時段。由於多數券商分別列出每一張到期合約,單一商品只有幾個月的歷史,因此多年測試需要你自己建立或匯入一條連續序列,作為自訂商品。之後,轉倉跳空與交易時段中斷就成了你規則的一部分,測試器不會替你處理。
MT5 最佳化中的前瞻期是什麼?
前瞻期是日期範圍的最後一段,最佳化器在排序參數時不會使用它。每組設定先在較早的一段上最佳化,然後在前瞻段上原封不動地執行,兩組結果會顯示在不同的分頁中。若一組設定在主結果中排名很好、在前瞻結果中很差,代表它是針對較早的資料擬合出來的。
References
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the American Mathematical Society, 61(5), 458–471.
- Bailey, D. H., Borwein, J., López de Prado, M., & Zhu, Q. J. (2017). The Probability of Backtest Overfitting. Journal of Computational Finance, 20(4), 39–69.
- Pardo, R. (2008). The Evaluation and Optimization of Trading Strategies (2nd ed.). John Wiley & Sons.

