分類
風險
難度
入門
適用情境
風險管理策略設計回測

波動率

波動率(volatility)是價格隨時間變動的幅度——衡量的是價格走了多遠,而不是往哪個方向走。統計上它是報酬的標準差;在 MT5 EA 裡它以平均真實波幅(ATR)讀取,並決定上個月的停損距離放到今天是否還合適。

亦稱:market volatility, price volatility

更新於 · 審閱於

一句話講清

價格通常會走多遠,而不是往哪邊走。一個平靜的市場和一個劇烈的市場,可以在同一個價位收完這一週;波動率就是這兩段路程之間的差別。

為什麼重要

EA 裡的每一個停損距離、目標和手數,都是依照「價格在一個交易時段內會走多遠」的某種假設校準出來的。波動率就是把這個假設明講出來。當它在部署之後改變,一個原本正確的 EA 會在邏輯一行未動的情況下變成錯的。

  • 它決定了一個停損的意義。30 點(pip)在平靜的 8 月對 EUR/USD 來說是寬停損,在政策公告期間對 GBP/JPY 來說則是窄停損。
  • 它是風險與部位大小之間的橋梁。按帳戶固定百分比承擔風險,意味著波動率上升時手數必須下降——而這只有在 EA 真的在測量波動率時才會發生。
  • 回測繼承的是其窗口內的波動率,而這個窗口很少只有一種狀態。在本站測得的 22 份公開帳本上,最劇烈的一季是最平靜一季的中位數 2.29 倍,全程用的是同一套設定。
  • 它是實盤結果在什麼都沒壞的情況下偏離回測的主因。點差隨波動率擴大,滑價隨之增加,而兩者都落在帳本不利的那一側。

如何計算

σ = 各期報酬的標準差 · 年化 σ = σ_daily × √252
各期報酬
從一根 K 線的收盤價到下一根收盤價的百分比變化,時間週期取測量所用的那一個。
√252
從日資料換算成年資料的縮放。它假設每一期都與前一期獨立;日內系統則改按其持有期間內的 K 線根數(√N)縮放。
ATR
N 根 K 線的平均真實波幅——EA 可以用 iATR 直接讀取的實務替代指標,以點而不是百分比表示。

統計上的定義是報酬的標準差,夏普比率、風險值和每一個風險模型用的都是它。EA 裡的實務定義則是平均真實波幅,它以價格單位衡量同一個概念,而且不需要報酬序列就能計算。兩個都叫「波動率」的數字,往往其實是這兩樣不同的東西。

多少算高、多少算低

  • 低於測試窗口 σ 的 0.75 倍 比測試窗口更平靜——目標碰不到,反覆出現的小額成本成為主角
  • 測試窗口 σ 的 0.75–1.25 倍 設定被調校時所處的狀態。在公開帳本上,375 個季度中有 282 個落在這裡
  • 1.25–2 倍 偏高——按測試窗口設定的停損開始被普通 K 線打到
  • 高於 2 倍 另一種狀態。22 份公開帳本中只有 2 份有某一季高出其整段窗口 σ 這麼多

需要一起看的指標

單一數字無法描述一套策略。下列指標會改變這個數字的讀法。

範例

一個演算範例:同一個 EA 帶著 30 點固定停損走過兩種狀態。改變的只有一根普通小時 K 線的幅度。

平靜狀態——H1 上的 ATR(14)
12 點
30 點的停損離價格 2.5 個平均波幅——穩穩落在雜訊之外。
劇烈狀態——H1 上的 ATR(14)
34 點
同一個停損現在落在一根平均 K 線之內,普通的走勢就會把交易平掉。
以 2.5 × ATR 設定的 ATR 停損,平靜狀態
30 點
以 2.5 × ATR 設定的 ATR 停損,劇烈狀態
85 點

ATR 版本會跟著市場一起放寬——但手數也必須跟著縮小。

計算 30 ÷ 12 = 2.5 個波幅 · 30 ÷ 34 = 0.88 個波幅

結果 固定停損的意義變了將近三倍;以 ATR 為基準的停損則沒有

怎麼讀這個數字

  • 當一個策略要在無人看管下跨年執行時,優先採用按波動率縮放的停損而非固定點數距離——但手數也要用同一個尺度縮放,否則更寬的停損只不過代表更大的虧損。
  • 把波動率飆升當成一次點差與滑價事件來看待,而不只是一次價格事件。執行成本隨之上升,而且恰好在停損最可能被打到的那些時刻升得最快。

mt5depot 的 EA 頁面為每一個上架商品註明了測試窗口與資料來源,所以一個結果是否跨越了不只一種狀態,可以從日期讀出來。本頁每一個實測數字都來自這些商品公開的交易帳本(EXP-VOL-REGIME-001),以已平倉交易為基準。

常見誤解

把波動率當成方向

高波動率說的是價格動得很大,不是價格在往上走。趨勢和波動率是兩個各自獨立的衡量——一段劇烈的盤整區間既是高波動率,同時又沒有趨勢。

把波動率當成虧損

在公開帳本上,EA 每日損益最劇烈的那一季在 22 個中有 13 個是獲利的,而最糟的單日在 22 個中有 15 個落在那一季之外。一個在高波動率時把 EA 關掉的濾網,會錯過那一季,卻仍然躲不掉大多數最糟的日子。

放寬停損卻不縮小手數

一個在劇烈狀態下放大到三倍的 ATR 停損,會把承擔風險的資金也放大到三倍,除非部位大小跟著下降。自適應停損只有在搭配自適應部位時才有幫助。

深入說明

波動率從哪裡進入 MT5 策略測試器

測試器從不印出波動率數字。它的三項設定決定了有多少波動率能到達報告。

建模。 Every tick based on real ticks(以真實 Tick 為基礎的每一筆 Tick)重播每根 K 線內部記錄下來的路徑,所以一個落在普通 K 線之內的停損,會在它本來就會被打到的時點被打到。由 M1 K 線產生的 Every tick(每一筆 Tick)對這條路徑做內插,而 Open prices only(僅開盤價)則把它捨棄。停損比 K 線幅度更窄的策略,用這兩種模式都無法判斷——參見 Tick 資料建模品質

點差。 策略測試器(Strategy Tester)→ Settings → Spread 提供 Current(目前值)或一個固定的點數(point)。兩者都在長達數年的整段測試裡只用同一個數值,所以隨波動率飆升而來的點差擴大,不會出現在產生 Tick 的測試裡。在真實 Tick 上,點差就是 Tick 檔案所帶的那個值。

輸入參數。 一個以 ATR 設定的停損會在 Inputs 分頁露出兩個輸入項:週期與倍數。一個在 2.0 有效、在 1.8 或 2.2 卻無效的倍數,是被擬合到某一段窗口的回檔上,而不是擬合到波動率上。在 MQL5 裡,控制代碼(handle)在 OnInit 中用 iATR(_Symbol, PERIOD_CURRENT, 14) 建立一次。數值從最後一根已完成的 K 線(索引 1)讀取,這樣停損距離就不取決於訊號觸發的時間點。平均真實波幅(ATR)詞條裡有相關設定。

22 份公開帳本說了什麼

每個商品頁面都附有它的已平倉交易清單,所以可以按日曆季度測量 EA 自身每日損益的 σ,並與整段窗口比較。24 個商品中有 2 個在任何一季都沒有達到 10 個活躍日,被略過而沒有補齊。

測量項目(已平倉交易基準,活躍日 10 天以上的季度)22 個 EA 的中位數範圍或數量
每個 EA 符合條件的季度數15.5合計 375 個
狀態跨度:最劇烈一季 σ ÷ 最平靜一季 σ2.29×1.25× 到 5.33×
狀態跨度超過 2× 的 EA22 個中的 15 個
落在整段窗口 σ ±25% 以內的季度78.76%375 個中的 282 個
最糟單日落在最劇烈一季之內22 個中的 7 個
最劇烈一季虧損22 個中的 9 個
最後一個符合條件的季度 σ ÷ 整段窗口 σ0.91×22 個中有 17 個低於 1

有兩列與波動率濾網的假設相牴觸。最糟的一天在 22 個 EA 中有 15 個落在最劇烈一季之外,而那一季在 22 個中有 13 個是賺錢的。單一個壞日子不是一種狀態,而滾動式的測量也看不見它要來。

跨度最寬的是 Murmuration:2026-Q1 的季度 σ 為 4.591%,下一季則為 0.862%,設定完全相同卻相差 5.33 倍。它最糟的一天是 2020-03-18 的 9.579%,落在六年前一個更平靜的季度裡。

拿這個數字做什麼

讀狀態,不要讀水準:在 EA 交易的時間週期上,把今天的 ATR 和測試窗口內的 ATR 做比較。

  1. 從商品頁面取得測試窗口的起訖日期,以及 EA 執行的時間週期。
  2. 在該時間週期的圖表上掛上 Average True Range(週期 14),讀取最後一根已完成的 K 線。這就是部署時的 ATR。
  3. 窗口平均值則用 CopyBuffer(handle, 0, 1, bars, array) 在測試日期範圍內讀取同一個指標,再對陣列取平均。
  4. 相除。落在 0.75–1.25 之內,公開的數字適用;超過 2,你就處在一種測試窗口可能不包含的狀態裡——本站 22 份帳本中只有 2 份有某一季高出其整段窗口 σ 這麼多。

在 MT5 執行回測涵蓋上面這些設定,參數最佳化則涵蓋 ATR 倍數的相鄰值檢查。一次飆升如何變成錢,是部位管理滑價最大回撤的主題。

常見問題

波動率如何影響 MT5 EA?
它改變 EA 所用的每一個距離的意義。以固定點數設定的停損與目標,會在波動率上升時變窄、下降時變鬆,所以同一套設定在不同狀態下會變成不同的策略。點差和滑價也隨之增加。
對一個策略來說,怎樣的波動率水準算正常?
沒有有用的絕對數字;真正該讀的是目前的狀況相對於策略被測試的那段窗口。在 22 份公開帳本上,中位數 78.76% 的季度落在整段窗口數值 ±25% 的範圍內。其餘的部分,就是回測裡固定設定沒有被調校到的那一段。
MT5 策略測試器會對波動率建模嗎?
它只是重播,並不建模。「Every tick based on real ticks」(以真實 Tick 為基礎的每一筆 Tick)重播記錄下來的 K 線內部路徑,產生 Tick 的各個模式在每根 K 線內做內插,而僅用開盤價的模式則捨棄 K 線內部的走勢。點差設定同樣重要。「Current」(目前值)會把一個數值固定在整個測試上,所以除非 Tick 檔案本身帶有,否則隨飆升而來的點差擴大不會出現在報告裡。
高波動率對 EA 是好是壞?
看策略。突破與趨勢系統一般需要行情才能運作,在平靜的市場裡會停滯;均值回歸與網格系統則偏好平靜,會被持續的趨勢傷害。兩者共同的問題是:設定固定之後,狀態變了。