Hidden Markov Models in der Praxis: Regime-Detection ohne Overfitting.
Hidden Markov Models gelten als der elegante Weg, Marktregime zu identifizieren. In jedem zweiten Quant-Buch findet sich ein HMM-Kapitel, in jedem dritten Vortrag eine S&P-500-Grafik mit drei farbigen Regime-Bändern. Was selten dazugesagt wird: in der Live-Anwendung bringen HMMs oft kaum mehr als ein simpler Volatilitäts-Filter — und sie bergen Fallen, die einen sauber aussehenden Backtest zur Fiktion machen.
HMM-Mechanik in Kürze.
Ein HMM modelliert beobachtete Daten als Ausgabe einer ungeobachteten Zustands-Folge. Drei Komponenten:
- Transition-Matrix A: P(statet = j | statet-1 = i)
- Emission-Verteilung B: P(observationt | statet)
- Initial-Verteilung π: P(state0)
Drei klassische Probleme:
- Evaluation: gegeben Modell und Daten, wie wahrscheinlich ist die Beobachtungs-Sequenz? → Forward-Algorithm.
- Decoding: gegeben Modell und Daten, was war die wahrscheinlichste Zustands-Folge? → Viterbi-Algorithm.
- Learning: gegeben nur Daten, schätze A, B, π. → Baum-Welch (EM-Variante).
Für Trading-Anwendungen sind Forward-Backward (für State-Probabilities) und Viterbi (für harte State-Zuweisung) die operativen Algorithmen. Baum-Welch läuft im Training.
Gaussian vs. Discrete Emission HMM.
Zwei Hauptvarianten für Finanzanwendungen:
Gaussian HMM: jede Zustand emittiert Returns aus einer Normalverteilung mit zustands-spezifischem Mittelwert und Varianz. Klassische Wahl für Marktreturns. Schwäche: Returns sind nicht normalverteilt — fat tails werden unterschätzt, was zu instabilen State-Zuweisungen in Krisen führt.
Discrete HMM: Observations werden diskretisiert (z. B. Returns in Buckets), Emissions sind Multinomial. Robuster gegenüber Ausreißern, verliert aber Information. Funktioniert gut, wenn Sie ohnehin diskrete Features bauen (z. B. „Volatility-Tier 1–5“).
Gaussian Mixture HMM: Kompromiss — jeder Zustand emittiert aus einer Mischung von Gaussians. Fängt fat tails besser ab, hat aber mehr Parameter und neigt stärker zu Overfitting.
Anzahl Zustände wählen: BIC und AIC.
Die zentrale Frage: wie viele States? Die ehrliche Antwort: meistens 2 oder 3. Mehr ist in Trading-Daten selten statistisch gerechtfertigt.
Formal: Information-Criteria. BIC = −2·log-likelihood + k·log(n), wobei k die Parameteranzahl und n die Beobachtungszahl ist. AIC = −2·log-likelihood + 2·k. BIC bestraft Komplexität stärker → tendiert zu wenigeren States, was in Trading meist die richtige Wahl ist.
from hmmlearn.hmm import GaussianHMM
import numpy as np
returns = sp500.pct_change().dropna().values.reshape(-1, 1)
scores = {}
for n in [2, 3, 4, 5]:
model = GaussianHMM(n_components=n, covariance_type="full",
n_iter=1000, random_state=42)
model.fit(returns)
n_params = n*n + 2*n - 1 # transitions + means + vars
bic = -2 * model.score(returns) + n_params * np.log(len(returns))
scores[n] = bic
print(scores) # niedrigster BIC = bestes Modell
In meinen Tests auf S&P-Daten gewinnt fast immer n=2 oder n=3. n=5 sieht in der Log-Likelihood besser aus, wird aber von BIC für die zusätzlichen Parameter abgestraft — zu Recht, denn out-of-sample sind die zusätzlichen States nicht stabil.
Look-Ahead-Bias: der häufigste HMM-Fehler.
Der mit Abstand kritischste Punkt. Ein HMM, das auf die gesamte Historie gefittet wird, kennt die Zukunft. Wenn Sie dann „rückblickend“ feststellen, dass Regime 1 ein Bull-Markt war: ja, weil das Modell die ganze Sequenz gesehen hat und die States so allokiert hat, dass es passt.
Im echten Backtest müssen Sie das Modell rollend trainieren: bei jedem Trade-Zeitpunkt t nur Daten bis t verwenden. Das ist rechenintensiv, aber unverzichtbar. Zusätzlich: Online-Decoding mit Forward-Algorithm, nicht Viterbi auf der Gesamtsequenz — letzteres baut Konsistenz in Vergangenheits-States ein, die zur Live-Zeit noch nicht bekannt war.
Praktisch: trainieren Sie das HMM einmal pro Monat oder Quartal neu auf einem expandierenden oder rolling Fenster, und decodieren Sie online über Forward-Probabilities. Alles andere ist Selbstbetrug.
hmmlearn vs. eigene Implementation.
Für 95 % der Anwendungen reicht hmmlearn. Es ist gut getestet, hat einen
stabilen API, unterstützt Gaussian, GMM und Multinomial Emissions. Eigene Implementation
lohnt nur, wenn Sie nicht-standard Emissions brauchen (z. B. multivariate Student-t,
zustandsabhängige Autoregressive-Strukturen).
Für Multi-Asset-Setups schaue ich gelegentlich auf pomegranate, das auch
Bayesian HMM mit MCMC kann — interessant, wenn Sie posterior-Unsicherheit ernst nehmen
wollen. Für den produktiven Live-Einsatz aber: hmmlearn, einfach, gut gewartet.
Anwendung: Bull/Bear/Sideways auf S&P 500.
Klassische Anwendung: drei States auf täglichen S&P-Returns. Empirisch ergibt sich typischerweise:
- State A: μ ≈ +0.08 %, σ ≈ 0.6 % — Low-Vol-Bull.
- State B: μ ≈ +0.04 %, σ ≈ 1.1 % — normaler Markt.
- State C: μ ≈ −0.10 %, σ ≈ 2.5 % — High-Vol-Stress.
Auffällig: die States sind primär volatilitäts-getrieben, weniger direktional. Der „Bear-State“ ist eigentlich ein High-Vola-State, der tendenziell mit fallenden Märkten korreliert. Das ist eine wichtige Erkenntnis: wer HMM-Output als „Bull-Signal“ interpretiert, baut implizit einen Vola-Filter — und der geht einfacher.
Trading-Signal aus State-Probabilities.
Statt harter State-Zuweisung via Viterbi: nutzen Sie die posterior-Wahrscheinlichkeit jedes States. Ein typisches Setup:
- P(High-Vol-State) > 0.6 → Risk-Off: Allokation halbieren.
- P(High-Vol-State) > 0.8 → Cash.
- P(Low-Vol-Bull) > 0.7 → Voll-Allokation oder leichter Leverage.
Soft-Signale glätten Übergänge und reduzieren die Anzahl der Trigger-Flips. Im Live-Betrieb ist das wertvoller als jede zusätzliche State-Granularität.
Caveat: HMM-States sind oft volatilitäts-basiert.
Wenn Sie die State-Mittelwerte vs. State-Varianzen plotten, sehen Sie: die Unterscheidung zwischen States kommt primär aus σ, nicht aus μ. Das hat zwei Konsequenzen:
- Sie könnten denselben Filter mit einem simplen rolling-Volatilitäts-Quantil bauen — mit weniger Code, weniger Parametern, mehr Robustheit.
- HMM-Signale taugen besser für Risk-Management (Allokation hoch/runter) als für Direction (long/short).
HMM vs. einfache Vola-Filter: ein ehrlicher Vergleich.
Ich habe in mehreren Projekten denselben Equity-Curve-Smoothing-Effekt mit (a) HMM und (b) einem simplen Regime-Filter „60-Tage-Vol > 252-Tage-Median + 0.5σ" verglichen. Ergebnis: in der Mehrzahl der Fälle war der einfache Filter out-of-sample gleich gut oder besser. Bei deutlich geringerer Komplexität.
Der einzige Bereich, in dem HMMs systematisch gewinnen: wenn Sie mehrdimensionale Beobachtungen einbinden (Returns + VIX + Credit-Spreads + Term-Structure-Slope). Hier kann ein HMM Joint-Dynamiken kapturen, die ein eindimensionaler Vola-Filter verpasst. Aber das setzt voraus, dass die zusätzlichen Dimensionen sauberes, nicht-redundantes Signal tragen — was seltener der Fall ist, als man hofft.
Meine Praxis.
HMM setze ich in Kundenprojekten nur ein, wenn (a) einfache Regime-Filter nachweislich nicht ausreichen und (b) Mehrdimensionalität der Beobachtungen gerechtfertigt ist. Das ist eher die Ausnahme. Wo HMM ins System kommt, läuft es immer rollend trainiert, mit Forward-Probabilities als Soft-Signal, und nie als alleiniger Trade-Trigger, sondern als Allokations-Modulator.
Wer mit „HMM löst Regime-Detection“ startet, baut meist Komplexität auf, die er später nicht mehr kontrolliert. Starten Sie mit dem einfachen Filter. Bauen Sie HMM nur, wenn Sie konkret zeigen können, was es zusätzlich liefert.
Stand: Mai 2026, überarbeitet Oktober 2026. Angaben zu Produkten, Preisen, Gesetzen und Fristen können sich seitdem geändert haben; maßgeblich sind die aktuellen Angaben der Anbieter und Behörden.
Sie wollen Regime-Detection in Ihrem Setup richtig — ohne Overfitting? Unverbindlich anfragen — ich zeige Ihnen, was bei Ihren Daten wirklich trägt. Mehr zu meinem Angebot: Trading-Systeme entwickeln lassen.