Comment automatiser une stratégie de trading : les leçons de vingt ans de backtest

Un trader nous a confié sa méthode. Voici les corrections que vingt ans de simulations ont imposées aux premiers résultats, et les variantes qu’elles ont écartées, avant d’aboutir à la version qui tourne aujourd’hui

Publié le : 12 min read

Lire l'étude de cas ↗

Un trader nous a confié sa méthode pour que nous la remettions à un programme. Le résultat est public : une étude de cas décrit les règles retenues, les chiffres de vingt ans de simulation et le message qui part chaque soir après la clôture de New York. Cet article raconte l’autre moitié du travail, celle qui ne se montre pas. Entre le premier résultat, obtenu en quelques jours, et celui que nous avons accepté de publier, nous n’avons presque rien ajouté : nous avons surtout retiré.

Ce qui flanche, ce n’est pas la méthode, c’est son application

Le client est convaincu que sa méthode fonctionne quand il la suit avec constance. Notre travail n’était pas de prendre cette conviction pour acquise, mais de la traduire en règles et de mettre ces règles à l’épreuve. Le problème qui l’a amené chez nous est ailleurs. Un soir de baisse, après une mauvaise semaine, personne n’applique une règle comme un soir calme. On attend un jour de plus, on sort un peu tôt, on saute une séance parce qu’on est en déplacement. C’est là que le rendement se perd.

Un programme n’a ni fatigue ni souvenir des mauvaises opérations. À cours identiques, il prend le même ordre, que la semaine ait été bonne ou mauvaise. Pour ce projet, c’était l’avantage qui comptait le plus.

Encore faut-il lui dire quoi faire dans les situations que le trader règle d’instinct, sans même les remarquer : deux conditions qui se contredisent le même soir, un titre déjà détenu qui sort de la sélection, un cours d’ouverture très éloigné de la clôture sur laquelle la décision a été prise. Il ne s’agit pas de compléter la méthode, mais d’écrire ce que son auteur fait déjà.

Scénario illustratif. Mardi, 22 h. Le marché américain vient de fermer sur une baisse. La règle dit de vendre. Le trader regarde le graphique, se souvient que la même configuration s’est retournée en trois séances au printemps dernier, et décide d’attendre jusqu’à jeudi. Il a peut-être raison ce soir-là. Ou il a tort.

Le cadrage a donc consisté à mettre par écrit la méthode telle qu’elle est pratiquée, puis à la faire valider ligne à ligne par celui qui l’a inventée. C’est un travail d’optimisation plus que de développement, et il ressemble beaucoup à celui que nous menons quand nous mesurons un processus avant de le chiffrer dans un cabinet ou une PME.

Biais de survie : le premier chiffre est toujours trop beau

Une fois les règles écrites, nous les avons appliquées aux vingt dernières années de cotations, de décembre 2005 à novembre 2025, avec 100 000 dollars au départ. Cet exercice porte un nom, le backtest : c’est une simulation de la méthode sur les cours du passé, comme si elle avait tourné à l’époque.

Le premier résultat était excellent. Il était aussi faux, pour une raison que rien ne signale à l’écran.

La méthode choisit ses titres parmi les cent valeurs de l’indice Nasdaq-100 et celles du secteur énergie du S&P 500, soit environ 120 candidats. Or cette liste est révisée en permanence, et notre première version prenait celle de 2026 pour toutes les dates. Il faut au contraire la mettre à jour à chaque période simulée, avec la composition que l’indice avait réellement à ce moment-là. Sans cela, le programme ne choisit ses titres que parmi les entreprises qui ont réussi assez longtemps pour figurer encore dans l’indice aujourd’hui, ce qu’on appelle le biais de survie.

Nous avons donc reconstitué la composition exacte de l’indice à chaque date, en remontant à rebours les 211 changements publiés depuis février 2007, puis nous avons refait toute la simulation avec ces listes-là. La figure 1 montre ce que cette seule correction retire au résultat.

Deux paires de barres comparant le capital final au bout de vingt ans, 100 000 dollars au départ. Les valeurs, simplement gardées : 1,17 million avec la liste d’aujourd’hui, soit +13,1 % par an, contre 0,63 million avec les listes mises à jour à chaque période, soit +9,6 % par an. La règle retenue : 1,42 million et +14,2 % par an contre 0,73 million et +10,5 % par an
Figure 1. La même méthode, les mêmes vingt ans, les mêmes frais. Seule change la liste des valeurs dans laquelle le programme puise ses données, figée sur celle d’aujourd’hui puis mise à jour à chaque période. Mesure faite sur la version de la simulation en usage à l’époque, qui renouvelait le panier une fois par an ; la version retenue finit plus haut, comme l’explique la suite.

Le capital final est presque divisé par deux, des deux côtés. Le rythme de progression annuel perd trois points et demi, aussi bien pour la méthode que pour la comparaison la plus simple qui soit : les mêmes valeurs, achetées quand la méthode les sélectionne, puis gardées sans aucune règle de sortie.

Cette correction reste incomplète, et nous le disons au client en même temps que nous lui montrons la courbe. Le fournisseur de cours ne distribue plus les historiques des sociétés radiées, si bien que 57 des 123 titres de l’univers de novembre 2005 restent introuvables. Les listes datées sont donc exactes sur les entreprises entrées tard, et toujours amputées de celles qui sont sorties. Parmi elles il y a des faillites et des rachats à prime, dont l’effet net demeure inconnu. C’est une limitation de la simulation, et elle subsiste dans les chiffres publiés ici.

La liste du secteur énergie, elle, n’a pas été reconstituée : la simulation prend sa composition de 2022 pour toute la période. C’est une seconde source du même biais, plus petite que la première, et elle subsiste elle aussi dans les chiffres publiés ici.

Biais d’anticipation : comment empêcher une simulation de lire l’avenir

Il existe une manière plus discrète encore de se flatter : laisser un calcul consulter, sans le vouloir, une donnée qui n’existait pas encore le jour de la décision. C’est facile à introduire et presque impossible à repérer à l’œil, parce que le graphique reste plausible et que la courbe monte simplement un peu mieux.

Nous nous en protégeons par un test automatique, relancé à chaque modification du code, et dont le principe tient en deux temps. Nous prenons d’abord un historique de cours et nous le coupons en deux à une date choisie au milieu. Nous en fabriquons ensuite une seconde version, rigoureusement identique jusqu’à cette date et délibérément fausse après elle : tous les cours postérieurs y sont multipliés, par dix, par vingt-cinq, par cinquante. Nous faisons alors calculer au programme ses indicateurs et ses décisions sur les deux versions, et nous ne comparons que la partie située avant la coupure, celle que nous n’avons pas touchée.

Un calcul qui ne consulte que le passé doit rendre exactement les mêmes valeurs dans les deux cas, puisque le passé est le même dans les deux. Le moindre écart signifie donc, sans autre explication possible, qu’il est allé lire un cours postérieur à la date de la décision. Si les cours truqués sont multipliés par des facteurs aussi grands, c’est pour que cet écart, s’il existe, soit visible immédiatement au lieu de se perdre dans les arrondis. Le test échoue alors, et la modification ne part pas en production. Le projet compte 174 tests, qui sont répétés avant chaque publication de résultat.

À cela s’ajoutent deux règles d’exécution, que l’étude de cas détaille et que nous ne faisons que rappeler ici : la décision se lit sur le cours de clôture mais l’ordre part à l’ouverture du lendemain, et chaque exécution paie un dixième de pour cent de frais, moitié commission, moitié glissement de prix. Ainsi, la simulation tient compte des frais de transaction et reflète les coûts réels.

L’hypothèse n’est retenue qu’après une simulation

Une fois la mesure jugée fiable, nous avons essayé ce qui semblait de bon sens. Renouveler la sélection tous les trois mois plutôt que tous les six, pour rester plus près du marché. Exiger deux clôtures au lieu d’une avant de conserver une position, pour éviter les faux départs. Élargir le vivier au secteur de la santé, pour ne pas dépendre de la seule technologie. Juger chaque titre par rapport à son propre secteur, ou au contraire par rapport au marché entier.

Aucune de ces hypothèses n’est absurde. Toutes coûtent de l’argent, et la figure 2 dit combien.

Cinq barres horizontales donnant l’écart de capital final sur vingt ans par rapport à la version retenue : conservation exigeant deux clôtures −14,4 %, univers élargi au secteur santé −17,9 %, rotation trimestrielle −20,5 %, filtre par le secteur de chaque titre −34,1 %, filtre unique par le S&P 500 −36,4 %
Figure 2. Cinq variantes mesurées sur les mêmes vingt ans, avec les mêmes frais et la même règle d’achat et de vente. Seul l’élément nommé change à chaque fois.

L’élargissement au secteur de la santé mérite un mot, parce qu’il illustre bien la surprise. Diversifier passe pour une précaution ; ici, cela retire 17,9 % au capital final. Et la même expérience, refaite sur la variante qui utilise un produit à effet de levier, en retire 66,4 % tout en creusant la pire chute à −89 %.

Les deux écarts les plus lourds, −34,1 % et −36,4 %, viennent des deux variantes qui ajoutent un filtre à la sélection des titres. C’est donc la règle de sélection, plus que le calendrier de rotation ou les conditions de conservation, qui décide du résultat sur ces vingt ans.

Ce qui reste quand on a tout retiré

Au terme de ce ménage, la règle retenue termine les vingt ans à 1 312 607 dollars, soit un rythme de +13,7 % par an. Ce chiffre n’est pas celui de la figure 1 : la correction du biais de survie a été mesurée sur la version de la simulation en usage à l’époque, qui renouvelait le panier une fois par an et remettait chaque année tout le capital en liquidités avant de recommencer. La version retenue, celle à laquelle les variantes de la figure 2 sont comparées, renouvelle le panier tous les six mois et conserve les positions dont la tendance tient encore, et c’est cette conservation qui relève le capital final. Garder ces mêmes valeurs sans aucune règle de sortie aurait donné +12,4 % par an sur la même période et avec les mêmes frais. L’écart est donc d’environ un quart de capital au bout de vingt ans. C’est peu, et cela ne suffit pas à justifier l’écriture d’un programme. Le portefeuille ne contient que cinq titres à la fois : un seul titre différent dans un seul panier peut déplacer le capital final dans les mêmes proportions. Cet écart peut donc venir de la méthode comme du hasard, et nous le disons au client.

Le vrai gain de la méthode est ailleurs : elle réduit le risque. En sortant des positions quand le marché se retourne, elle épargne au portefeuille les baisses les plus violentes. La pire chute entre un sommet et le creux qui suit — les professionnels disent drawdown — passe de −72 % pour ces mêmes valeurs simplement gardées à −40 % pour la règle retenue. Le capital suit donc un parcours nettement plus lisse, pour un rendement presque identique. C’est ce que résume le ratio de Sharpe, qui rapporte le rendement aux secousses subies pour l’obtenir : il monte de 0,55 à 0,67.

Ce lissage a une conséquence directe sur l’effet de levier. Les produits à levier, comme les turbos et les certificats, perdent la totalité de leur valeur dès que le cours touche un seuil fixé à l’émission. Plus les variations du portefeuille sont amples, plus ce seuil a de chances d’être atteint, et plus vite. Une stratégie qui limite les chutes permet donc d’envisager ces produits sans qu’ils soient désactivés à la première secousse.

Nous avons mesuré cette variante. Elle place la totalité de la poche sur un certificat à levier trois, émis par une banque, qui amplifie par trois la hausse comme la baisse. Elle termine à 5,7 millions de dollars, soit +22,4 % par an, quatre fois mieux que la règle sans levier. Mais sa pire chute atteint −79 % et son ratio de Sharpe redescend à 0,64 : le levier amplifie les conséquences des signaux, il n’améliore pas leur qualité. Une courbe qui finit plus haut après être passée par −79 % ne tient pas, parce que personne ne la suit jusqu’au bout.

Ce que le client reçoit à la fin

La mise en production est la partie la plus simple, une fois le reste fait. Un serveur exécute chaque soir une tâche planifiée qui télécharge les cours après la clôture de New York, refait tous les calculs depuis le premier jour, passe une série de contrôles et envoie un message portant un verdict : acheter, vendre, ou ne rien faire. Le client programme ses ordres le lendemain matin, avant l’ouverture.

Il reçoit avec cela le code, les fichiers de résultats et de quoi refaire chaque calcul sur sa propre machine, sans nous, et cette partie compte autant que le reste. Les valeurs exactes qui règlent sa stratégie lui appartiennent, et elles ne sont publiées nulle part : l’étude de cas publiée décrit la démarche et donne les chiffres de performance.

Le passage des ordres, lui, est resté entre ses mains parce qu’il y tient. Il peut être automatisé à son tour et partir directement chez le courtier, dès lors que celui-ci expose une interface pour les recevoir.

La même démarche hors de la bourse

Rien de ce qui précède n’est propre au trading. Trois temps se répètent dès qu’une décision revient régulièrement et repose sur des règles que quelqu’un connaît sans toujours les appliquer : écrire la règle jusqu’au bout, mesurer honnêtement ce qu’elle donne, puis en confier l’exécution à un programme. La décision reste celle du client : c’est sa règle, il la modifie quand il le veut, et il voit chaque jour ce que le programme a fait. Ce que l’automatisation ajoute, c’est une application fiable, un suivi permanent et, en bourse, moins d’imprévisibilité. Nous suivons exactement cette progression pour automatiser un processus métier, et c’est aussi ce que décrit notre page méthode.

Le premier chiffre d’un projet est presque toujours flatteur, parce qu’il a été obtenu dans les conditions les plus favorables, celles où l’on connaît déjà la réponse. Le travail commence quand on cherche à le mettre en défaut.

Si vous avez une méthode que vous appliquez à la main et que vous aimeriez confier à un programme, en bourse ou ailleurs, un échange de 30 minutes suffit généralement à savoir si elle est codable et ce qu’il faudrait mesurer avant de s’engager. Écrivez-nous en bas de page, ou réservez directement un créneau dans notre agenda.

Tous les chiffres de cet article proviennent de simulations sur des cours passés, et non d’un historique d’ordres réellement passés. Aucun ordre n’est transmis à un courtier par nos soins, et rien de ce qui précède ne constitue un conseil en investissement.

Questions fréquentes

Quelles précautions rendent une simulation de trading fiable ?

Quatre précautions, et elles se vérifient une par une. Le programme lit sa règle sur le cours de clôture et n’achète qu’à l’ouverture du lendemain, jamais au cours qui a produit le signal. Chaque exécution paie ses frais, un dixième de pour cent à l’achat comme à la vente. L’univers testé est la liste que le Nasdaq-100 avait à la date du test, et non celle d’aujourd’hui ; seule la liste du secteur énergie reste figée sur sa composition de 2022. Enfin, un test automatique modifie tous les cours postérieurs à une date et exige que les décisions antérieures ne changent pas d’un iota, ce qui prouve qu’aucun calcul ne regarde en avant.

Que faut-il nous donner pour commencer ?

Votre méthode telle que vous la pratiquez, sans avoir à la mettre au propre d’abord. Vous en réglez d’instinct une partie, comme tout le monde, et vous n’avez aucune raison d’avoir déjà formulé ces cas-là. Notre travail de cadrage consiste précisément à poser les questions dont la réponse est aujourd’hui implicite : sur quel cours se lit le signal, à quel moment de la séance, quelle part du capital revient à chaque position, et que faire quand deux conditions se contredisent. Une réunion suffit généralement à savoir si la méthode est codable.

À qui appartiennent le code, les données et les résultats ?

Au client. Il reçoit le programme, les fichiers de résultats et de quoi refaire chaque calcul sur sa propre machine, sans nous. Les seuils exacts de sa méthode lui appartiennent également : l’étude de cas publiée décrit la démarche et les chiffres de rendement, jamais les valeurs qui permettraient de reconstituer le moteur.

Les ordres peuvent-ils partir directement chez le courtier ?

Oui, dès lors que le courtier expose une interface pour les recevoir. Sur ce projet, le passage des ordres est resté entre les mains du client : c’est son choix, il tient à garder ce dernier geste. Le programme lui envoie un message chaque soir avec les ordres à programmer, et il les saisit le lendemain matin avant l’ouverture.

Travaillez-vous seulement sur les actions américaines ?

Non. Le moteur n’est pas lié à un marché : il applique des règles à des séries de cours. La vraie contrainte est la disponibilité de l’historique, parce qu’une méthode ne se juge pas sans un passé assez long et assez propre pour la mettre à l’épreuve. C’est cette disponibilité qu’il faut vérifier avant de s’engager sur un marché donné, pas la capacité du programme à le traiter.

Est-ce un conseil en investissement ?

Non, sans ambiguïté. Nous sommes une société de développement logiciel : nous codons la méthode que le client nous confie, nous la mesurons et nous l’exécutons. Nous ne recommandons aucune stratégie, aucun titre et aucun produit, et les chiffres publiés proviennent de simulations, pas d’un historique d’ordres réellement passés.

Qu’est-ce que le biais de survie dans un backtest de trading ?

Le biais de survie apparaît quand une simulation choisit ses titres dans la liste que l’indice a aujourd’hui, et non dans celle qu’il avait à chaque date du passé. Les entreprises qui ont fait faillite ou qui ont été retirées en chemin manquent, si bien que le programme ne choisit que parmi celles qui ont réussi assez longtemps pour figurer encore dans l’indice, et le résultat est flatté. Le remède consiste à reconstituer la composition de l’indice à chaque date et à refaire la simulation avec ces listes datées. Dans cette étude, cette seule correction a retiré trois points et demi au rendement annuel, aussi bien pour la méthode que pour les mêmes valeurs simplement gardées.

Qu’est-ce que le biais d’anticipation en trading algorithmique ?

Le biais d’anticipation, ou look-ahead bias, est un calcul qui lit, sans le vouloir, un cours postérieur à la date de la décision qu’il est censé prendre. Il est invisible à l’œil : le graphique reste plausible et la courbe monte simplement un peu mieux. Nous le débusquons par un test automatique qui coupe un historique de cours à une date du milieu, multiplie tous les cours postérieurs par un grand facteur et exige que les décisions antérieures à la coupure soient rigoureusement identiques dans les deux versions. Un calcul qui ne consulte que le passé rend les mêmes valeurs dans les deux cas, si bien que le moindre écart prouve qu’il a regardé en avant, et la modification ne part pas en production.

Prêt à automatiser vos processus ?

Discutons de vos besoins et voyons comment transtorm.ai peut vous aider