Backtester une stratégie sur futures sans se tromper soi-même
Un backtest rejoue un ensemble de règles sur des données passées. Mal fait, il mesure surtout à quel point les règles ont été ajustées à ces données. Voici comment en construire un qui puisse au moins échouer honnêtement.
Publié le · Mis à jour le · 9 min de lecture
L'essentiel
- Un backtest applique des règles fixes et écrites à des données historiques et enregistre chaque trade simulé ; sa valeur dépend des données, des hypothèses d’exécution et du nombre de choix ajustés sur ces mêmes données.
- Les pièges classiques sont le biais d’anticipation, les erreurs de données, le surajustement par optimisation, la sélection parmi de nombreuses variantes et l’oubli des commissions et du slippage.
- Il faut garder des données que les règles n’ont jamais vues : une période hors échantillon, ou un test walk-forward qui optimise sur une fenêtre et teste sur la suivante.
- Dans NinjaTrader 8, le Strategy Analyzer lance backtests, optimisations et optimisations walk-forward ; les exécutions sont simulées à partir des barres, d’où l’importance des réglages de commission, de slippage et d’exécution.
- Même un backtest propre reste hypothétique : la réglementation de la CFTC impose aux conseillers qui présentent des résultats simulés d’avertir qu’ils ne représentent pas un trading réel.
Backtester une stratégie sur futures : la réponse courte
Backtester une stratégie sur futures, c’est appliquer à des données historiques un ensemble de règles fixes, écrites assez précisément pour qu’un ordinateur puisse les suivre, et enregistrer chaque trade que ces règles auraient pris, avec des coûts réalistes. Le résultat est une liste de trades hypothétiques et les statistiques qui en découlent : résultat net, drawdown, nombre de trades, trade moyen.
Le plus difficile n’est pas de lancer le test ; des plateformes comme NinjaTrader 8 le font rapidement. Le plus difficile est de s’assurer que le résultat veut dire quelque chose. La plupart des backtests trompeurs ne sont pas malhonnêtes : ils viennent de choix d’apparence raisonnable qui laissent filtrer de l’information du futur, ajustent les règles au bruit ou supposent des exécutions que le marché n’aurait pas données. Les étapes ci-dessous servent à repérer ces fuites avant qu’elles n’atteignent un compte réel.
Première étape : des règles et des données fiables
Écrire les règles avant de regarder le moindre résultat : entrée, sortie, stop, objectif, taille de position, séances tradées, et ce qui se passe autour du rollover et des publications programmées. Une règle qui demande du jugement, comme entrer quand la tendance paraît forte, ne peut pas être backtestée tant qu’elle n’est pas devenue une condition mesurable.
Il faut ensuite vérifier les données, car celles des futures posent des questions particulières. Un contrat continu raccorde les échéances successives, et la façon d’ajuster les prix à chaque changement d’échéance modifie le passé : une série ajustée (back-adjusted) convient à des règles fondées sur des mouvements en points, pas à des règles fondées sur des niveaux de prix absolus d’il y a plusieurs années. Les ticks aberrants, les séances manquantes et les changements d’horaires de négociation créent des trades qui n’auraient jamais pu exister. Pour des règles qui dépendent de ce qui s’est passé à l’intérieur d’une barre, la résolution compte aussi : une barre d’une minute ne dit pas si son plus haut est venu avant son plus bas.
- Utiliser des données de la même source et du même modèle de séance que ceux du trading réel.
- Examiner les valeurs aberrantes : une seule impression erronée peut produire le meilleur trade de tout le test.
- Décider comment le rollover est traité et vérifier les trades autour de chaque échéance.
- Garder une trace de la période de données et des réglages de chaque test, y compris ceux qui sont abandonnés.
Les biais qui embellissent les backtests
Le biais d’anticipation (look-ahead bias) utilise une information qui n’était pas disponible au moment de la décision. Ses formes courantes sont subtiles : une règle qui lit la clôture d’une barre pour entrer à l’ouverture de cette même barre, un plus haut ou un plus bas du jour utilisé avant la fin de la journée, un indicateur dont les valeurs passées changent quand de nouvelles données arrivent, ou une statistique économique prise à sa valeur révisée plutôt qu’à sa première publication.
Le surajustement (overfitting, ou curve fitting) vient du réglage de trop nombreux paramètres sur les mêmes données. Chaque paramètre ajouté et chaque optimisation lancée augmentent la probabilité que le meilleur résultat colle au bruit de cet échantillon particulier. Une stratégie aux nombreux paramètres réglés au plus près, dont les résultats s’effondrent quand une valeur bouge légèrement, a appris le passé plutôt qu’un comportement de marché.
Le biais de sélection est le même problème un étage plus haut. Tester vingt idées et garder celle qui a marché, c’est surestimer son avantage, car la chance a fait partie de la sélection. Le compte honnête est celui des variantes essayées, pas de celles qui sont conservées.
- Anticipation : toute valeur utilisée avant de pouvoir être connue.
- Surajustement : des paramètres réglés sur le bruit d’un seul échantillon.
- Sélection : garder le meilleur de nombreux tests sans tenir compte de la recherche.
- Biais du survivant : ne tester que des marchés ou des contrats choisis parce qu’ils sont populaires ou existent encore aujourd’hui.
- Exécutions optimistes : ordres limites exécutés au simple contact, ordres au marché exécutés au prix du signal.
Coûts, slippage et exécutions : là où disparaissent les avantages à court terme
Un backtest sans coûts décrit le prix, pas le trading. Commissions et frais sont facturés par contrat à chaque aller-retour, et le slippage se paie sur les ordres au marché et les ordres stop. Pour des stratégies à court terme, ces coûts peuvent dépasser le trade moyen brut et transformer un test en apparence rentable en test perdant ; le calcul est détaillé dans l’article sur ce que le scalping sur futures implique vraiment.
Les hypothèses d’exécution méritent la même attention. Un ordre limite posé à un prix n’est pas forcément exécuté quand le prix le touche, parce que d’autres ordres le précédaient dans la file. Un test qui exécute chaque contact est optimiste ; exiger que le prix traverse la limite est plus prudent. Les ordres au marché et les stops doivent être supposés exécutés moins bien que le prix du signal, d’au moins un tick en conditions normales et de davantage autour des publications.
La résolution des données interagit avec les exécutions. Si une même barre contient le stop et l’objectif, la barre seule ne dit pas lequel a été touché en premier. Le test doit supposer un ordre des événements, et une hypothèse commode peut discrètement transformer des perdants en gagnants.
Tests hors échantillon et walk-forward
La meilleure protection contre le surajustement, ce sont des données que les règles n’ont jamais vues. On découpe l’historique : développement et réglage sur une partie, la période dans l’échantillon (in-sample), puis un test unique sur une partie ultérieure, la période hors échantillon (out-of-sample). Si la performance s’effondre hors échantillon, le résultat dans l’échantillon était surtout de l’ajustement. Et si l’on revient modifier les règles après avoir vu le résultat hors échantillon, cette période est devenue à son tour une période dans l’échantillon.
L’analyse walk-forward répète l’idée dans le temps. Les paramètres sont optimisés sur une fenêtre et testés sur la fenêtre suivante ; puis les deux fenêtres avancent et le processus recommence, et les fenêtres de test sont mises bout à bout pour former un seul historique hors échantillon. NinjaTrader décrit son optimisation walk-forward dans les mêmes termes : la performance est évaluée sur les données de test, pas sur celles de l’optimisation, avec une période d’optimisation (Optimization period) et une période de test (Test period) réglées en jours.
Deux autres vérifications coûtent peu. La sensibilité : modifier un peu chaque paramètre et voir si les résultats se dégradent progressivement ou s’effondrent d’un coup. D’autres conditions : appliquer les mêmes règles, sans nouveau réglage, à une autre période ou à un marché proche. Une idée robuste survit en général aux deux, sous une forme plus faible ; une idée surajustée, en général non.
| Étape | Période d’optimisation | Période de test |
|---|---|---|
| 1 | Mois 1 à 12 | Mois 13 à 15 |
| 2 | Mois 4 à 15 | Mois 16 à 18 |
| 3 | Mois 7 à 18 | Mois 19 à 21 |
Backtester dans NinjaTrader 8 : les bases du Strategy Analyzer
Dans NinjaTrader 8, les backtests se lancent dans le Strategy Analyzer, ouvert depuis le menu New du Control Center. Il teste des stratégies NinjaScript, qu’elles soient codées à la main ou générées avec le Strategy Builder. Le réglage Backtest type propose Backtest, Optimization, Walk Forward Optimization et Multi-Objective Optimization ; on choisit ensuite la stratégie, l’instrument, la série de données, les dates de début et de fin et le modèle d’horaires de négociation, puis on clique sur Run.
Plusieurs réglages décident du réalisme du résultat. Ils méritent d’être vérifiés avant chaque lancement, car les valeurs par défaut privilégient la vitesse plutôt que la prudence.
- Include commission : active ou désactive les commissions dans les résultats ; les tarifs viennent d’un modèle de commission (commission template).
- Slippage : un nombre de ticks appliqué aux exécutions des ordres au marché, stop market et Market-if-touched ; il vaut zéro par défaut et ne s’applique pas aux ordres limites.
- Order fill resolution : Standard, la valeur par défaut, simule les exécutions à partir de l’ouverture, du plus haut, du plus bas et de la clôture de chaque barre en découpant la barre en barres virtuelles ; High utilise une série secondaire plus fine pour les exécutions, au prix de tests plus longs.
- Fill limit orders on touch : activé, un ordre limite est compté comme exécuté dès que son prix est touché une seule fois, l’hypothèse optimiste décrite plus haut.
- Exit on session close : activé, les positions ouvertes sont clôturées sur la dernière barre de chaque séance.
Le guide d’aide de NinjaTrader explique aussi pourquoi résultats de backtest et résultats en temps réel diffèrent : les exécutions historiques ne reposent que sur l’ouverture, le plus haut, le plus bas et la clôture de chaque barre, alors qu’en temps réel elles dépendent des données de marché entrantes et du volume ; et pendant un backtest, une stratégie est traitée à la clôture de chaque barre plutôt que tick par tick. Order fill resolution ne peut pas être combiné avec le Tick Replay, ce qui compte pour les stratégies d’order flow ; le guide Tick Replay dans NinjaTrader 8 explique ce réglage. Examiner les affichages Trades et Executions, et pas seulement le résumé, montre si les exécutions prises une à une sont plausibles.
Lire le résultat honnêtement
Un test terminé produit un rapport, dont chaque chiffre est expliqué dans l’article sur les statistiques de trading. Quelques habitudes gardent la lecture honnête. Regarder le nombre de trades avant tout ratio, car une poignée de trades ne dit presque rien. Regarder le drawdown maximal et la plus longue période perdante, et se demander si l’on aurait vraiment continué à trader pendant ces phases. Comparer le trade moyen aux coûts par trade : si la marge est mince, de petites variations de slippage l’effacent. Vérifier que le résultat ne dépend pas de quelques trades hors norme, et dimensionner tout usage réel à partir d’un risque par trade, comme l’explique le guide de gestion du risque sur futures.
Il faut ensuite traiter le résultat pour ce qu’il est : hypothétique. Selon les règles de la CFTC sur la publicité, les conseillers en trading de matières premières (CTA) et les gérants de fonds (CPO) qui présentent des performances simulées ou hypothétiques doivent avertir que ces résultats ont des limites inhérentes, ne représentent pas un trading réel, peuvent avoir sous-estimé ou surestimé l’effet de facteurs de marché comme le manque de liquidité, et sont en général conçus avec le bénéfice du recul. La même prudence s’applique à ses propres tests. L’étape qui suit un backtest est le test prospectif en simulation, puis une petite taille, avec le backtest comme point de comparaison plutôt que comme prévision.
Mettre en pratique
Questions fréquentes
Combien de données faut-il pour backtester une stratégie sur futures ?
Il n’y a pas de quantité fixe. Ce qui compte, c’est le nombre de trades et la variété des conditions couvertes : périodes calmes et agitées, tendances et ranges, et les séances que l’on compte trader. Un test avec peu de trades, ou un seul régime de marché, ne peut pas distinguer un avantage de la chance.
Quelle différence entre backtest et test prospectif ?
Un backtest applique les règles à des données passées. Un test prospectif (forward test) les applique à de nouvelles données au fur et à mesure qu’elles arrivent, en simulation ou en petite taille, si bien que rien ne peut y être ajusté à l’avance. Ses résultats sont plus longs à réunir mais bien plus difficiles à tromper.
Un test walk-forward prouve-t-il qu’une stratégie fonctionne ?
Non. Il supprime une source d’illusion, régler et tester sur les mêmes données, mais le choix des fenêtres, du critère d’optimisation et des stratégies testées peut encore être surajusté. Il reste aussi une simulation, avec des exécutions simulées.
Peut-on backtester une stratégie d’order flow ?
Seulement avec des données qui contiennent chaque transaction ainsi que le bid et l’ask au moment de chacune. Dans NinjaTrader, cela passe par le Tick Replay, que le guide d’aide déclare incompatible avec Order fill resolution. La position dans la file et l’historique de la profondeur de marché restent difficiles à simuler : ces backtests demandent une prudence supplémentaire.
Pourquoi mes résultats réels diffèrent-ils du backtest ?
Raisons fréquentes : des exécutions que les barres ne pouvaient pas reproduire, un slippage et des coûts absents ou sous-estimés, des règles qui utilisaient une information trop tôt, et des différences entre données historiques et données en temps réel. Le guide d’aide de NinjaTrader énumère plusieurs de ces écarts.
Sources
- Strategy Analyzer (NinjaTrader 8) — NinjaTrader Help Guide
- Backtest a Strategy (NinjaTrader 8) — NinjaTrader Help Guide
- Walk Forward Optimization (NinjaTrader 8) — NinjaTrader Help Guide
- Understanding Historical Fill Processing (NinjaTrader 8) — NinjaTrader Help Guide
- Discrepancies: Real-Time vs Backtest (NinjaTrader 8) — NinjaTrader Help Guide
- 17 CFR § 4.41: Advertising by commodity pool operators, commodity trading advisors, and the principals thereof — Legal Information Institute, Cornell Law School
À lire aussi
Rédigé avec l’aide d’outils d’IA à partir de sources officielles, puis vérifié (chiffres, dates, sources) selon notre méthodologie. Méthodologie · Politique éditoriale · Signaler une erreur
Contenu éducatif. Ces indicateurs ne constituent pas un conseil en investissement et ne garantissent aucun résultat. Le trading de futures comporte un risque de perte en capital qui peut dépasser la mise initiale. Conditions d’utilisation · Disclaimers