CUSUM-Filter:Definition, Formel und Event-Sampling
Offizielle Definition
Der CUSUM-Filter (Cumulative Sum Filter, kumulativer Summenfilter) ist ein stochastisches Event-Sampling-Verfahren zur Erkennung struktureller Mittelwertverschiebungen in Finanzzeitreihen, ursprünglich begründet durch E. S. Page (1954) und von Marcos López de Prado (2018) für das Finanz-Machine-Learning adaptiert. Anstatt Kursdaten in starren Zeitintervallen (Time Bars) abzutasten, überwacht der Filter die kumulierte Abweichung der Renditen von ihrem Erwartungswert. Erst wenn diese Summe eine vordefinierte, meist volatilitätsadjustierte Schwelle überschreitet, wird ein Sampling-Ereignis (Event) ausgelöst und der Zähler zurückgesetzt. Dadurch filtert das Verfahren unproduktives Marktrauschen heraus und generiert informative, informationstragende Einstiegszeitpunkte für nachgelagerte Labeling-Methoden.
Steckbrief: CUSUM-Filter auf einen Blick
| Kategorie: | Machine Learning & NLP / Algorithmischer Handel & Backtesting |
| Begründer: | E. S. Page (1954), adaptiert von Marcos López de Prado (2018) |
| Mathematische Basis: | Sequenzielle statistische Qualitätskontrolle, Random-Walk-Barrieren |
| Primäre Input-Parameter: | Renditeserie (rt), Schwellenwert (h), lokale Volatilität (σt) |
| Primärer Output: | Diskrete Zeitstempel (Events) zur Initiierung von Trading- und Labeling-Fenstern |
| Hauptnutzen: | Vermeidung von Überabtastung in trendlosen Phasen und Rauschunterdrückung |
Methodische Funktionsweise: Symmetrische Akkumulation statt Zeittakt
Klassische Zeitreihenmodelle werten Kurse in festen Zeitschritten (beispielsweise jede Stunde oder jeden Tag) aus. Dieses Vorgehen leidet unter zwei gravierenden Nachteilen: In ruhigen Marktphasen ohne Informationsgehalt erzeugt das System redundante Beobachtungen, während es bei massiven Turbulenzen unterabgetastet bleibt. Der CUSUM-Filter löst dieses Problem durch eine ereignisbasierte Steuerung: Er sammelt kontinuierlich Renditeimpulse an und schlägt erst Alarm, wenn sich die Dynamik signifikant von zufälligen Schwankungen abhebt.
Symmetrische Akkumulation positiver und negativer Schocks
López de Prado implementiert den CUSUM-Filter in einer symmetrischen Zwei-Wege-Variante. Hierbei laufen zwei getrennte Akkumulatoren parallel: Einer für Aufwärtsbewegungen (St+) und einer für Abwärtsbewegungen (St–):
In diesen Gleichungen steht rt für die logarithmische oder prozentuale Rendite zum Zeitpunkt t. Durch die Maximum- beziehungsweise Minimumfunktion werden gegenläufige Tendenzen sofort abgeschnitten: Kehrt der Kurs um, fällt der Akkumulator sofort wieder auf die Nulllinie zurück, anstatt Fehlsignale aufzubauen.
Dynamische Schwellenwert-Kalibrierung über Volatilität
Ein Sampling-Ereignis wird registriert, sobald einer der beiden Akkumulatoren die definierte Schwelle ht durchbricht:
Sobald dieser Schwellenwert erreicht ist, wird der entsprechende Akkumulator wieder auf null zurückgesetzt und der Zeitstempel τ wird als aktiver Trainingspunkt gespeichert. Da eine starre Schwelle in wechselnden Marktregimes versagt, skaliert man ht dynamisch mit einer exponentiell geglätteten Standardabweichung (lokale Volatilität):
Hierbei fungiert c als frei wählbarer Sensitivitätsfaktor. In volatilen Phasen weitet sich die Schwelle auf, während sie sich in ruhigen Phasen zusammenzieht.
CUSUM-Simulator
Interaktiver Simulator: CUSUM-Filter & Ereignisbasierte Drift-Akkumulation
Verändere den Volatilitäts-Schwellenwert (h), um in Echtzeit zu beobachten, wie der CUSUM-Filter verrauschte Kurszeitreihen ereignisbasiert abtastet und signifikante Marktimpulse von unproduktiven Seitwärtsphasen trennt.
CUSUM Event-Sampler: Symmetrische Drift-Akkumulation
Praxis-Intuition: Warum die Stechuhr im Orderbuch versagt
Die Druckventil-Analogie: Warum Energie statt Zeit gemessen werden muss
Betrachte den Unterschied zwischen traditionellen Zeitkerzen und dem CUSUM-Filter wie das Sicherheitsventil an einem industriellen Dampfkessel:
- Die starre Zeitschaltuhr (Time-Bars): Ein Ventil öffnet stur alle 15 Minuten für zwei Sekunden. Nachts bei abgeschaltetem Brenner entweicht nutzlos Luft, obwohl überhaupt kein Druck vorhanden ist. Am Nachmittag bei voller Hitze baut sich innerhalb von drei Minuten ein kritischer Überdruck auf: Die Zeitschaltuhr wartet jedoch stur auf ihren Takt und der Kessel explodiert.
- Das federbelastete CUSUM-Ventil (Event-Sampling): Das Ventil öffnet genau dann, wenn der kumulierte Dampfdruck die Federkraft der Barriere (h) bricht. In ruhigen Phasen bleibt das Ventil stundenlang geschlossen und spart Energie. Entsteht plötzlicher Überdruck, löst das System in Sekundenschnelle aus, baut den Druck ab (State-Reset auf null) und beginnt sofort mit der nächsten Messung.
Das Sampling-Dilemma: Warum Machine Learning an Rauschphasen erstickt
Genau diesem Problem stehen Machine-Learning-Algorithmen an den Finanzmärkten gegenüber: Wer ein Modell mit sturen 5-Minuten- oder Stundenkerzen trainiert, zwingt es dazu, Millionen bedeutungslose Seitwärtskerzen zu analysieren. Das Modell lernt auf reinem Rauschen und bildet instabile Scheinkorrelationen aus.
Der Ausweg durch den CUSUM-Filter:
Der Filter trennt Rauschen von signifikanten Impulsen. Erst wenn kumulierte Kursabweichungen statistisch signifikant von einer Random-Walk-Schwankung abweichen, triggert der Filter ein Event. Nur an diesen diskreten Zeitpunkten wird nachgelagert die Triple-Barrier-Methode aufgespannt. Das Modell lernt ausschließlich auf Datenpunkten mit hoher Informationsdichte, reduziert die Fehlerquote drastisch und eliminiert überlappende, hochgradig autokorrelierte Beobachtungen
Python-Implementierung: Symmetrischer CUSUM-Filter nach López de Prado
Die folgende Referenz-Implementierung in reinem Pandas und NumPy transformiert eine kontinuierliche Kurszeitreihe über die symmetrische Zwei-Wege-CUSUM-Akkumulation in diskrete Event-Zeitstempel nach Marcos López de Prado (2018)
import numpy as np
import pandas as pd
def get_cusum_events(price_series: pd.Series, threshold_h: float) -> pd.DatetimeIndex:
"""
Symmetrischer Zwei-Wege CUSUM-Filter nach Marcos López de Prado (2018).
Akkumuliert logarithmische Renditen und setzt den State bei Schwellenbruch auf 0 zurück.
"""
events = []
s_pos = 0.0
s_neg = 0.0
diff = np.log(price_series).diff().dropna()
timestamps = diff.index
values = diff.to_numpy()
for i in range(len(values)):
r = values[i]
s_pos = max(0.0, s_pos + r)
s_neg = min(0.0, s_neg + r)
if s_pos >= threshold_h:
s_pos = 0.0
events.append(timestamps[i])
elif s_neg <= -threshold_h:
s_neg = 0.0
events.append(timestamps[i])
return pd.DatetimeIndex(events)
Einsatz am Kapitalmarkt: Filter-Vorstufe für die Triple-Barrier-Methode
In professionellen Quant-Trading-Architekturen übernimmt der CUSUM-Filter eine fundamentale Selektionsrolle:
- Perfekte Symbiose mit der Triple-Barrier-Methode: Würde man um jede einzelne Kerze drei Barrieren legen, entstünden Zehntausende überlappende, hochgradig korrelierte Beobachtungen. Der CUSUM-Filter fungiert als vorgeschalteter Selektionsfilter: Nur an den Zeitstempeln τ, die der CUSUM-Filter identifiziert, wird eine Triple-Barrier-Struktur initiiert.
- Reduktion von Serial Correlation: Indem insignifikante Zwischenbewegungen ignoriert werden, weisen die resultierenden Beobachtungen eine deutlich geringere Autokorrelation auf. Die statistischen IID-Eigenschaften der Stichprobe verbessern sich erheblich.
- Regime-Shift-Detektion: Der Filter warnt Algorithmen frühzeitig vor abrupten Volatilitätsausbrüchen und Liquiditätsabflüssen, sodass Risikolimits noch vor Vollendung klassischer Zeitkerzen angepasst werden können.
Methodische Grenzen und Fallstricke
Bei der praktischen Implementierung müssen quantitative Entwickler folgende Eigenheiten beachten:
- Sensitivität der Schwellenkalibrierung: Wird der Multiplikator c zu klein gewählt, verkommt der Filter zu einer bloßen Rauschquelle mit zu vielen Events. Ein zu hoher Wert führt dazu, dass wichtige Marktbewegungen zu spät oder gar nicht registriert werden.
- Asymmetrische Marktregimes: In starken säkularen Bullenmärkten mit stetigem Aufwärtsdrift lösen positive Schocks kontinuierlich Events aus, während Abwärts-Akkumulatoren kaum aktiv werden. Die Schätzung erfordert oft eine Drift-Korrektur.
- Latenz bei diskreten Kursdaten: Erfolgt die Berechnung auf groben Intervallen (wie Tagesdaten), kann ein einzelner Tag die Schwelle massiv überschießen (Overshoot), wodurch der genaue Auslösezeitpunkt unpräzise wird.
Häufig gestellte Fragen zum CUSUM-Filter
Feste Zeitintervalle erfassen Marktphasen ohne Bewegung überproportional oft und ignorieren Hochfrequenz-Phasen mit vielen Informationen. Der CUSUM-Filter tastet Kurse nur ab, wenn tatsächlich statistisch relevante Kursveränderungen stattfinden.
Der CUSUM-Filter wählt aus, an welchen Zeitpunkten ein Trade überhaupt modelliert werden soll. An jedem vom CUSUM-Filter detektierten Event wird anschließend die Triple-Barrier-Methode aufgespannt, um das eigentliche Label zu ermitteln[cite: 1].
Sobald der Schwellenwert überschritten wird, wird ein Signal registriert und der Akkumulator auf null zurückgesetzt. Die kumulative Aufsummierung beginnt für das nächste Intervall von vorne.
In den meisten quantitativen ML-Anwendungen wird c zwischen 0,5 und 1,0 der lokalen täglichen Volatilität gewählt. Dies stellt sicher, dass typisches Grundrauschen ignoriert wird, signifikante Schwankungen aber verlässlich erfasst werden.