VALYNOXSTRATEGY RESEARCH TECHNOLOGY
AlphaPrimeAlphaPrime
策略學院 / 回測與檢驗

MT5 策略測試器:模式、設定與該信任報表到什麼程度

MT5 策略測試器會把 EA 放到券商下載的歷史報價上重跑,報表的可信度取決於四件事:模擬模式、歷史資料品質、點差與成本設定,以及你正在看的這次執行,是不是事後從最佳化結果中挑出來的。單次執行可以照字面解讀;最佳化的最佳格則要看它在前瞻期的表現和相鄰的參數組合。

作者 · 發佈 · 更新於 · 編輯原則

目錄
  1. MT5 策略測試器如何運作?報表能信到什麼程度?
  2. MT5 的「每一跳」與「真實跳動點」有什麼差別?
  3. 如何在 MT5 策略測試器中設定測試?
  4. MT5 測試器的歷史資料品質為何低?要怎麼修正?
  5. 為什麼 MT5 策略測試器不開任何交易,或拒絕啟動?
  6. 最佳化還是單次執行:要怎麼讀 MT5 或 MT4 報表?
  7. MT5 策略測試器如何處理期貨資料?
  8. 常見問題
  9. References

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 個最快僅限開盤判斷的規則
MT5 回測四種建模模式依序為:真實跳動點偵測細節最多、速度最慢;每跳動點次之;1 分鐘 OHLC 再次之;僅開盤價細節最少、速度最快 細節越多,速度越慢 四種模式,依固定順序排列 細節 速度 真實跳動點 每跳動點 1 分鐘 OHLC 僅開盤價 最慢 較慢 較快 最快 細節越多,運行越慢。 因此:用所需的最慢模式即可。
四種模擬模式以固定順序用精確度換取速度。選你的規則所需的最慢模式,而不是能最快跑完的那一個。

實用的選法是:先用僅開盤價跑一次 EA,幾分鐘內就能抓出邏輯錯誤;然後用每一跳或真實跳動點跑出你要保留的結果。如果兩種慢速模式的結果差很多,代表這支 EA 的表現取決於停損是在 K 棒內的哪個位置被碰到,這在你實單交易前就值得知道。

如何在 MT5 策略測試器中設定測試?

測試要依固定順序設定,歷史資料最先,這樣後面每個欄位指的才是確實存在的資料。從「檢視」選單開啟策略測試器(Strategy Tester),然後由上而下填寫「設定」分頁:

  1. 下載商品的歷史資料。 開啟該商品的圖表並往回捲動,或讓測試器在啟動時自動下載。在「Journal」分頁確認下載已完成。
  2. 選擇專家顧問。 已編譯的 EA 會出現在清單中;有編譯錯誤的則不會。
  3. 選擇商品與週期。 週期是 EA 讀取的圖表週期,不是模擬的步長。
  4. 把日期範圍設在有資料的期間內。 起始日早於第一根下載的 K 棒,會從第一天起就降低歷史資料品質。
  5. 選擇模擬模式,依上表選擇。
  6. 設定本金、槓桿與點差。 使用你交易的帳戶幣別、券商提供的槓桿,以及一個固定點差,數值至少要和一般實單報價一樣寬。
  7. 加入執行延遲與前瞻期。 固定或隨機的延遲,代表委託送到伺服器所需的時間。前瞻期則是保留範圍的最後一段,作為最佳化器看不到的檢查。
  8. 開著「Journal」分頁按下開始。 錯誤會在發生當下顯示在那裡,而不是等跑完才出現。
MT5 策略測試器的八個設定步驟依序為:歷史資料、選擇 EA、商品、日期、模式、點差與成本、前推期間與延遲,最後開始;歷史資料需先設定,因為後續每個欄位都依賴它 依此順序設定 每個欄位都需要前一個欄位 1 2 3 4 5 6 7 8 歷史資料 選 EA 商品 日期 模式 點差 前推 開始 每個欄位都依賴歷史資料。 所以:先確認下載完成。
依能避免多數失敗執行的順序排列的設定欄位。歷史資料排第一,因為後面每個欄位都依賴它。

按下開始前,有兩項設定值得再看一次。測試器會收取券商商品規格定義的手續費;如果規格沒有列出,報表就會顯示沒有手續費,成本就得由 EA 自己承擔。另外,點差若設得很窄,會讓一個剝頭皮規則看起來比實際執行便宜得多。這兩點都屬於第一張圖中的「零點差」漏洞。

MT5 測試器的歷史資料品質為何低?要怎麼修正?

當日期範圍包含沒有資料的期間、只有生成跳動點覆蓋的期間,或起始日早於券商的跳動點歷史時,歷史資料品質就會下降;修正方法是下載完整的歷史資料、把起始日往後移,或改用保存較長跳動點資料的伺服器。歷史資料品質是指測試期間中,測試器能用真實跳動點或完整 1 分鐘 K 棒重播的比例,會以百分比顯示在報表中。

把這個數字當成地圖來看,而不是成績。數字低並不代表 EA 有問題,而是代表報表的一部分描述的是測試器自己生成的價格。多數券商保存的跳動點期間比 1 分鐘 K 棒短,所以在真實跳動點模式下跑一段很長的日期範圍,常常一部分是真實、一部分是生成的,而品質數字告訴你這個比例。

假設範例

假設某券商的商品在 2020 年中以前沒有資料,2020 年中到 2021 年底有 1 分鐘 K 棒,2022 年起有記錄的跳動點。一個真實跳動點測試,若設定為 2019 年 1 月至 2025 年 6 月,會重播約一年半的空白、約一年半的生成跳動點,以及約三年半的真實跳動點,而品質數字反映的就是這個比例。把起始日移到 2022 年 1 月,整段測試就全部是真實跳動點,品質數字隨之提高,代價是測試期間變短。

假設性回測自 2019 至 2025 年中:1.5 年無資料、1.5 年模擬跳動點、3.5 年真實跳動點;改從 2022 年開始則全程為真實跳動點 品質是一張地圖,而非等級 假設性經紀商歷史資料 自 2019 年起 無 模擬 真實跳動點 自 2022 年起 全為真實 低品質代表價格是虛構的。 所以:從真實跳動點開始的時點起算。
品質條是一張地圖,顯示哪些年份有真實跳動點、生成跳動點或完全沒有資料。把起始日移到真實跳動點開始的時間,數字就會提高。

當你更需要較長的日期範圍,而不是真實跳動點時,可以保留較早的起始日,改用每一跳模式執行,並在筆記中寫明早期年份是模擬的。一個同時在模擬年份與真實跳動點年份都站得住腳的結果,比只在其中一種年份表現好的結果更有說服力。

為什麼 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%
保留候選策略的績效報表畫面:權益曲線、回撤曲線與交易摘要並列。單看它像是一次測試;其實它只是 1,024 次嘗試中挑出的一次。
保留候選策略的績效報表畫面:權益曲線、回撤曲線與交易摘要並列。單看它像是一次測試;其實它只是 1,024 次嘗試中挑出的一次。 ES・日線・2019-01-02 至 2025-06-30・CPU 引擎回測

只當成單次執行來看,這張表說明發生了什麼: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. 設定前瞻期(1/4 或 1/3 的範圍),讓每次執行也會在最佳化器沒看過的資料上產生一個結果。判斷保留的格子時,看「前瞻結果」分頁,而不是主分頁。
  2. 看相鄰的八格。 如果保留的設定很好、而鄰近的格子都很差,那結果就是雜訊造成的尖峰。Pardo(2008)詳細描述了這種參數鄰域檢查。
  3. 數交易筆數。 交易很少的格子可能只靠兩個運氣好的部位就贏得整個格網。
  4. 把保留的格子當成單次執行重跑,使用最慢的模擬模式,並採用設定步驟第六與第七步中你設定的點差與延遲,然後讀那份報表,而不是讀格網裡的那一格。

AlphaPrime 的用事先設定的門檻進行策略檢驗,會讓搜尋保留下來的每個候選策略都要通過你在執行前寫好的門檻,包括推進分析在內,所以你看到的候選策略,已經通過了一項早在其數字產生前就寫好的測試。

從超過一千組嘗試的參數格中挑出一個被標示的格子,報表顯示淨損益約 11 萬美元、67 筆交易,但報表中隱藏了挑選前的嘗試次數 最佳格子被美化了 我們的 ES 回測,從眾多嘗試中只保留一個 眾多嘗試中的 1 次 淨損益 +$110k 67 筆交易 嘗試次數:隱藏 挑選贏家會加入運氣成分。 所以:以樣本外期間來評判。
最佳化格網中最好的那一格,只是眾多選項中的一個,而且會因為被挑中而被美化。旁邊的報告卡並沒有說明它是怎麼被挑出來的。

MT5 策略測試器如何處理期貨資料?

對期貨而言,測試器一次只處理一個券商商品,並採用該券商定義的合約大小、保證金與交易時段,因此每一張到期的合約只帶有很短的歷史,系統不會替你接好連續序列,轉倉跳空與交易時段中斷也得由你自己處理。連續序列是指把每一張到期合約在選定的換月日接到下一張而形成的一條價格歷史,而多年回測需要的正是它。

許多券商把每一張到期合約都列成獨立的商品:三月合約、六月合約等等,每張在停止交易前只有幾個月的價格。在其中一張上跑 EA,測試會在該合約到期時結束;換到下一張上跑,價格水準會跳動,因為兩張合約從來不是以相同價格成交的。同樣這種單一商品的設計,也是選擇權回測比期貨困難的原因之一:每個履約價與到期日都是獨立的一段短歷史。從換月日到跳動點價值,長期期貨測試需要的完整清單,請見期貨回測做對的方法:規格、轉倉與成本。

在經紀商端,每個期貨合約(3月、6月、9月、12月)都是獨立代號,價格水準各異且彼此有跳空;接合後的連續序列會把它們串成一條線,並標出轉倉點 一個代號,單一合約 多年資料需要銜接 經紀商 3月 6月 9月 12月 接合 轉倉 轉倉 轉倉 每個代號到期即結束。 所以:接合序列,掌握轉倉點。
MT5 中的期貨商品是一張到期合約,只有很短的歷史。多年測試需要把各合約接成一條序列,並且知道每個換月點。

對使用測試器的期貨交易人而言,有三件事需要注意:

  • 先檢查商品規格。 合約大小、最小跳動單位、保證金與交易時段都是券商填入的內容,它們決定每點的損益,以及「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.