In-sample, out-of-sample et walk-forward

Découpez l’historique avant de commencer. La période in-sample sert à concevoir et régler les règles ; la période out-of-sample est mise de côté et utilisée une seule fois, règles figées, pour voir si le résultat tient sur des données que le réglage n’a jamais vues. Un découpage courant est d’environ 70 % in-sample et 30 % out-of-sample, la période out-of-sample étant la plus récente. Si vous regardez le résultat out-of-sample, changez une règle et testez à nouveau, cette période est devenue in-sample elle aussi.

L’analyse walk-forward répète ce découpage sur une fenêtre glissante : régler sur quatre ans par exemple, tester les réglages retenus tels quels sur l’année suivante, avancer d’un an et recommencer. Mettre bout à bout les années de test donne un long historique out-of-sample produit comme vous traderiez réellement : en réajustant de temps en temps, toujours sur le passé. Certains praticiens comparent le résultat annualisé out-of-sample au résultat in-sample, un ratio appelé efficacité walk-forward, et se méfient d’un système qui conserve nettement moins de la moitié environ de sa performance in-sample ; voyez-y un repère approximatif, pas une loi.

Tournez votre téléphone pour lire l’image. Touchez pour fermer.

Six lignes de fenêtres glissantes sur les années 2016 à 2025 : dans chaque ligne, quatre années hachurées en gris (in-sample : on règle les paramètres) suivies d’une année verte (out-of-sample : on les applique tels quels), chaque ligne étant décalée d’un an vers la droite, si bien que les années de test vertes couvrent 2020 à 2025. Dessous, une ligne verte relie les années de test, avec la mention résultats de test mis bout à bout.

Trop de paramètres, data snooping et stabilité des réglages

Chaque paramètre, filtre ou exception est un degré de liberté qui permet aux règles de se plier au passé. Testez 20 valeurs de deux réglages et vous obtenez 400 variantes ; ajoutez trois filtres activables et vous en avez 3 200. Même si aucune n’a d’avantage, la meilleure des 3 200 paraîtra impressionnante par simple hasard. C’est le data snooping : plus vous essayez de versions sur les mêmes données, plus la gagnante reflète la chance. Les statisticiens ont construit des corrections formelles, comme le Reality Check de White (2000) et la probabilité de surajustement des backtests décrite par Bailey et ses coauteurs, mais les règles pratiques sont simples : peu de paramètres, compter chaque version essayée et juger la gagnante face à la meilleure d’autant d’essais aléatoires.

Regardez ensuite les voisins. Un réglage robuste se trouve sur un plateau : les valeurs proches donnent des résultats similaires et corrects. Un réglage surajusté est un pic : une case brille alors que ses voisines sont médiocres ou perdantes, comme à droite du dessin ci-dessous. Choisissez vos réglages au milieu d’un plateau, même si un pic a obtenu un meilleur score, et voyez une meilleure valeur située au bord de la plage testée comme le signe que la recherche est inachevée.

Tournez votre téléphone pour lire l’image. Touchez pour fermer.

Deux cartes de chaleur 6 × 6 du profit factor selon la longueur de la moyenne mobile rapide (10 à 35, en abscisse) et de la lente (175 en haut à 50 en bas). À gauche, plateau : les voisins concordent, avec une coche : un bloc central de 1,3 à 1,5 entouré d’un cadre vert pointillé, qui s’estompe vers 0,9–1,1 sur les bords. À droite, pic : une case chanceuse, avec une croix : une seule case vert foncé à 2,1 encadrée de rouge, entourée de cases entre 0,8 et 1,1.

Le biais d’anticipation : des exemples concrets

Le biais d’anticipation (look-ahead bias) signifie que le test utilise une information qui n’était pas disponible au moment de la décision. Il se code facilement par accident, et il peut faire paraître brillante presque n’importe quelle idée. Le dessin ci-dessous en montre deux formes courantes. À gauche, une règle décide à l’ouverture de 9 h 30 d’acheter si la séance clôture au-dessus d’un niveau, en utilisant une clôture qui n’existera qu’à 16 h. À droite, chaque trade est étiqueté selon que le marché était ou non au-dessus de sa moyenne à 200 jours, mais l’étiquette est calculée le jour de la sortie ; les trades réussis ont tendance à se terminer dans des marchés forts, donc le filtre semble prédictif alors qu’il ne fait que décrire le résultat. Autres formes à traquer :

  • Décisions sur la même bougie : utiliser la clôture, le plus haut ou le plus bas d’une bougie pour déclencher une entrée à son ouverture. Décidez sur la clôture précédente et entrez à l’ouverture suivante.
  • Informations connues à la sortie : filtres, étiquettes ou catégories calculés à la sortie ou sur toute la durée du trade. Calculez chaque filtre avec des données qui s’arrêtent à la bougie d’entrée.
  • Valeurs d’une unité de temps supérieure avant leur clôture : lire la valeur journalière ou hebdomadaire du jour sur une bougie intraday alors qu’elle se forme encore ; voir l’analyse multi-unités de temps et le repainting.
  • Données révisées : fondamentaux, chiffres économiques ou composition d’indice tels qu’on les connaît aujourd’hui plutôt qu’à la date du trade.
  • Statistiques sur tout l’échantillon : normaliser avec la moyenne ou la volatilité de tout l’historique, qui inclut le futur.

Tournez votre téléphone pour lire l’image. Touchez pour fermer.

Deux panneaux. À gauche, intitulé décidé à l’ouverture avec la clôture du jour : une bougie journalière verte avec des lignes pointillées à la clôture 16 h : encore inconnue et à l’ouverture 9 h 30 : la règle décide ici, un triangle d’achat à l’ouverture et une flèche rouge de la clôture vers l’ouverture avec une croix rouge ; dessous, avec une coche : correction : décider sur la clôture de la veille, entrer à l’ouverture. À droite, intitulé étiqueté avec une info connue seulement à la sortie : une ligne de prix qui monte de l’entrée à la sortie en traversant une moyenne 200 jours pointillée, avec une croix rouge sur au-dessus le jour de la sortie et une coche sur en dessous à l’entrée ; dessous : correction : filtrer seulement sur ce qui était connu à l’entrée.

Biais du survivant, coûts et changements de régime

Trois autres raisons pour lesquelles un backtest flatte une stratégie :

  • Biais du survivant : tester une stratégie actions sur les membres actuels d’un indice ou sur les actions cotées aujourd’hui écarte les sociétés qui ont fait faillite, ont été rachetées ou sont sorties de l’indice. Les perdants disparaissent des données, et les résultats paraissent meilleurs que tout ce qu’on aurait pu trader à l’époque. Utilisez la composition historique de l’indice et des données incluant les actions radiées.
  • Coûts et glissement : commission, spread et glissement se paient sur chaque trade et pèsent le plus en R avec des stops courts. Une stratégie à nombreux petits trades peut passer de gagnante à perdante dès qu’on saisit des coûts réalistes ; l’espérance en trading montre le calcul. Les ordres limites que le test suppose toujours exécutés sont un coût caché du même genre.
  • Changements de régime : la volatilité, la force des tendances, les taux d’intérêt et la structure du marché changent. Un système réglé sur des années calmes et en tendance peut échouer dans une période hachée ou très volatile. Vérifiez les résultats année par année et dans des marchés haussiers, baissiers et sans tendance, et méfiez-vous si l’essentiel du profit vient d’une seule période.

Monte-Carlo : mélanger l’ordre des trades

Un backtest n’est qu’un chemin à travers l’historique. Mélanger l’ordre de ses trades de nombreuses fois montre la part de chance de ce chemin. Avec un risque fixe en R, ou une fraction fixe du capital, le total est le même dans tous les ordres, car sommes et produits ne dépendent pas de l’ordre ; ce qui change, c’est le chemin, et avec lui le drawdown maximal et la plus longue série de pertes.

Dans l’exemple hypothétique ci-dessous, 70 trades de +2R et −1R totalisent +14R dans tous les ordres. Dans l’ordre du backtest, le drawdown maximal était de −6R, mais sur 1 000 mélanges la médiane était de −8R, les 5 % de séries les pires ont perdu 13R ou plus et le pire cas a atteint −19R. Planifiez sur les chiffres les plus profonds, pas sur celui du backtest : si vous ne pouviez pas supporter un drawdown de 13R, la stratégie est trop grosse pour vous à cette taille. Un test voisin rééchantillonne les trades avec remise, ce qui fait aussi varier le total et en donne une fourchette approximative.

Tournez votre téléphone pour lire l’image. Touchez pour fermer.

À gauche, les 70 mêmes trades hypothétiques dans des ordres différents : une ligne noire pour l’ordre du backtest et quatre chemins gris mélangés, qui finissent tous au même point vert, avec la mention +14R dans tous les ordres. À droite, un histogramme du drawdown maximal sur 1 000 mélanges, de −4R à −19R, avec des repères backtest −6R, médiane −8R et, en rouge, pires 5 % −13R.

Entrées aléatoires : la référence à battre

Zéro est la mauvaise référence. Dans un marché qui a monté sur la période de test, presque n’importe quelle stratégie acheteuse gagne de l’argent ; dans un marché haché, les coûts suffisent à pousser un trading aléatoire sous zéro. La référence équitable garde tout de votre stratégie sauf le signal d’entrée : même marché et même période, même sens, même distance de stop, même règle de sortie, mêmes coûts et un nombre de trades comparable, avec des entrées à des moments aléatoires. Répétez 1 000 fois et regardez où se situe votre stratégie.

Si votre stratégie se trouve dans la bande des résultats aléatoires, ses entrées n’apportent rien que la chance et la dérive du marché ne puissent expliquer. Si elle est nettement au-dessus, le signal porte peut-être une information, dans cet échantillon. Si la stratégie a été choisie comme la meilleure de nombreuses variantes, comparez-la à la meilleure d’autant de séries aléatoires, pas à une série typique, sinon le test est truqué en votre faveur.

Tournez votre téléphone pour lire l’image. Touchez pour fermer.

Des courbes de capital sur 0 à 200 trades, sous le titre 1 000 séries d’entrées aléatoires : même sens, même stop, même règle de sortie. Une bande grise hachurée marquée 90 % des séries aléatoires s’élargit avec le nombre de trades autour d’une série aléatoire médiane en pointillés qui dérive légèrement au-dessus de la ligne zéro. Une ligne verte de stratégie monte au-dessus de la bande. Une note indique en marché haussier, les achats au hasard montent : battez la bande, pas zéro.

Les limites du Strategy Tester de TradingView

Le Strategy Tester de TradingView simule une stratégie Pine Script avec un émulateur de courtier, et ses réglages par défaut peuvent rendre les résultats meilleurs ou pires que le trading réel. Vérifiez les points ci-dessous avant de vous fier à un rapport, et voyez comment backtester une stratégie de trading pour la méthode de base. Fonctions et abonnements évoluent : confirmez les détails dans la documentation actuelle de TradingView.

  • Moment d’exécution : par défaut, un ordre créé à la clôture d’une bougie est exécuté à l’ouverture de la suivante. Le réglage process_orders_on_close l’exécute plutôt à cette clôture, ce qui n’est réaliste que si vous pouviez vraiment trader à la clôture.
  • Chemin intrabougie : sur les bougies historiques, l’émulateur ne voit que l’ouverture, le plus haut, le plus bas et la clôture, donc il suppose un chemin à l’intérieur de chaque bougie. Quand une bougie touche à la fois le stop et l’objectif, l’ordre supposé décide du résultat. Bar Magnifier, disponible avec l’abonnement Premium et au-delà au moment où nous écrivons, utilise des données d’unité de temps inférieure pour trancher, dans une limite de nombre de bougies intrabougie.
  • Repainting et anticipation : request.security() avec l’anticipation activée, des valeurs d’unité supérieure lues avant la clôture de leur bougie et un recalcul à chaque tick peuvent tous rendre l’historique différent de ce qui se serait passé en réel ; le guide du repainting montre comment vérifier.
  • Coûts : commission et glissement valent zéro tant que vous ne les saisissez pas dans l’onglet Properties.
  • Exécution des limites : par défaut, un ordre limite peut être exécuté dès que le prix le touche ; le réglage Verify price for limit orders exige que le prix le dépasse d’un certain nombre de ticks, ce qui est plus réaliste sur les niveaux encombrés.
  • Type de graphique : Heikin Ashi, Renko et les autres graphiques non standard utilisent des prix synthétiques, donc les exécutions y sont parfois irréalistes ; testez sur des bougies standard.
  • Historique : le test ne couvre que les bougies chargées sur le graphique, ce qui peut donner trop peu de trades pour une estimation fiable. Parcourez les trades à la main avec le Bar Replay pour vérifier qu’ils respectent les règles.

Un exemple chiffré : le meilleur de 400 réglages

Exemple hypothétique : une règle de suivi de tendance sur 10 ans de données journalières d’un fonds indiciel actions, de 2016 à 2025. Elle achète quand une moyenne mobile rapide croise au-dessus d’une lente et sort au croisement inverse, avec un stop à 2 ATR ; voir le guide du croisement de moyennes mobiles. 2016–2022 est in-sample ; 2023–2025 est mis de côté.

  1. Recherche : 20 longueurs rapides × 20 longueurs lentes = 400 variantes, testées in-sample avec commission et glissement.
  2. Gagnante : rapide 13, lente 47, avec un profit factor de 2,1 sur 64 trades et un drawdown maximal de 7 %.
  3. Voisins : les réglages à un pas de distance (12–14 en rapide, 45–50 en lente) obtiennent entre 1,0 et 1,2 : un pic, pas un plateau.
  4. Plateau : une large zone autour de 20–30 en rapide et 100–150 en lente obtient de 1,3 à 1,5 partout ; son centre est rapide 25, lente 125.
  5. Monte-Carlo : mélanger les 64 trades de la gagnante donne un drawdown maximal médian de 10 % et des 5 % pires à 16 % ou plus, bien plus profond que les 7 % du rapport.
  6. Référence aléatoire : face à des séries d’entrées aléatoires prises une à une, la gagnante paraît exceptionnelle et bat 97 % d’entre elles, mais la meilleure de 400 séries aléatoires atteint un profit factor de 1,9, presque autant.
  7. Out-of-sample, une seule fois : rapide 13 / lente 47 fait un profit factor de 0,9 sur 21 trades ; rapide 25 / lente 125 fait 1,2 sur 9 trades, trop peu pour prouver quoi que ce soit.
  8. Décision : écarter le pic, garder le réglage du plateau comme hypothèse, le tester en conditions réelles sur compte papier ou à très petite taille et le réexaminer après assez de nouveaux trades.

Checklist avant de faire confiance à un backtest

Passez cette liste en revue avant que de l’argent ne dépende d’un backtest. Chaque « non » est une raison de continuer à tester, pas de trader :

Les mêmes questions valent pour toute statistique publiée, y compris le tableau de résultats simulés de la stratégie UpTickFlow : il décrit le passé et n’est pas une promesse.

  1. Les règles ont-elles été écrites avant le test, et avez-vous compté chaque variante essayée ?
  2. Existe-t-il une période out-of-sample, ou un historique walk-forward, que le réglage n’a jamais touchés ?
  3. Le réglage retenu se trouve-t-il sur un plateau, avec des résultats proches pour les valeurs voisines ?
  4. Chaque filtre n’utilise-t-il que des données disponibles à l’entrée, sans information de la même bougie ni de la sortie ?
  5. Les données incluent-elles les actions radiées et la composition historique des indices ?
  6. Commission, spread et glissement sont-ils réalistes, et les résultats survivent-ils si on les double ?
  7. Y a-t-il assez de trades, et la fourchette de deux erreurs types autour de l’espérance dépasse-t-elle zéro ?
  8. La stratégie bat-elle des entrées aléatoires avec le même sens, le même stop et la même sortie, et la meilleure d’autant de séries aléatoires que de variantes essayées ?
  9. Les drawdowns de Monte-Carlo sont-ils compatibles avec votre tolérance au risque à la taille prévue ?
  10. Les résultats tiennent-ils selon les années et les régimes de marché, et un test sur de nouvelles données les a-t-il confirmés ?