Anti-overfitting · la discipline qui empêche l'auto-illusion
L'overfitting est la première cause de mort des systèmes trading. Cette page expose publiquement le protocole IS/OOS, la procédure walk-forward, les périodes invalidantes prévues, et trois cas réels où le système a échoué. Aucune justification sans la possibilité de l'invalidation.
« Si un système ne peut pas échouer dans le protocole, il échouera en production. »
1 · Découpage IS / OOS · jamais d'optimisation sur futur
In-Sample · IS
2024-Q1 → 2025-Q4 · 24 mois · paramétrage couches
Out-of-Sample · OOS
2026-Q1 · 3 mois · validation
Live shadow
2026-Q2 en cours · phase observable
Paramètres calibrés · seuils figés à la fin de la fenêtre
Aucun paramètre touché · uniquement mesure
Aucune action réelle · uniquement observation
Règles strictes du découpage
Aucun seuil n'est revu après gel · si une couche déçoit en OOS, on documente l'échec, on ne réajuste pas pour gagner.
Aucune feature ajoutée a posteriori sur la fenêtre IS · une feature nouvelle entraîne un nouveau découpage temporel.
Le ratio IS/OOS est 24:3 (8:1) · délibérément exigeant pour limiter la chance.
2 · Walk-forward · protocole roulant
Pour chaque couche dont la calibration nécessite une régression historique (notamment Régime et Memory), le protocole walk-forward est appliqué : on entraîne sur N mois, on teste sur M mois, puis on glisse la fenêtre.
Train 24-Q1 → 24-Q3
Test 24-Q4
—
—
—
—
—
Train 24-Q2 → 24-Q4
Test 25-Q1
—
—
—
—
—
Train 24-Q3 → 25-Q1
Test 25-Q2
—
—
—
—
—
Train 24-Q4 → 25-Q2
Test 25-Q3
—
—
—
—
—
Train 25-Q1 → 25-Q3
Test 25-Q4
Fold
Test
Expectancy
DD max
Stable ?
1
24-Q4
+0.019
−6.2 %
OUI
2
25-Q1
+0.024
−5.8 %
OUI
3
25-Q2
−0.004
−9.1 %
DÉGRADATION
4
25-Q3
+0.011
−7.4 %
RÉCUPÉRATION
5
25-Q4
+0.022
−4.9 %
OUI
Le fold 3 (25-Q2) montre une dégradation. Cette période correspondait à un range manipulé prolongé · la couche entropy était encore en V9, moins robuste. La V10 (intégrée depuis) explique partiellement la récupération en fold 4. Le détail de l'analyse est traité en case d'échec n°2 ci-dessous.
3 · Périodes invalidantes prévues
À J+30 (2026-06-19)
Écart vs Buy & Hold BTC < −5 % → couche à investiguer
% NO_TRADE > 99 % sans changement de régime → entropy probablement trop stricte
PnL évité cumulé < 0 → les refus coûtent plus qu'ils ne protègent
À J+60 (2026-07-19)
Variance du % NO_TRADE par régime > 0.15 → instabilité comportementale
Kill-switch jamais déclenché malgré DD > −8 % → seuil mal calibré
Memory : aucune similarity > 0.85 → l'index ne sert plus à rien
À J+90 (2026-08-18)
Aucun régime nouveau traversé → matrice multi-régimes inchangée
Écart vs DCA BTC < 0 → l'edge ne vaut pas le travail
Au moins 2 couches en statut "Hypothèse" → V21 obligatoire
À tout moment
DD > −12 % en shadow → audit complet immédiat
Régression silencieuse détectée (cohérence des décisions s'effondre) → pause système
Discordance entre snapshot du jour et fait observable → enquête forensic
4 · Trois cas réels où le système a échoué
Échec 01 · 2025-Q2 · le fold 3 du walk-forward
2025-04 → 2025-06
Range manipulé prolongé · entropy V9 saturée
L'entropy V9 utilisait uniquement wicks/body ratio. Quand le marché manipulé adopte un comportement plus "lisse" (corps allongés mais cohérence cross-asset cassée), V9 ne le voit pas. Le système a pris des trades pendant un range vicieux. Expectancy : −0.004 sur le trimestre, DD −9.1 %.
Correctif apporté en V10
Ajout de cross_asset_coherence comme second axe d'évaluation. Le seuil entropy combine désormais les deux signaux. Le fold 4 (25-Q3) a confirmé la récupération · expectancy revenue à +0.011.
Échec 02 · 2025-09-12 · 4 stops consécutifs en 6h
12 sept 2025
Sizing fixe inadapté à un pic de volatilité
Lors d'une cascade de liquidations majeures, le risk engine V6 utilisait encore un sizing fixe par défaut (5 % du capital). Quatre stops consécutifs ont liquidé 18 % du capital simulé en 6 heures. Le système n'a pas vu venir l'amplitude de la vol.
Correctif apporté en V7
Refonte complète du risk engine : sizing fonction de vol_30d, drawdown courant, corrélation portefeuille. Invariant explicite : "réduire avant bloquer". Le module sizing fixe a été retiré et conservé en archive pour traçabilité.
Échec 03 · 2024-12-08 · faux signal régime
8 déc 2024
Classification régime trompée par une journée atypique
La couche régime V5 classait sur fenêtre 24h. Un single-day pump anormal (+22 % en 6h sur BTC) a déclenché un basculement temporaire en "trend_haussier" avec confidence 0.71. Plusieurs setups alts ont passé les filtres avant que le retracement du lendemain n'invalide la classification.
Correctif apporté en V6
Confidence calculée sur fenêtre 72h minimum. Ajout d'une exigence de cohérence cross-asset pour valider un changement de régime. Coût : la classification réagit plus lentement (~6h de retard) mais est nettement plus stable.
5 · Ce que cette discipline n'élimine pas
Biais de sélection des features
Les features mesurées sont celles qu'on a pensé à mesurer. Une feature critique non considérée reste invisible jusqu'à ce qu'un événement la révèle.
Dérive de distribution
Les paramètres calibrés sur 2024-2025 peuvent devenir obsolètes en 2026-2027 si le marché change structurellement. La validation longitudinale le détectera, pas le walk-forward historique.
Survivorship bias des paires
Les 26 paires testées sont les paires liquides aujourd'hui. Les tokens morts ou délisted n'apparaissent pas dans l'historique. C'est une limite structurelle des données.
Risque de l'observateur
Le simple fait de publier ces seuils peut, à long terme, modifier le comportement du marché autour des niveaux que nous observons. Improbable à notre échelle, pas impossible.