分類
績效
難度
入門
適用情境
回測EA 評估

回測

回測是把 EA 的交易規則套用在歷史價格資料上進行模擬,用來估算該策略在過去會有怎樣的表現。

亦稱:歷史回測, 策略測試, backtest

更新於

一句話講清

把 EA 的規則放到歷史價格上跑一遍,看它當時會怎麼做。它記錄的是一次模擬,而不是一份預測;兩者究竟有多少共同點,完全取決於你怎麼搭建這次模擬。

為什麼重要

回測是絕大多數 EA 唯一拿得出來的證據,所以弄清楚它能證明什麼、不能證明什麼,幾乎就是 EA 評估的全部。它能用很低的成本淘汰一個策略,也能說明規則確實與描述相符;它做不到的是預測,而幾乎每一筆令人失望的購買,都始於把它當成預測來讀。

  • 它是可被證偽的,而行銷文案永遠不是。回測會寫明資料來源、日期區間與成本模型,買家因此可以追問這次執行能否重現——而一個不肯寫明這些的 EA,其實已經告訴了你一些事情。
  • 它是失敗成本最低的地方。在歷史上虧錢的規則不會到實盤就開始賺錢,所以回測用一個晚上的算力就篩掉了候選者。
  • 它的結果是一個區間,而不是一個數字。同一套規則換資料源、換點差、換起始日期,會得到一片分散的結果,而這片分散的寬度才是真正的發現。

用它驗證策略

用在哪裡

  • 在投入資金或前推測試時間之前,先篩掉一個策略構想。
  • 確定使用者應當預期的交易頻率、平均持倉時間,以及最糟糕的連虧段。
  • 產生 EA 頁面上公布的數字——獲利因子、回撤、勝率——這正是執行來源本身就屬於該主張一部分的原因。
  • 把既有的 EA 放到更新的資料視窗上重跑,檢查它的行為是否已經漂移。

可靠的結果長什麼樣

  • 資料來源、日期區間與測試模型都已寫明,因此這次執行可以被重現,而不是只能被相信。
  • 該執行把點差與手續費建模在貼近現實的水準,而不是停在一個理想的固定值上。
  • 視窗跨越多種市場狀態:至少包含一段趨勢行情、一段盤整行情與一段承壓行情。
  • 沒有人在所報告的這個視窗上調過參;即便調過,頁面也會在旁邊給出一段未被觸碰的樣本外視窗。
  • 成交筆數在數百量級,因此那些醒目的統計數字並不是由少數幾筆極端交易撐起來的。

警訊

  • 一張沒有資料來源、沒有日期區間,也沒有成交筆數的權益曲線截圖。
  • 起點選得過於湊巧的視窗:測試從上一輪危機之後才開始的 EA,等於自己給自己出了考卷。
  • 以不合情理的精度給出的參數,例如 37 週期均線搭配 23.7 點的停損。
  • 來自範本而非來自真實執行的建模品質數字。MT5 的 Model 0 是用 M1 K 線生成 tick,只有 Model 4 才會回放錄製的真實 tick。這些頁面背後的 schema 曾把該欄位的預設值設為 99,於是一次 Model 0 的執行照樣顯示 '99% modelling quality, against a 92% minimum',直到該預設值在 2026-08-06 被移除。
  • 只在作者做過最佳化的那一個商品上展示的結果。

回測與實盤的差異

  • 成交過於樂觀。測試器假定訂單以模擬價格送到了市場;實盤執行還要加上滑點、重新報價與延遲,這三樣都要花錢。
  • 成本是靜態的。使用固定點差的回測看不到新聞前後與交易時段交接時的點差擴大,而那恰恰是許多策略下單的時刻。
  • 市場已經發生過了。測試視窗裡不含任何策略沒見過的市場狀態,而實盤遲早會送來一種。
  • 應當預期實盤的獲利因子與期望值低於測試數字。適度的差距是正常的;符號發生改變則意味著這次測試的成本設定有誤,或者規則被過度擬合了。
  • 這個差距在這裡被實測過。本站的十四個上架商品中,回測獲利因子集中在 1.23 到 1.53 之間,而上架之後的樣本外視窗卻從 0.72 一路散到 6.43,成交僅七到 142 筆:其中兩個低於 1.0,而且包括這一組裡回測成績第二好的那一個。樣本小到這種程度,兩個方向上看起來就是這樣。

建議的驗證方法

  1. 1先把成本模型定下來——貼近現實的點差與手續費——然後再跑,而不是在理想成交上調參、最後再把成本加回去。
  2. 2在最佳化任何東西之前先留出一段未被觸碰的視窗,並且在規則定稿之前不去看它。
  3. 3換第二個資料源重跑。兩個資料源之間的分歧只要超過一點點,就是在告訴你結果取決於資料而不是規則。
  4. 4把起始日期挪動幾週再跑一次。只在某一個起始日期下才成立的結果,不算結果。

範例

同一個 EA、同一段視窗、四次測試執行,彼此之間只差寫進設定檔裡的那個固定點差值。

固定點差分別設為 20、30、40 與 60 點
四份完全相同的報告
四份報告檔案的 MD5
471C1CE24EC24E669C20BD2B01EBB8A3
每份都是 621,050 位元組——這個設定什麼也沒動。

於 2026-07-31 在 GBPJPYm 上實測,這也是那個商品頁面完全不公布點差數字的原因;之後在測試器內執行的記錄器把均值測到了 19.14 點。

計算 20 / 30 / 40 / 60 點 → 一份逐位元組相同的報告

結果 MT5 的測試器根本沒有 Spread 這個鍵,它是 MT4 遺留下來的,所以真正生效的成本模型從來就不是被設定的那一個

怎麼讀這個數字

把回測當成一份附帶條件的主張來讀。這些條件決定了它在接觸真實帳戶之後還能剩下多少。

區間 含義
沒有寫明資料來源或日期區間 算不上證據。既沒有東西可供重現,也沒有東西可供反駁。
寫明來源,單一商品,最佳化過的視窗 只是一個起點。它說明規則能在某處賺錢,而這是回測所能說明的最弱的一件事。
寫明來源,成本貼近現實,跨越多種市場狀態 值得一讀。此時這些數字講的是策略本身,而不再是測試怎麼搭的。
在上述基礎上再加一段未被觸碰的樣本外視窗 這是回測單獨所能給出的最強證據:其中一部分資料,調參的人當時根本拿不到。
  • 去問最佳化了什麼。每一個在所報告視窗上調過的參數,都從資料裡借走了一點結果。
  • 先看成交筆數再看獲利。五十筆交易再漂亮,也分不清策略與運氣。
  • 無法重現的回測就是一張截圖。把標註來源的那一行當成數字的一部分,而不是註腳。

mt5depot 的 EA 頁面會為每一次公開的執行寫明資料來源、日期區間與測試模型,而這 30 個商品裡只有 6 個帶著建模品質數值——那是用真實 tick 跑出來的 18 次執行中的 6 次。有一道建置檢查會去讀真正發布出去的頁面,好讓其餘 24 個無法宣稱這樣一個數字。

常見誤解

把回測當成預測來讀

它報告的是規則在已經存在的資料上會怎麼做。未來包含著視窗裡沒有的狀況,這正是前推結果更差的原因,而需要提前規劃的恰恰是這個差距。

在同一段視窗上既最佳化又回報

每一個調過的參數都會吸收這段視窗的一部分雜訊,所以在用來調參的資料上做測試,測的其實是調參本身。結果註定好看,也註定無法重現。

比較兩份在不同條件下跑出來的回測

不同的點差、不同的資料源、不同的日期區間與不同的測試模型,都會在與策略無關的情況下推動這些數字。只有當兩者背後的設定一致時,兩個數字才具有可比性。

想當然地認為視窗越長越好

對當沖策略來說,在內插生成的 K 線資料上跑十年,資訊量可能還不如在真實 tick 上跑兩年,因為那次更長的執行裡從來就沒有出現過規則實際交易的那條 K 線內部路徑。

深入說明

常見問題

回測好看就足以買下一個 EA 嗎?
不足以。回測可以淘汰一個策略,也可以說明規則的行為與描述相符,但它無法證明這份優勢能在測試視窗不曾包含的狀況下繼續存在。請在旁邊尋找樣本外視窗或前推紀錄,並且在看獲利之前先讀成本模型。
EA 的回測應該跑多長時間?
長到足以包含多種市場狀態,成交筆數也要多到統計能夠穩定下來:對多數策略而言,實務上是數年以及數百筆交易。單看長度並不是標準:在品質差的資料上跑很長,資訊量可能還不如在真實 tick 上跑得短一些。
為什麼回測結果在不同經紀商之間會不一樣?
因為價格歷史、點差紀錄與交易條件都不相同。把同一套規則放到兩個資料源上跑,得到明顯不同的結果,這本身就是有用的資訊:它意味著結果既取決於策略,也同樣取決於資料。