三重障礙法:金融事件標籤解說
了解止賺位、止蝕位與最長持倉時間如何共同決定事件標籤,以及如何處理價格次序不明與結果時段重疊。
本指南內容三個條件共同決定事件標籤
簡短摘要
三重障礙法按事件開始後最先發生的條件,為金融事件設定標籤:上方止賺位、下方止蝕位,或最長持倉期限。每宗事件的水平按起始價格 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。模型可用事件開始時已知的特徵預測類別。標籤只說明相對於指定障礙的結果,並不直接代表扣除交易成本後獲利的機會。
元標籤先由主要模型提出持倉方向,例如做多或做空;計算回報時會考慮這個方向,再由第二個模型判斷是否採納該訊號。因此,標籤和障礙的含義會視乎計算有否納入持倉方向而定。請在數據中明確記錄所提議的方向,不要把所有 +1 標籤都解讀成買入建議。
市場數據未必能顯示觸及先後
只看收市價的數據可能會漏掉日內觸及:最高或最低價或會在收市前穿越障礙。如果同一根 OHLC K 線的最高價越過上方水平,而最低價也跌穿下方水平,這四個價格不足以判斷哪一邊先被觸及,不能可靠地挑選結果。
如果先後次序會影響標籤,應使用更高頻、足以還原次序的數據。若沒有這類數據,就預先訂下保守而可重複的雙邊觸及規則,例如按較不利結果處理,並對所有事件一致套用。方法說明須披露這項不確定性,不要把推定的先後次序說成實際觀察所得。
也要說清楚「觸及」指成交價、買賣報價、收市價,還是可實際成交的價格。跳空、差價和落盤延誤,都可能令真實倉位無法在圖表顯示的價位成交。
驗證時要處理事件重疊
多宗事件可能同時持續,並共用部分未來價格路徑來建立標籤。若把樣本列隨機分到訓練和測試資料,兩邊便可能包含結果時段重疊的事件。驗證時應使用每宗事件由開始至觸及障礙或期限屆滿的實際時段,並按既定規則,把結果時段與測試集重疊的訓練樣本剔除。
金融時間序列的 purged cross-validation 與 embargo 指南進一步說明這種處理方法。Purging 可減少重疊標籤造成的資料洩漏,但不能修正包含未來資訊的特徵、反覆挑選模型,或不切實際的成交假設。
交易成本會改變結果的意思
訓練模型前記下所有規則
交代事件如何觸發、P₀ 和 σᵢ 的來源、採用的倍數與期限、用哪種價格數據判斷觸及,以及如何處理同時觸及兩邊。註明到期一律標為 0,還是按期末回報正負分類,也要說明結果是在成本前還是成本後計算。
記錄這些規則,數據集才可供審核和重現。即使原始數據相同,參數不同也會構成不同的預測問題。
常見問題
Q1事件到期時必須標為 0 嗎?
不一定。本文把 0 定為獨立類別,表示到垂直障礙為止未有觸及橫向障礙。其他實作可以按到期回報的正負號標籤。關鍵是清楚選定一套規則並貫徹使用。
Q2事件觸發器與三重障礙法有甚麼分別?
CUSUM 等觸發器決定樣本何時開始;三道障礙決定開始後哪個結果條件最先發生。它們是建立訓練數據的兩個不同步驟。
Q3+1 標籤是否保證扣除成本後仍有利潤?
不是。它只表示按指定價格數據和規則,上方水平最先被觸及。差價、佣金、資金費、滑點、倉位大小和成交方式均可能改變淨結果。
資料來源與延伸閱讀
回報問題
我們會準備一封包含本文連結的電郵。寄出後,Mark 才會收到你的回報
快速檢查
讀完指南後,用 3 道題檢查一下
問題 01
若事件在第1根未來 K 線先觸及上方障礙,早於下方障礙和到期時間,應標為甚麼?
選擇答案即可查看解釋