金融事件取樣中的 CUSUM 濾波器詳解
由對數回報的累積與門檻重設開始,了解 CUSUM 如何選出事件時點,以及門檻、收市時間和回測成本對結果的影響。
本指南內容CUSUM 選出事件時點,並不預測方向
簡短摘要
CUSUM 濾波器把連續對數回報分別累積成正向和負向路徑;任何一側越過門檻,便記錄一個事件並重設該側的累積值。它回答的是「何時抽取樣本」,不是「下一步升跌如何」,亦不會自行產生預測標籤或交易訊號。
CUSUM 選出事件時點,並不預測方向
按固定時間間隔取樣,市況平靜與大幅波動的時段可能取得相同數量的樣本。事件取樣只保留達到預定價格變動條件的時點,讓研究集中分析累積移動出現之後的資料。改變取樣時間軸,不代表已經找到交易機會。
Page 於 1954 年討論持續監察時使用的累積和方案;金融機器學習中的 CUSUM 濾波器,則把「持續累積偏差,達到門檻便發出事件」的概念套用在價格變動上。Page 的論文和 《Advances in Financial Machine Learning》第 2 章提供方法背景。mlfinpy 的過濾文件說明如何選出供其後標籤或建模使用的事件時點。
過濾器與之後的工作要分開看:它決定何時開始觀察;特徵和模型決定使用甚麼資訊;標籤規則才描述事件之後的結果。每支 K 線都建立一個預測樣本,與只在事件觸發時建立樣本,是兩種不同的取樣問題。
正向和負向累積值的更新方法
令 (P_t) 為時點 (t) 的收市價,相鄰收市價的對數回報為:
\[ r_t=\ln(P_t/P_{t-1}). \]
令 (S^+_t) 及 (S^-_t) 分別表示非負的正向累積值與非正的負向累積值:
\[ S^+_t=\max(0,S^+_{t-1}+r_t),\qquad S^-_t=\min(0,S^-_{t-1}+r_t). \]
若採用對稱門檻 (h>0),本文採用嚴格觸發條件:(S^+_t>h) 或 (S^-_t<-h) 時記錄事件,並把觸發一側重設為零。另一側按自己的遞迴繼續更新;記錄事件不等於不分兩側把所有狀態一併清零。
濾波器的輸出通常是事件時間戳或事件所在的收市行。它不是每個事件的方向標籤,也不是價格目標。實作亦可使用隨時間變動的 (h_t);無論門檻固定或動態,累積值與門檻必須使用相同的回報單位。
逐步計算一個對稱門檻例子
假設收市價依次為 100.00、100.20、100.40、100.60、100.40、100.20、100.00,並設定 (h=0.005) 個對數回報單位。以下數字純粹用來說明規則,並非實際市場行情或成交紀錄。
首三段正向對數回報約為 0.001998、0.001994、0.001992。三段方向相同,至 100.60 時正向總量為
\[ \ln(100.60/100.00)=0.005982\text{(約 }0.598\%\text{)}. \]
這個數值高於 0.005,因此 100.60 這個收市時點觸發正向事件,之後把 (S^+) 設回零。價格其後回落,向下累積由重設後的狀態開始;由 100.60 跌至 100.00 的總對數變化為
\[ \ln(100.00/100.60)=-0.005982. \]
所以 100.00 這個收市時點觸發負向事件,並重設 (S^-)。此前曾經上升,不會阻止回落後出現另一個事件。兩次事件之間有多少支 K 線,視乎實際路徑,不是固定間隔。
門檻單位、等號邊界和動態調整
對數回報要求價格為正
(\ln(P_t/P_{t-1})) 要求兩期價格都大於零。遇到零價、負價或不適合對數回報的序列,公式沒有定義,或已失去原來的解釋。不要為了讓程式繼續執行,便暗中取價格絕對值或任意平移價格;這會改變所量度的對象。應改用合適的回報或價格變動定義,配合調整門檻、說明單位和檢查清理規則。
用來取樣的價格序列也要說明清楚:交易價、買賣中間價、結算價,還是調整後收市價?不同序列會帶來不同觸發時點。拆股造成的機械式跳價、報價缺失和時間戳錯配,也可能累積出不是市場變動的訊號。
時間 K 線、事件時間與收市資訊
輸入可來自每分鐘、每小時或每日收市價;CUSUM 只在觸發門檻的 K 線保留事件,相鄰事件的時間間距一般不規則。事件時間不是等速時鐘:一段時間可以沒有事件,也可能在短時間內連續出現。下游模型若使用間距、波動或持有期,應把間距當作明確變數處理,不能假定每兩個樣本等於一個固定交易日。
如 (r_t) 使用收市價,必須等收市價形成並可見,才可計算該支 K 線的回報和觸發結果。因此用該收市價偵測訊號,然後假設沒有延遲便可用同一價格成交,時序假設並不實際。回測應按資料可取得的時間安排決策,並在下一個可執行報價或成交價模擬落盤;如使用日內資料,也要交代當時可見的價格及資料與落盤延遲。
門檻決定事件密度,也帶來噪音取捨
門檻較低,累積路徑較容易觸發,事件數量通常增加;這會保留更多細小波動,但也增加噪音樣本、手續費和執行工作。門檻較高,事件較少,只有較大移動才會留下,但細幅或快速反轉可能被忽略。調校門檻會改變樣本量、事件分布和重疊情況,因此不能只挑回測表現最好的一個門檻,再當作事前已知的設計。
先在訓練期間或研究設計階段決定候選門檻,再以按時間排列的樣本外區間評估事件率、事件間隔和其後任務。若試過很多門檻、資產和日期區間,應交代這個選取過程;只展示最佳結果會誇大證據。門檻沒有一個適用於所有預測目標、市場和資料頻率的通用最佳值。
驗證、交易成本與三種不同的 CUSUM 用法
驗證要保留時間次序,每一個訓練折只可用當時已知資料估計動態門檻。若其後的標籤使用多個未來時點,訓練和測試事件的結果區間可能重疊,須按標籤區間採用剔除重疊或隔離規則。評估模型亦應計入買賣差價、手續費、滑點、資金費、借貨費用和成交可行性;事件頻率愈高,成本愈可能改變淨結果。
價格事件濾波器與回歸穩定性檢驗不同。回歸 CUSUM 通常累積遞迴殘差,配合統計界限檢驗回歸係數是否穩定;它檢驗模型殘差及其假設,並非本指南對價格對數回報設定雙側門檻的事件濾波器。詳情可參閱回歸 CUSUM 結構穩定性檢驗指南。
事件濾波器同樣不會替三重障礙法建立結果標籤。先由 CUSUM 選出事件開始時間,再由研究者指定的止盈、止損和持有期限規則,按之後的價格路徑計算 (y)。可參閱三重障礙法金融事件標籤指南。觸發只表示指定的累積變動越過門檻;它不預測方向、不保證平穩或流動性,也不代表扣除交易成本後有盈利。
常見問題
Q1CUSUM 事件觸發是否代表看升或看跌訊號?
不是。正向或負向觸發代表某一側的累積變動越過門檻,用來標記觀察時點。要預測下一段方向,須另外訂定特徵、預測目標和驗證方法。
Q2累積值剛好等於門檻時會否觸發?
視乎採用的約定。過濾教學文字有時寫作「大於或等於」,mlfinpy 目前實作則採用嚴格的大於或小於。研究和程式須選用一致規則,並固定邊界處理。
Q3CUSUM 濾波器可否保證樣本平穩或策略盈利?
不能。它按累積價格變動選取事件,不會證明回報平穩、成交流動性足夠,或策略扣除成本後盈利。模型假設、樣本外結果和交易成本都要另行檢查。
資料來源與延伸閱讀
回報問題
我們會準備一封包含本文連結的電郵。寄出後,Mark 才會收到你的回報
快速檢查
讀完指南後,用 3 道題檢查一下
問題 01
正向累積值首次嚴格大於門檻 h 時,按本文規則應如何處理?
選擇答案即可查看解釋