Lab

Lab · segmentation de régime

Segmentation de régime par Markov caché de la microstructure crypto

Un HMM gaussien sur des features (logret, vol, trend), avec le nombre d'états K sélectionné par BIC, produisant des régimes persistants et interprétables pour le risque et le sizing.

Les mathématiques

Un modèle de Markov caché factorise une séquence d'observations de longueur T x1:T à travers une chaîne de Markov latente z1:T à K états. La densité jointe est

Pour des features continues, nous laissons chaque émission être gaussienne : . Les paramètres θ = (π, A, {μk, Σk}) sont estimés par Baum–Welch (EM appliqué aux HMM). L'étape E est la récursion forward-backward

Le postérieur lissé γt(k) ∝ αt(k) βt(k) est ce que nous livrons aux règles de sizing en aval. C'est une probabilité, non un label dur, et son entropie par ligne est un score naturel de confiance de régime.

Choisir K avec le BIC

Avec des features en d dimensions, un HMM gaussien à K états avec covariances complètes a p = K − 1 + K(K−1) + Kd + Kd(d+1)/2 paramètres libres. Le critère d'information bayésien

arbitre entre l'ajustement en échantillon et la complexité au taux log n. Nous balayons K = 2, 3, 4,…, choisissons K* = arg minK BIC(K). Sur LTC/USDT 30 minutes (n = 270 171 barres ; d = 3 features) le balayage est sans ambiguïté : le BIC chute de 1,633M à K = 2 à 1,366M à K = 3 puis à 1,251M à K = 4. K = 4 l'emporte sur chaque actif que nous avons essayé. Le même graphique cross-asset de BIC apparaît ci-dessous.

Persistance et temps de séjour

La matrice de transition A a des probabilités de boucle propre pkk. Le nombre attendu de barres passées dans le régime k avant que la chaîne ne transite est la moyenne géométrique

Ajusté sur LTC 30m, nous mesurons des probabilités de séjour (0,987, 0,970, 0,969, 0,981), c'est-à-dire des temps de séjour τ ≈ (76, 34, 32, 52) barres, ce qui sur une horloge de 30 minutes signifie que les régimes durent de l'ordre de 16–38 heures. Ce ne sont pas des artefacts d'une segmentation clignotante ; ils sont macroscopiquement stables.

Exemple détaillé

Vecteur de features par barre xt = (logrett, volt, trendt), où logret est le log-rendement de la barre, vol est un écart-type réalisé glissant, et trend est une pente lissée. Ajuster K = 4 sur LTC 30m produit quatre régimes dont les moyennes standardisées sont nettement séparées :

  • R1, drift-down (32 % des barres) : z de vol négatif, trend proche de zéro. Le régime de fond par défaut.
  • R2, trend-up (24 %) : trend moyen ≈ +0,58 σ. Drift positif soutenu, vol modérée.
  • R3, trend-down (25 %) : trend moyen ≈ −0,60 σ. Miroir de R2.
  • R4, haute vol (20 %) : vol moyenne ≈ +1,48 σ, trend proche de zéro. Le régime de dispersion.

La démo interactive ci-dessous ajuste un modèle de mélange gaussien en direct pour K ∈ {2, …, 6} sur une série de prix synthétique et trace BIC(K), le minimum est surligné. La bande en dessous colore le chemin de prix par l'état inféré au K choisi.

Demo: Gaussian-mixture BIC sweep & regime strip

Synthetic log-returns with three planted regimes. EM-fit a K-component mixture for K ∈ {2,…,6}; pick K by BIC; colour the price by MAP regime.

K (states)3
seed=7
K* by BIC
2
BIC at K*
-3602
log L̂ at K
1820
BIC at K
-3590
n bars
500
planted K
3
BIC = −2·log L̂ + p(K)·log n, with p(K) = (K−1) + 2K. Lower is better. The argmin (highlighted amber) is the BIC-preferred mixture.
-3605-3587-3568-3550-3532K=2-3602K=3-3590K=4-3572K=5-3553K=6-3535BIC(K), lower is better-0.070.370.80cumulative log-price coloured by MAP regime (K = 3)t = 0t = 500

BIC selects K* = 2 on this synthetic series (planted K = 3). The mixture conflates the persistence structure of an HMM into pure distributional separation, so on shorter samples it can prefer K = 2 or K = 4, the production HMM uses the full transition matrix and is better calibrated. Reseed to explore that variance.

Figures

Fig. 1:BIC(K) sur dix paires crypto de 30 minutes. Sur chaque actif la courbe est monotone décroissante jusqu'à K = 4 et le gain marginal se réduit nettement ensuite, le BIC sélectionne K = 4 universellement.
Fig. 2:Prix de LTC/USDT 30m coloré par le régime inféré sous le HMM à K = 4. De longues plages monochromatiques reflètent les hautes probabilités de séjour (0,97–0,99) et des temps de séjour de 32–76 barres.
Fig. 3:Le même ajustement de K = 4 sur BTC/USDT 30m. La structure à quatre états se transfère entre actifs, trend-up, trend-down, drift et un régime distinct de haute vol sont récupérés sans aucun réajustement.
Fig. 4:Matrice de transition estimée A sur LTC 30m. La dominance diagonale, chaque p_kk au-dessus de 0,97, est ce qui rend les régimes utiles : les estimations d'état sont assez stables pour conditionner le risque dessus.
Fig. 5:Vérification sur données synthétiques avec trois régimes connus. L'EM récupère la séquence d'états plantée avec ≥98 % de précision par barre ; le BIC identifie correctement K* = 3 ici.

Pourquoi cela compte pour les stratégies systématiques

La plupart des évaluations de stratégie moyennent la performance sur un unique échantillon mixte et reportent un seul Sharpe. Conditionner sur zt partitionne cet échantillon par régime et expose la structure que la moyenne cache : une stratégie qui est à +1,5 de Sharpe en trend-up et −0,8 de Sharpe en haute vol n'est pas le même objet qu'une stratégie qui est à +0,3 dans chaque régime, même si les deux ont le même Sharpe agrégé. Le HMM nous donne la partition dont nous avons besoin pour faire ces affirmations quantitativement, et, parce que nous utilisons le postérieur lissé, pour pondérer les barres par la probabilité d'appartenance au régime plutôt que de seuiller sur un label dur.

Le même postérieur alimente le sizer de position : ajustez l'exposition par P(zt ∈ favorable | x1:t) calculé dans le passage causal forward (filtrage, non lissage, pour usage en direct). Quand la chaîne est confiante nous nous positionnons davantage ; quand l'entropie bondit près d'une transition nous réduisons le risque. La persistance que nous mesurons (τ ≈ 16–38 h) est l'échelle de temps qui rend ce type de sizing conditionnel économiquement viable sur des données de 30 minutes.

Reproductibilité

DaruFinance / strategy-regime

Python · implémentation de référence open-source

Invocation minimale

import numpy as np
from strategy_regime import fit_hmm, bic_sweep, posterior

# X: T x d feature matrix (logret, vol, trend) per bar
sweep = bic_sweep(X, K_grid=[2, 3, 4, 5, 6])
K_star = min(sweep, key=lambda r: r["bic"])["K"]

model = fit_hmm(X, n_states=K_star, n_iter=200, seed=0)
gamma = posterior(model, X)         # T x K smoothed P(z_t | x_{1:T})
states = gamma.argmax(axis=1)        # MAP regime per bar
dwell  = 1.0 / (1.0 - np.diag(model.transmat_))   # expected dwell per regime

Références

  1. [1]Hamilton, J. D. (1989). A new approach to the economic analysis of nonstationary time series and the business cycle. Econometrica 57(2), 357–384.
  2. [2]Rabiner, L. R. (1989). A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of the IEEE 77(2), 257–286.
  3. [3]Schwarz, G. (1978). Estimating the dimension of a model. Annals of Statistics 6(2), 461–464.