三重障礙法:金融事件標記完整解析
了解停利門檻、停損門檻與最長持有時間如何共同決定事件標記,以及如何處理價格順序不明和結果區間重疊。
本指南內容三個條件共同決定事件標記
簡短摘要
三重障礙法根據事件開始後最先發生的條件,為金融事件設定標記:上方停利門檻、下方停損門檻,或最長持有期限。每個事件的門檻依據起始價格 P₀ 和事件開始時已知的波動度尺度 σᵢ 設定。本文採用的規則是:先觸及上方障礙標記為 +1,先觸及下方障礙標記為 −1,兩個水平障礙都未觸及便到期則標記為 0。有些實作會改用到期報酬率的正負號,因此研究文件應明確記錄採用的規則。
三個條件共同決定事件標記
對事件 i,記錄開始時間 tᵢ、價格 P₀、報酬率尺度估計 σᵢ、m_PT 與 m_SL 兩個倍數,以及最長持有時間 Tᵢ。若採用簡單報酬率,上方價格門檻為 P₀ × (1 + m_PT σᵢ),下方門檻則為 P₀ × (1 − m_SL σᵢ)。前兩者是水平障礙,時間 Tᵢ 則是垂直障礙。
例如,m_PT = 2 表示上方目標位於起始價格上方兩個尺度;m_SL = 1.5 則表示下方停損位距離起始價格 1.5 個尺度。若任一水平門檻在 Tᵢ 前先被觸及,事件就在該處結束,並依觸及方向取得標記。如果到期前兩個水平門檻都未觸及,事件便在垂直障礙結束。
障礙可用簡單報酬率或對數報酬率設定;價格變動較大時,兩種算法換算出的價格門檻並不完全相同。建立目標和模擬成交時,應選定一種報酬率定義並保持一致。《Advances in Financial Machine Learning》第 3 章介紹事件式標記,以及依波動度尺度設定障礙的方法。
波動度尺度必須在事件開始時已知
σᵢ 會依該事件的估計波動度調整障礙距離。可以根據歷史報酬率或事先定義的模型估算,但只能使用 tᵢ 當下或之前可取得的資料。若波動度估算納入未來區間,門檻本身就已洩漏未來資訊,即使特徵處理正確也一樣。
固定百分比容易理解,但在市場平穩時可能太近,在波動加劇時又可能太遠。依波動度設定尺度,可以讓距離隨當前市場狀態變化。不過,σᵢ 不是對未來波動度的保證,也不是精確預測;它只是預先定義的標記規則中的一項輸入。
每個事件都應保留起始價格、σᵢ、倍數、開始與結束時間、結束原因,以及判定觸及時使用的價格。保留這些資訊才能重建標記、檢查事件持續時間,並稽核是否意外使用未來資料。
事件觸發器與結果標記回答不同問題
觸發器決定何時開始觀察事件。例如,CUSUM 濾波器可以在累積價格變動超過門檻時產生事件,而不是每根 K 棒都建立一個樣本。觸發器回答「何時開始建立樣本」,三重障礙規則則回答「開始後哪種結果最先發生」。
不要把觸發器和標記或交易訊號混為一談。障礙標記會使用之後的價格路徑建立目標變數 y,這是計算訓練結果所需的;但事件特徵和 σᵢ 只能根據開始時已知的資訊計算。這個區分可見於 mlfinpy 標記文件,也實作在三重障礙程式碼中。
範例說明每道障礙如何作用
假設 P₀ = $100、σᵢ = 2%、m_PT = 2、m_SL = 1.5,垂直障礙在未來第 3 根 K 棒結束時到期。依簡單報酬率計算,上方門檻為 $104,下方門檻為 $97。
- 價格路徑 $100 → $104.50 在第 1 根未來 K 棒觸及上方門檻,因此標記為 +1;之後價格即使反轉,也不會改變首次觸及的結果。
- 路徑 $100 → $96.50 在第 1 根未來 K 棒、到期前觸及下方門檻,因此標記為 −1。
- 路徑 $100 → $101 → $102 → $101.50 沒有觸及任何水平門檻。未來第 3 根 K 棒結束時到期後,依本文規則標記為 0,儘管最終報酬率是 +1.5%。
最後一個例子表示,本文的 0 代表「期限到達前沒有觸及水平障礙」,而不是「報酬率為零」。有些實作將到期時間視為觀察終點,再依終點報酬率的正負號分類。那是另一套規則,應清楚記錄,也不要混合不同規則產生的標記。

方向標記與元標記是不同任務
在方向預測中,+1 和 −1 表示價格先觸及哪一側的門檻;本文把到期情況另列為 0。模型可以使用事件開始時已知的特徵預測這些類別。標記只描述相對於指定障礙的結果,本身不代表扣除成本後獲利的機率。
元標記(meta-labeling)先由主要模型提出部位方向,例如做多或做空;計算報酬率時會納入這個方向,再透過障礙產生結果標記,接著由第二個模型評估是否採用該訊號。因此,標記與障礙的意義取決於計算是否納入部位方向。請在資料中明確記錄建議方向,不要把所有 +1 標記都解讀成買進建議。
市場資料可能無法判斷觸及順序
只看收盤價的資料可能漏掉盤中觸及:最高價或最低價可能在收盤前已經越過障礙。同一根 OHLC K 棒若最高價越過上方門檻、最低價也跌破下方門檻,這四個價格無法說明哪一側先被觸及,不能據此可靠地選出結果。
若觸及順序會影響標記,請使用足以還原順序的更高頻資料。若沒有這類資料,就預先訂定保守且可重複的雙邊觸及規則,例如按不利結果處理,並一致套用在所有事件上。研究方法應揭露這項不確定性,不要把假設的先後順序說成實際觀察到的事實。
也要說明「觸及」是指成交價、買賣報價、收盤價,還是可實際成交的價格。跳空、買賣價差和下單延遲,都可能讓真實部位無法在圖表上的門檻成交。
驗證時要處理事件重疊
多個事件可能同時進行,且標記時會使用部分相同的未來價格路徑。因此,若將資料列隨機分到訓練集和測試集,兩邊可能都出現結果區間互相重疊的樣本。驗證時應記錄事件從開始到觸及障礙或到期的實際區間,並依既定規則,從訓練集中移除與測試結果重疊的樣本。
金融時間序列的 purged cross-validation 與 embargo 指南進一步說明這種處理方式。Purging 可以減少重疊標記造成的資料洩漏,但無法修正含有未來資料的特徵、反覆挑選模型,或不實際的成交假設。
交易成本會改變結果的意義
障礙路徑通常以標的價格變化計算。實際交易結果還會受買賣價差、手續費、滑價、永續合約資金費率、借券成本與成交規則影響。若研究目標是分類淨結果,應先將這些因素納入目標報酬率定義和實際成交假設,再產生標記。
正向標記不能證明策略會獲利。結果還取決於事件頻率、模型、市場、部位規模和成交品質;根據歷史資料產生標記本身不是獲利承諾或交易建議。
訓練前先記錄標記規則
說明事件如何觸發、P₀ 和 σᵢ 的來源、採用的倍數與期限、用哪種價格資料判定觸及,以及如何處理同時觸及兩側。註明到期是否一律標為 0,或改依終點報酬率正負分類,也要說明結果是在成本前還是成本後計算。
記錄規則可讓資料集接受檢查並重現。即使使用同一份原始資料,參數不同仍會產生不同的預測任務。
常見問題
Q1事件到期時一定要標記為 0 嗎?
不一定。本文把 0 設為獨立類別,表示到達垂直障礙前都未觸及水平障礙。其他實作可能依到期報酬率的正負號給予標記。重點是明確選定一套規則並一致使用。
Q2事件觸發器和三重障礙法有什麼不同?
CUSUM 等觸發器決定樣本何時開始;三道障礙則決定事件開始後,哪項結果條件最先發生。這是建立訓練資料的兩個不同步驟。
Q3+1 標記能保證扣除成本後獲利嗎?
不能。它只表示依指定價格資料和規則,上方門檻最先被觸及。買賣價差、手續費、資金費率、滑價、部位規模和成交方式都可能改變淨結果。
資料來源與延伸閱讀
回報問題
我們會準備一封包含本文連結的電子郵件。寄出後,Mark 才會收到你的回報
快速檢查
讀完指南後,用 3 道題檢查一下
問題 01
若事件在第 1 根未來 K 棒先觸及上方障礙,早於下方障礙和到期時間,應標記為何?
選擇答案即可查看解釋