Skip to content

0054 replace static cusum filter with adaptive event engine

ADR-54 — Replace Static CUSUM Filter with Adaptive Event Engine

Statut : Proposé (issue #488, 2026-04-10)

Contexte : L'ablation CUSUM (Phase 2.9d) a montré que le CUSUM statique (H=3.0) bloque ~95% des candles avant l'inférence. Le désactiver produit ×10-17 raw_buy et ×9-13 trades, mais avec des résultats suspectement élevés (Sortino 10+, 190 trades). Relâcher le seuil (H=5.0) ne change rien. Le CUSUM mélange deux responsabilités : event sampling (utile) et alpha suppression (destructeur).

Décision : Le CUSUM statique hard filter est remplacé par un Adaptive Event Engine qui préserve le sampling intelligent tout en réduisant la suppression d'alpha.

Design : - Threshold adaptatif : threshold = k * rolling_volatility * regime_multiplier au lieu de threshold fixe - Hybrid event eligibility : event = cusum_event OR periodic_fallback OR high_confidence_bypass - Density guardrails : min/max events par fenêtre pour éviter starvation ET overfiring - Regime-aware : sensibilité ajustée par régime (RANGE_CALM = haute, RANGE_VOLATILE = basse) - Observable : événement adaptive_event_stats avec breakdown par source (cusum/periodic/high_conf)

Invariants : - Le CUSUM ne DOIT PLUS être un hard gate binaire (event → inférence, non-event → HOLD forcé) - L'event engine DOIT supporter au minimum 2 sources d'événements (CUSUM + fallback) - Les density guardrails DOIVENT être actifs : min_events_per_window ET max_events_per_window - Toute modification du sampling DOIT être validée avec coûts réalistes (fees + slippage) - Les résultats CUSUM OFF ne sont PAS une baseline valide sans vérification des coûts - L'event engine DOIT être observable (ADR-32/33 : événement adaptive_event_stats)

Plan de migration : - Phase 2.9d-bis : valider les coûts réalistes sur les résultats CUSUM OFF - Phase 2.10 : implémenter le threshold adaptatif (rolling volatility) - Phase 2.11 : ajouter hybrid eligibility (periodic + high-conf bypass) - Phase 2.12 : density guardrails + validation multi-fold

Alternatives rejetées : - Garder CUSUM statique : trop restrictif, supprime l'alpha (prouvé) - Désactiver CUSUM : résultats probablement inflés, risque d'overtrading - Ne tuner que le modèle/theta : insuffisant, le goulot est l'event sampling

Fichiers concernés : src/backtest/filters/cvntrade_cusum_filter.py, src/commun/pipeline/cusum_filter_api.py, src/backtest/cvntrade_backtest_engine.py