Qu'est-ce que la validation walk-forward ? 104 paires stratégie-ticker testées — seulement 54% survivent
La validation walk-forward sépare le fluke in-sample de l'edge réel. 104 paires (stratégie, ticker) testées sur l'univers QA — 56 ROBUST, 20 STABLE, 18 LUMPY, 10 sans trades. Voici la procédure, les verdicts, et pourquoi la plupart des backtests retail échouent silencieusement à cette barre.
L'histoire standard du backtest va comme suit. Choisissez une stratégie. Choisissez un ticker. Tournez-la sur les deux dernières années de données. Additionnez le P&L. Reportez un nombre. Si le nombre est positif, revendiquez de l'edge. Optionnellement, partagez un chart sur Twitter.
L'histoire est à moitié vraie. Un backtest positif est une condition nécessaire pour l'edge. Elle est loin d'être suffisante. Une stratégie peut produire une belle courbe d'equity in-sample et rester un curve-fit — un fit coïncidentiel au bruit dans la fenêtre historique spécifique, avec zéro pouvoir prédictif sur les données que la stratégie n'a pas vues. La façon de faire la différence c'est la validation walk-forward : re-tournez la stratégie sur des fenêtres futures disjointes que l'optimisation n'a jamais touchées et voyez si l'edge survit.
Nous venons de tourner un sweep sur la librairie tradfi-stocks de QA — chaque stratégie de la librairie × chaque ticker de l'univers thématique. 104 paires (stratégie, ticker) sur 2 ans de données horaires, splittées en deux fenêtres walk-forward d'1 an. Les verdicts : 56 ROBUST (53,8%), 20 STABLE (19,2%), 18 LUMPY (17,3%), 10 sans trades. Cette part ROBUST est haute par standard industrie — la plupart des univers backtest publics survivent à bas double chiffres ou pire — et la haute part est en elle-même un signal que l'univers est réel, pas que la validation est faible. Ce papier détaille la procédure, les quatre verdicts (avec exemples concrets du sweep live), et pourquoi la plupart des backtests retail échouent silencieusement à cette barre.
Le TL;DR. Un backtest walk-forward fit les paramètres de la stratégie sur une fenêtre in-sample, les fige, puis mesure la performance sur une fenêtre out-of-sample postérieure que l'optimisation n'a jamais vue. Répétez sur des fenêtres glissantes. Une stratégie qui imprime des nombres positifs sur plusieurs fenêtres out-of-sample a un edge réel. Une stratégie qui imprime super in-sample et zéro out-of-sample est un curve-fit. Les quatre verdicts QA — ROBUST, STABLE, LUMPY, NOTRADES — compressent ce jugement en un seul label.
Ce qu'est vraiment la validation walk-forward
La procédure, en cinq étapes :
- Prenez votre fenêtre historique complète. Pour le sweep tradfi-stocks QA : 2 ans de bougies 1 heure par ticker, finissant récemment.
- Découpez-la en chunks. Deux chunks d'un an chacun est le défaut QA (
wf_days: 365). Certains setups utilisent des slices glissants plus courts — même logique. - Entraînez (ou "fittez") sur le chunk 1. Trouvez le set de paramètres qui maximise la fonction objectif que vous optimisez — typiquement P&L ajusté du risque. Figez ces paramètres.
- Testez sur le chunk 2. Appliquez les paramètres figés à des données que la stratégie n'a jamais vues. Mesurez le résultat.
- Répétez. Optionnellement, entraînez sur chunks 1+2, testez sur chunk 3. Ou faites rouler une fenêtre bougie-par-bougie (la variante plus coûteuse). Le point est le même : séparer les données utilisées pour choisir la stratégie des données utilisées pour juger la stratégie.
Tout l'intérêt est dans l'étape 4 — la stratégie est notée sur des données qu'elle n'a pas eu le droit de regarder. Toute stratégie qui fait bien à l'étape 3 mais mal à l'étape 4 est curve-fit. Toute stratégie qui fait bien dans les deux a, au minimum, démontré que peu importe le pattern qu'elle exploite était présent dans deux slices indépendants du passé — qui est la preuve empirique la plus propre disponible que le pattern pourrait persister dans le futur.
Pourquoi ça compte — le problème du curve-fit
Les backtests sans walk-forward sont incroyablement bons pour mentir. Le mécanisme est simple : toute stratégie avec même un petit nombre de paramètres ajustables peut être fittée au bruit dans une fenêtre historique spécifique tellement précisément qu'elle produit une belle courbe d'equity. La stratégie n'a rien appris de généralisable ; elle a appris la séquence spécifique d'overnight gaps et de rebalances ETF qui se sont produits dans cette fenêtre. Quand vous la tournez sur une fenêtre différente, le bruit est différent, et la stratégie revient à environ zéro edge (moins les coûts de transaction).
La signature du curve-fitting c'est la sensibilité aux paramètres. Une stratégie vraiment robuste produit du P&L similaire sur un range de réglages de paramètres similaires — son edge vient de la structure de marché sous-jacente, pas des réglages spécifiques des boutons. Une stratégie curve-fit produit un pic de P&L net aux paramètres optimaux et s'effondre rapidement en performance à mesure que vous vous éloignez d'eux. Le walk-forward attrape ça parce que les données de la période test ont une structure de bruit différente de la période d'entraînement ; le pic net ne réapparaît pas au même point de paramètres.
L'autre chose que le walk-forward attrape c'est le changement de régime. Une stratégie qui marchait en 2023 dans un régime high-vol pourrait s'effondrer dans un régime low-vol 2024. Les backtests in-sample moyennent sur les régimes et cachent l'effondrement. Le walk-forward montre l'effondrement fenêtre par fenêtre.
Les quatre verdicts QA — avec exemples live
Le classifieur du sweep QA compresse chaque paire (stratégie, ticker) en un des quatre verdicts. Concrètement :
ROBUST — les deux fenêtres walk-forward positives et significatives. Aucune fenêtre ne fait tout le travail ; l'edge est distribué.
Exemple : $CIFR sur regression_channel_mr. P&L 2 ans complet 302 K $, splitté en WF1 103 K $, WF2 98 K $. Les deux fenêtres sont presque symétriques — la moitié de l'edge est venue de la première année, la moitié de la seconde. C'est aussi propre qu'un résultat ROBUST peut être dans le sweep et un signal empirique fort que la structure mean-reversion CIFR sous-jacente est persistante.
STABLE — les deux fenêtres positives, mais une porte plus que l'autre.
Exemple : $CIFR sur ema_crossover (même ticker, stratégie différente). P&L 2 ans complet 112 K $, splitté en WF1 69 K $, WF2 31 K $. Les deux moitiés marchent ; la première a fait environ 2× la seconde. C'est STABLE — edge réel, mais avec variation de timing qu'un système déployé doit dimensionner autour.
LUMPY — une fenêtre fait essentiellement tout le travail. L'autre est plate ou négative.
Exemple : $NET sur ema_crossover. P&L 2 ans complet 29 352 $, splitté en WF1 0 $, WF2 29 352 $. Le backtest in-sample-only paraît bien. Le walk-forward révèle que tout le P&L vient d'une seule année — l'autre année a produit zéro trade ou zéro résultat net. Déployer ça en production c'est un coin-flip sur si l'année prochaine ressemble à 2024 ou 2025.
Même pattern sur $VRT sur regression_channel_mr : complet 54 K $, WF1 -68 $, WF2 47 K $. Le backtest naïf reporte 54 K $ d'edge. Le walk-forward reporte qu'une fenêtre était essentiellement plate (avec une petite perte) et l'autre fenêtre a tout porté.
NOTRADES — la stratégie n'a pas tiré assez souvent dans une ou les deux fenêtres pour être statistiquement significative.
Exemple : 10 paires sur 104 ont pris zéro trade dans au moins une fenêtre sur le sweep complet. Ça arrive quand les conditions d'entrée d'une stratégie sont trop restrictives relativement au comportement du ticker — la barre était mise d'une façon que les données n'ont jamais rencontrée. Pas un échec de la stratégie en soi, mais pas une démonstration empirique d'edge non plus.
Le cas CIFR est le point structurel du papier en une seule action. Même ticker, deux stratégies, deux verdicts différents — ROBUST sur canal-de-régression mean reversion, STABLE sur ema crossover. Ce n'est pas une contradiction. Ça dit : ce nom a une vraie structure mean-revertante qui survit aux deux fenêtres walk-forward, et un signal trend-following plus faible qui marche dans les deux fenêtres mais inégalement. Les deux classifications sont réelles ; déployer les deux comme sleeve combinée diversifierait sur deux edges réels mais différents dans le même ticker.
Le sweep complet — à quoi ressemblent 104 paires en agrégat
| Verdict | Compte | Part | | --- | --- | --- | | ROBUST | 56 | 53,8% | | STABLE | 20 | 19,2% | | LUMPY | 18 | 17,3% | | NOTRADES | 10 | 9,6% | | Total paires | 104 | — |
53,8% ROBUST paraît haut. C'est haut. Les raisons pour lesquelles ça atterrit haut sur cet univers spécifique :
- L'univers a été pré-sélectionné pour la structure thématique. Les 35 tickers du sweep ne sont pas des noms S&P aléatoires — ce sont l'univers de bulle thématique que QA valide déjà via corrélation résidualisée. Ce sont des noms qui tradent vraiment comme clusters et exhibent le type de volatilité structurée qu'une classe de stratégie systématique peut extraire de l'edge.
- La librairie de stratégies est petite et curée. La librairie a environ 10 stratégies, pas 1 000. Le problème de base de multi-testing (plus vous testez de stratégies, plus vous verrez de passes spurieuses) est borné.
- Le classifieur est juste, pas généreux. Une classification ROBUST exige les deux fenêtres positives et significativement dimensionnées. LUMPY attrape le mode d'échec "une fenêtre a tout fait" que les backtests retail habillent en edge.
Sur un univers moins curé — un scrape aléatoire de noms S&P 500 sans théorie thématique derrière — tourner la même librairie produirait une part ROBUST beaucoup plus basse. Le classifieur est le même ; la qualité des données est différente. C'est le contenu empirique de "la structure thématique compte".
Pourquoi la plupart des backtests retail échouent silencieusement à cette barre
Trois patterns communs que les backtests retail utilisent, classés par à quel point ils échouent :
1. In-sample-only. "J'ai backtesté sur les deux dernières années et ça a rendu 40%." Pas de walk-forward. Pas de split out-of-sample. La stratégie a été tunée en paramètres sur les mêmes données sur lesquelles elle est jugée. C'est le pattern dominant sur Twitter et les vidéos YouTube de backtest. Ça vous dit essentiellement rien sur la performance future.
2. Train/test split (single fold). "J'ai entraîné sur 2022-2023 et testé sur 2024." Mieux que in-sample-only — mais vous n'obtenez qu'un seul point de donnée out-of-sample. Si 2024 se trouve être un régime qui correspond à l'hypothèse structurelle de la stratégie, vous obtiendrez un nombre positif et conclurez que la stratégie marche. Le walk-forward avec plusieurs fenêtres attrape le cas où la seule fenêtre test était un tirage chanceux.
3. Walk-forward avec classification de verdict. L'approche QA. Plusieurs fenêtres OOS, labels de verdict structurés, aucune fenêtre seule autorisée à porter tout le résultat. C'est la barre que les backtests retail esquivent systématiquement parce que la plupart des stratégies ne passent pas.
Plus haut dans cette liste un backtest s'assoit, plus son résultat est une propriété du bruit historique plutôt que de la structure de marché sous-jacente. Au moment où vous êtes au niveau 3, vous avez des preuves empiriques qui généraliseraient, conditionnellement à l'hypothèse que la structure de marché sous-jacente persiste.
Limites honnêtes — ce que le walk-forward ne peut toujours pas vous dire
Le walk-forward est la meilleure défense largement disponible contre le curve-fitting. Ce n'est pas une garantie. Trois modes d'échec lui survivent :
Changement de régime au-delà de la fenêtre test. Les deux fenêtres walk-forward pourraient tomber dans le même régime de marché global. Une stratégie qui gagne ROBUST sur données 2024-2026 a été testée sur une fenêtre dominée par le momentum thématique du supercycle AI. Si 2027 est un régime entièrement différent — disons, un grind low-vol pluri-annuel — l'hypothèse structurelle de la stratégie pourrait échouer de façons qu'aucune fenêtre test n'a révélées. Le WF ne peut valider que contre des régimes qui existent dans les données.
Biais de sélection au niveau de l'univers. Si vous n'avez inclus que des tickers qui ont déjà fait bien sur la fenêtre complète dans votre univers, votre part ROBUST sera gonflée pour des raisons sans rapport avec votre stratégie. C'est la version "survie" du curve-fitting et elle vit en dehors du check WF per-ticker. Mitigation : pré-définir l'univers depuis des fondements théoriques (appartenance à un thème, secteur, market cap) plutôt que de la performance historique.
Inflation de multi-testing. Si vous sweepez assez de stratégies, certaines passeront le walk-forward par pur hasard — plus vous testez de combinaisons (stratégie, ticker, paramètres), plus le nombre attendu de faux positifs est haut. Mitigation : une librairie de stratégies petite et curée ; justification a priori explicite pour chaque stratégie ; et traiter un seul résultat ROBUST avec scepticisme (un résultat est plus crédible quand des stratégies sœurs dans la même classe classent aussi bien, comme les sweeps Fibonacci et mean reversion le démontrent sur des listes de noms qui se chevauchent).
Le cadrage honnête : le walk-forward réduit dramatiquement le risque de curve-fit mais ne l'élimine pas. C'est le prix d'entrée pour prendre un backtest au sérieux, pas une garantie de returns futurs.
Comment QA applique ça en production
Chaque stratégie sur le bot QA tradfi-stocks est passée par validation walk-forward avant de voir du capital live. La classification nourrit deux décisions de production :
- Assignation de stratégie par ticker. Chaque ticker est assigné la stratégie avec le meilleur verdict WF sur ce nom. ROBUST est préférée ; STABLE est acceptable s'il n'existe pas de ROBUST ; LUMPY est exclu carrément.
- Sizing par ticker. Les positions ROBUST obtiennent sizing complet ; les positions STABLE obtiennent sizing partiel ; les positions LUMPY ne sont pas tradées du tout. Le verdict fait du risk management au niveau de l'univers.
Cette méthodologie apparaît dans les deux pièces antérieures de la série éducative QA :
- Le piece sur le retracement de Fibonacci reporte des métriques basket-level (PF 1,76, Sharpe 1,42, +23,7% sur 3 ans) — toutes post-WF. Le nombre "4 sur 5 fenêtres walk-forward profitables" dans ce piece est exactement la même procédure à l'échelle basket.
- Le piece sur la mean reversion reporte le compte 22-sur-35 ROBUST pour le canal de régression mean reversion. C'est le même sweep, même classifieur, résumé pour cette stratégie spécifiquement.
Les revendications empiriques des deux pièces antérieures sont en aval de la procédure décrite ici. Le check walk-forward est la partie de la méthodologie qui donne à ces nombres leur poids épistémique.
Pour la méthodologie plus large corrélation-vs-narratif qui décide quels tickers entrent dans l'univers en premier lieu, voir Pourquoi corrélation > narratif en investissement thématique.
Comment appliquer ça sur vos propres backtests
Si vous testez une stratégie vous-même :
- Splittez vos données en au moins deux fenêtres disjointes avant de fitter quoi que ce soit. Moitié / moitié est un bon point de départ. Walk-forward multi-fenêtres est mieux.
- Fittez sur la première fenêtre seulement. Quoi que vous optimisiez — seuil d'entrée, multiple de stop, longueur de lookback — fittez-le sur la première fenêtre et figez-le.
- Testez sur la seconde fenêtre sans re-fitter. C'est le résultat qui compte.
- Regardez les distributions de P&L des deux fenêtres, pas seulement leurs sommes. Une stratégie qui gagne son P&L OOS sur un seul gros trade est fragile de façons qu'une stratégie qui le gagne sur beaucoup de petits trades n'est pas.
- Soyez impitoyablement honnête sur les résultats LUMPY. Un backtest qui dépend d'une fenêtre de returns n'est pas une preuve validée d'edge. Soit révisez la stratégie soit acceptez qu'elle n'est pas déployable.
Pour exécution US-retail sur des stratégies qui survivent à cette barre, la qualité de données horaires d'IBKR et le support des actions fractionnaires sont le match le plus propre — voir /stack/ibkr. Les verdicts walk-forward live sur l'univers QA — et les alertes rule-based quand une stratégie ROBUST tire — font partie de /pro.
Ce qu'il faut surveiller
- Cadence de re-validation. Le sweep QA est re-tourné environ trimestriellement. Un ticker qui tombe de ROBUST à LUMPY entre les sweeps est l'indicateur avancé que la structure de marché sous-jacente pour ce nom a shifté.
- La part ROBUST dans le temps. Si la part baisse matériellement sur des sweeps consécutifs avec le même univers, le régime plus large a shifté d'une façon qui érode l'edge de plusieurs stratégies simultanément. C'est un signal de risque niveau-portefeuille, pas niveau-stratégie.
- Chevauchement entre stratégies. Quand un ticker classe ROBUST sous plusieurs stratégies (par ex. $AAOI sur à la fois
regression_channel_mretadaptive), la structure sous-jacente est exceptionnellement propre. Quand le chevauchement rétrécit, c'est un signal avancé de changement de régime sur ce nom. - Le compte NOTRADES. Une part NOTRADES qui grandit à règles d'entrée constantes signifie que le régime de volatilité de l'univers s'effondre — les stratégies qui ont besoin de volatilité pour tirer ne l'obtiennent pas. Ça précède habituellement un shift de régime plus large.
- Le nombre niveau-basket. Même avec WF fort per-ticker, le P&L niveau-basket peut échouer si les corrélations sur le basket convergent pendant un drawdown. Surveillez le Sharpe basket sur des sweeps consécutifs comme le signal agrégé primaire.
Données live sur le basket WF-validé : /stocks/cifr, /stocks/aaoi, /stocks/rklb — trois des 56 paires (stratégie, ticker) ROBUST surfacées sur ce sweep.
Contexte de bulle : /bubbles/photonics et les 8 autres clusters thématiques où la densité ROBUST est la plus haute.
Lecture adjacente : Qu'est-ce que le retracement de Fibonacci ? et Qu'est-ce que la mean reversion ? — les deux pièces reportent des nombres qui sont en aval de la procédure walk-forward décrite ici. Pour la méthodologie de construction d'univers, Pourquoi corrélation > narratif en investissement thématique.
QuantAbundancia est de la recherche éducative. Rien ici n'est un conseil en investissement. Voir /disclosures.
Related bubbles
Get the daily digest.
One email a day · alerts + bubble shifts + new research. Free during beta.
No spam. One email per day max. Telegram alerts coming with the paid tier.