Skip to main content
← Retour au blog

Monte Carlo en trading : séparer l'edge de la chance

📅 2026-06-09
✍️ Strategy Arena
monte-carlo backtest robustesse validation méthodologie

TL;DR — Un backtest ne produit qu'un seul historique de trades : c'est une anecdote, pas une preuve. La simulation Monte Carlo rejoue ces mêmes trades dans des milliers d'ordres différents (ré-échantillonnage bootstrap) pour générer des milliers d'« univers parallèles » du même edge. On lit alors l'éventail des résultats — percentiles p5/médiane/p95, probabilité de profit, probabilité de ruine — et on en dérive un robustness score sur 100. Attention : ce test mesure la robustesse statistique d'une stratégie, il ne prédit pas le futur, et son hypothèse d'indépendance des trades peut sous-estimer le risque réel.

Le problème du backtest unique

Imaginez une stratégie qui a effectué 120 trades sur deux ans de données BTC. Le backtest affiche une courbe d'équité qui monte de gauche à droite. La tentation est d'en conclure : « ça marche ».

Le problème, c'est que cette courbe est un seul chemin parmi une infinité de chemins possibles. L'ordre exact dans lequel les trades gagnants et perdants se sont enchaînés est en grande partie le fruit du hasard historique. Si les trois plus gros gains de la stratégie étaient tombés au début plutôt qu'à la fin, la courbe ressemblerait à tout autre chose. Si une série de cinq pertes consécutives avait frappé un peu plus tôt, le compte aurait pu toucher un creux beaucoup plus profond — voire ne jamais s'en remettre.

Un backtest est donc une anecdote : « voici ce qui se serait passé, dans cet ordre précis, sur cette période précise ». Ce n'est pas une preuve que l'avantage (l'edge) est réel et reproductible. Deux dangers guettent :

  • Le survivant chanceux. Une stratégie sans aucun edge réel peut produire, par pure chance, une courbe flatteuse sur un échantillon donné. C'est le piège classique : plus on teste de variantes, plus on a de chances d'en trouver une qui « marche » par accident (data-snooping).
  • Le drawdown invisible. Même une stratégie au véritable edge peut, dans un ordre de trades légèrement différent, traverser une série de pertes assez longue pour ruiner le compte avant que l'avantage ne se manifeste.

La question pertinente n'est donc pas « est-ce que cette courbe monte ? » mais « dans combien de scénarios plausibles cette stratégie reste-t-elle gagnante, et dans combien finit-elle au tapis ? ». C'est exactement ce que le Monte Carlo cherche à mesurer.

Le ré-échantillonnage bootstrap : mille histoires d'un même edge

L'idée du Monte Carlo par bootstrap est simple et élégante. On garde les trades produits par le backtest — leur P&L individuel, leur « ADN » statistique — mais on rebat les cartes : on tire au sort une nouvelle séquence de trades à partir du même jeu, puis on reconstruit une courbe d'équité. On répète ce tirage des milliers de fois.

Voici comment c'est implémenté sur Strategy Arena (backend/backtesting/backtest_engine.py, méthode monte_carlo_simulation) :

Pour chaque simulation (1000 par défaut côté serveur) :
    1. Tirer N trades AVEC REMISE parmi les N trades du backtest
       (bootstrap : un même trade peut sortir plusieurs fois, un autre jamais)
    2. Reconstruire une courbe d'équité en additionnant les P&L tirés
    3. Mesurer le capital final et le drawdown maximum de cette courbe

Chaque simulation produit ainsi une courbe d'équité alternative : un univers parallèle dans lequel le même edge sous-jacent s'est exprimé dans un ordre différent. En empilant 1 000 univers, on ne regarde plus un point unique mais une distribution complète de résultats.

Concrètement, la stratégie tire les indices au hasard (np.random.randint), additionne les P&L en dollars (additif plutôt que composé, pour rester correct aussi bien pour une stratégie de type DCA que pour une stratégie classique), borne l'équité à zéro (un compte ne peut pas devenir négatif), et suit le pic d'équité pour calculer le drawdown maximum de chaque trajectoire.

Le tirage avec remise est le cœur du procédé : c'est lui qui introduit de la variance entre les simulations. Sans remise, on ne ferait que permuter le même jeu de trades et le capital final additif serait toujours identique.

La version par défaut effectue 1 000 simulations côté serveur. La version interactive de /playground, qui tourne intégralement dans votre navigateur, en effectue 500 pour rester instantanée — assez pour une distribution stable.

Lire l'éventail : percentiles et histogramme

Une fois les milliers de capitaux finaux collectés, le moteur les résume. Les sorties réelles sont les suivantes :

Sortie Ce qu'elle dit
Capital final moyen / médian Le résultat « central » attendu
Meilleur cas / pire cas Les extrêmes observés sur l'ensemble des tirages
Écart-type La dispersion : à quel point les résultats varient
Percentiles p5 / p25 / p50 / p75 / p95 L'éventail complet des capitaux finaux
Percentiles de drawdown maximum L'éventail des creux les plus profonds
Histogramme (20 classes) La forme de la distribution des capitaux finaux
15 courbes-échantillon Une poignée d'univers parallèles à visualiser

Comment lire ça ?

  • La médiane (p50) est votre scénario central honnête — plus fiable que le résultat unique du backtest, parce qu'elle agrège des milliers de chemins.
  • L'écart entre p5 et p95 est la mesure clé de l'incertitude. Un éventail serré (p5 proche de p95) signale une stratégie régulière : quel que soit l'ordre des trades, on atterrit dans une fourchette étroite. Un éventail béant signale une stratégie dont le résultat dépend fortement de la chance.
  • Le p5 du capital final répond à « dans le pire 5 % des scénarios, où finit le compte ? ». S'il est en dessous du capital initial, cela veut dire qu'un scénario malchanceux mais plausible fait perdre de l'argent.
  • Les percentiles de drawdown racontent l'inverse : le p95 du drawdown maximum indique à quel creux il faut être psychologiquement et financièrement prêt à survivre.
  • L'histogramme donne la forme. Une distribution resserrée et entièrement à droite du capital initial = bon signe. Une distribution étalée qui chevauche largement la ligne de mise de départ = avantage fragile.

Les 15 courbes-échantillon servent à donner une intuition visuelle : on voit littéralement le même edge tracer 15 trajectoires différentes, certaines fulgurantes, d'autres pénibles.

Probabilité de profit vs probabilité de ruine

Deux chiffres condensent l'essentiel de la distribution :

  • prob_profit = pourcentage de simulations finissant au-dessus du capital initial. C'est la fraction des univers parallèles dans lesquels la stratégie gagne de l'argent. Une stratégie à prob_profit de 90 % gagne dans 9 scénarios sur 10 ; à 55 %, elle est à peine au-dessus du pile ou face.
  • prob_ruin = pourcentage de simulations perdant 50 % ou plus du capital initial. C'est la fraction des univers dans lesquels le compte est sévèrement amputé. Une prob_ruin non négligeable est un signal d'alerte majeur, même si la prob_profit est haute : cela signifie qu'il existe des enchaînements de pertes plausibles capables de dévaster le compte.

Ces deux métriques se lisent ensemble. Une stratégie qui gagne souvent un peu mais se ruine parfois beaucoup (forte prob_profit, mais prob_ruin non nulle) n'a pas le même profil de risque qu'une stratégie régulière qui ne se ruine jamais. C'est précisément cette nuance qu'un backtest unique masque entièrement.

Le robustness score

Pour résumer le tout en un seul nombre comparable entre stratégies, le moteur calcule un score de robustesse de 0 à 100. Voici la formule exacte utilisée :

robustness = (
    prob_profit * 0.4                       # 40 % : probabilité de profit
    + max(0, 100 - std_return) * 0.3        # 30 % : régularité (faible dispersion)
    + max(0, 100 - prob_ruin * 5) * 0.3     # 30 % : survie
)
# borné entre 0 et 100

std_return est l'écart-type des capitaux finaux exprimé en pourcentage du capital initial.

Décortiquons les trois composantes :

  1. Probabilité de profit (poids 40 %). Plus la stratégie gagne dans un grand nombre d'univers, plus ce terme est élevé. C'est le cœur de l'edge.
  2. Régularité (poids 30 %). On part de 100 et on retranche la dispersion (std_return). Une stratégie dont les résultats sont resserrés autour de la médiane est récompensée ; une stratégie erratique est pénalisée. Si la dispersion dépasse 100 %, le terme est plafonné à zéro.
  3. Survie (poids 30 %). On part de 100 et on retranche prob_ruin × 5. Le facteur 5 rend ce terme très sévère : il suffit d'une prob_ruin de 20 % pour annuler complètement cette composante. La survie n'est pas négociable.

Un score élevé décrit une stratégie qui gagne souvent, varie peu et se ruine rarement. Un score faible signale soit un edge incertain, soit une dispersion ingérable, soit un risque de ruine inacceptable — voire les trois.

Le score n'est pas une note de « performance » au sens des gains attendus. C'est une note de fiabilité : à quel point peut-on faire confiance au fait que la courbe observée n'était pas un coup de chance.

Fais-le toi-même

Le plus parlant, c'est de manipuler la chose vous-même. La page /playground embarque un Monte Carlo interactif, intégralement côté navigateur — aucun appel serveur, coût zéro, et des données issues de vraies arènes de simulation.

Vous pouvez :

  • Bouger les curseurs de paramètres d'une stratégie et relancer le backtest puis le Monte Carlo à la volée ;
  • Observer l'éventail des percentiles (p5/p95), la jauge de robustesse et les courbes-échantillon se redessiner instantanément ;
  • Comparer le comportement de deux réglages pour voir lequel survit le mieux au rebattage des cartes — la jauge affichée résume la part des simulations qui restent profitables ;
  • Exporter vos résultats en CSV et PDF, et même générer un script Pine Script pour TradingView.

Pour lancer un Monte Carlo sur une stratégie existante avec l'interface complète (et le score de robustesse à trois composantes décrit plus haut), passez par /backtest. Et pour voir des résultats déjà publiés sur des stratégies suivies, consultez /live-mc-results.

L'exercice le plus instructif : prenez une stratégie qui « a l'air géniale » sur sa courbe de backtest, lancez le Monte Carlo, et regardez où tombe le p5. Vous comprendrez vite pourquoi une seule courbe ne suffit jamais.

Une fois la robustesse établie, l'étape suivante est de comprendre d'où vient l'edge : un avantage concentré dans une seule phase de marché reste fragile, même avec un bon robustness score. Pour ça, voir l'article frère : détecter un régime de marché avec le prix seul.

Questions fréquentes

Le Monte Carlo prédit-il mes gains futurs ?

Non. Le Monte Carlo par bootstrap rebat les trades passés ; il mesure à quel point le résultat historique dépendait de l'ordre des trades, donc la robustesse de l'edge. Il ne dit rien des conditions de marché futures, qui peuvent différer radicalement du passé. C'est un test de fiabilité, pas une boule de cristal.

Quelle différence entre un bon et un mauvais robustness score ?

Un score élevé décrit une stratégie qui gagne dans la grande majorité des univers simulés (prob_profit haute), avec des résultats resserrés (std_return faible) et un risque de ruine quasi nul. Un score faible révèle qu'au moins une de ces trois conditions échoue. Le facteur de survie étant pondéré sévèrement (prob_ruin × 5), une stratégie qui se ruine ne serait-ce que dans quelques pour cent des cas voit son score chuter fortement.

Pourquoi tirer les trades « avec remise » ?

Parce que c'est ce qui crée de la variance entre les simulations. Si l'on se contentait de permuter le même jeu de trades sans remise, le capital final additif serait toujours identique d'une simulation à l'autre. Le tirage avec remise génère des séquences réellement différentes — certaines avec plus de gagnants, d'autres avec des grappes de perdants — et c'est cette diversité qui révèle la distribution des issues possibles.

Combien de trades faut-il pour que ce soit fiable ?

Le moteur exige un minimum de 3 trades, mais c'est un plancher technique, pas une recommandation. Sur 3 ou 10 trades, le bootstrap n'a presque rien à rebattre et la distribution reste pauvre. Pour des conclusions sérieuses, on veut idéalement plusieurs dizaines, voire centaines de trades, afin que le ré-échantillonnage explore une vraie variété de séquences.

Méthodologie & limites

Soyons précis sur ce que ce test fait et ne fait pas.

Données. Le Monte Carlo part des trades produits par un backtest sur données de marché réelles (prix historiques). Côté serveur, 1 000 simulations ; en version interactive /playground, 500. Les P&L sont additionnés (additif, pas composé) et l'équité est bornée à zéro. Sorties : moyenne/médiane/meilleur/pire/écart-type des capitaux finaux, percentiles p5..p95 du capital et du drawdown maximum, histogramme à 20 classes, 15 courbes-échantillon, prob_profit, prob_ruin et robustness_score.

Hypothèse centrale — et sa limite. Le ré-échantillonnage bootstrap suppose que les trades sont approximativement indépendants et identiquement distribués (IID). C'est une simplification. Les marchés réels présentent de l'autocorrélation et du clustering de volatilité : les périodes agitées s'enchaînent, les séries de pertes sont souvent corrélées entre elles. En rebattant les trades comme s'ils étaient indépendants, le bootstrap peut donc sous-estimer le risque de longues séries de pertes et lisser des creux que la réalité produirait plus durs.

Ce que le test ne prouve PAS. Il ne prouve pas que la stratégie sera rentable demain. Il ne capture pas un changement de régime de marché, ni le slippage, ni les frais au-delà de ce que le backtest sous-jacent intègre. Un robustness score élevé signifie « cette courbe n'était probablement pas un pur coup de chance », pas « cette stratégie est garantie ».

Comment compléter. Le Monte Carlo par reshuffle est une première barrière, pas la dernière. Pour aller plus loin :

  • le walk-forward teste la stratégie sur des fenêtres temporelles successives (entraînement puis validation hors échantillon), ce qui attaque le sur-apprentissage ;
  • le block bootstrap rééchantillonne par blocs de trades consécutifs plutôt que trade par trade, ce qui préserve une partie de l'autocorrélation et corrige justement la faiblesse IID décrite ci-dessus.

La discipline du labo. Sur Strategy Arena, une stratégie n'est jamais promue sur la seule beauté de sa courbe : elle doit survivre au Monte Carlo — robustness score solide, prob_ruin maîtrisée, éventail de percentiles raisonnable — avant d'aller plus loin. C'est une étape du processus de validation détaillé dans /methodology et /trading-strategy-validation. Pour les définitions des termes (Brier, Sharpe, drawdown, Monte Carlo…), voir le /glossary.


Strategy Arena est une plateforme éducative de simulation (paper-trading) et un laboratoire de recherche. Les stratégies y sont conçues par IA, exécutées sur des données simulées. Rien de ce qui précède ne constitue un conseil financier ni une promesse de performance. Le trading comporte un risque de perte ; testez et apprenez avant tout.

⚠️ Avertissement — Cet article est publié à titre informatif et éducatif uniquement. Il ne constitue en aucun cas un conseil en investissement ou une recommandation d'achat/vente. Les performances passées ne préjugent pas des performances futures. Strategy Arena est un simulateur éducatif avec capital virtuel. Faites vos propres recherches avant toute décision d'investissement.

Cet article vous a plu ? Partagez-le

𝕏 Partager sur X ✈️ Telegram