Page 1 sur 1

Auditer sa stratégie de trading

Publié : 09 sept. 2026, 14:22
par JavierCloks
Les deux messages précédents publiaient des outils. Celui-ci décrit la démarche dans laquelle ils s'insèrent, parce que les scripts ne servent à rien si l'ordre des questions est mauvais.

J'ai appliqué cette méthode à mon propre historique récemment. Elle m'a conduit à démonter successivement trois conclusions que je croyais solides, dont deux que j'avais moi-même formulées quelques heures plus tôt. C'est inconfortable et c'est exactement le but recherché.

Le principe directeur

Une seule idée gouverne tout ce qui suit : toute conclusion doit être comparée à une référence aléatoire.

Constater que vos gros trades marchent mieux, que vos sorties sont bien placées, ou que le créneau de 15h30 vous réussit, ne veut rien dire tant que vous n'avez pas mesuré ce qu'aurait donné le hasard sur le même échantillon. Dans la quasi-totalité des cas, le hasard fait aussi bien, et c'est ce que personne ne vérifie.

Tout le reste n'est que la mise en œuvre de ce principe sur des questions successives.

Étape 1 : recalculer son résultat à taille constante

Exportez votre historique depuis MT5, onglet Historique, clic droit, Rapport, XLSX. Puis recalculez votre performance en imaginant que vous ayez pris exactement les mêmes positions avec toujours le même lot.

L'écart entre ce résultat équipondéré et votre résultat réel vous dit d'où vient votre performance. Chez moi : +782 € en réel, −17 € à taille constante. Autrement dit, mon signal d'entrée ne rapporte rien de mesurable, et la totalité de mon résultat provient du dimensionnement.

Formulez-le en une identité, ça clarifie tout :

E[taille × résultat] = E[taille] × E[résultat] + Cov(taille, résultat)

Le premier terme est votre stratégie, le second votre gestion. Beaucoup de gens qui croient avoir un edge d'entrée ont en fait un terme de covariance.

Vérifiez aussi votre intervalle de confiance à ce stade. Si zéro tombe dedans, vous ne pouvez rien conclure sur vos entrées, ni en bien ni en mal.

Étape 2 : tester le dimensionnement contre le hasard

Si votre résultat vient du sizing, il reste à savoir si ce sizing porte de l'information ou s'il a simplement bien tombé.

Le test : gardez exactement le même jeu de tailles et le même jeu de résultats, redistribuez les tailles au hasard sur les trades, vingt mille fois, et regardez où tombe votre résultat réel dans la distribution obtenue.

Chez moi : 85e centile, p = 0,145, avec un écart-type des tirages aléatoires de 840 € pour un gain de 782 €. Traduction : mon sizing est peut-être informatif, je ne peux pas le prouver, et le bruit est aussi gros que le résultat.

Ce dernier chiffre est le plus important de l'étape. Si l'écart-type des permutations est du même ordre que votre gain total, votre historique ne permet de conclure à rien, quel que soit le centile affiché.

Étape 3 : télécharger le M1 et reconstituer les trajectoires

C'est ici que la plupart des audits s'arrêtent, et c'est dommage, parce que c'est là que se trouve l'information la plus utile.

Le rapport de courtier ne contient que les prix d'entrée et de sortie. Il vous dit ce que chaque position a rapporté, jamais ce qu'elle vous a fait traverser. Pour le savoir, il faut croiser vos positions avec l'historique de prix en unité fine.

Sous MT5 : Voir puis Symboles, ou Ctrl+U. Sélectionnez l'instrument, onglet Barres, période M1, renseignez les dates avec un peu de marge, cliquez Demander pour que le terminal télécharge réellement l'historique depuis le serveur, puis Exporter les barres. Ce clic sur Demander n'est pas optionnel : sans lui vous exportez ce que le terminal a en cache, c'est-à-dire à peu près rien.

Vous obtenez alors, pour chaque position, la MAE et la MFE — pire creux et meilleur sommet atteints pendant la vie de la position. Quelques pièges à connaître :
  • Les barres M1 sont construites sur le Bid. Vos achats entrent à l'Ask. Le CSV contient une colonne spread barre par barre, servez-vous-en plutôt que d'estimer.
  • Les timestamps sont en heure serveur, comme ceux du rapport, donc aucune conversion. Vérifiez quand même sur une position connue.
  • Les low et high de barres M1 lissent les mèches intra-minute : votre MAE réelle est légèrement pire que celle que vous calculerez.
  • Validez votre reconstruction avant de l'exploiter : recalculez le P&L de clôture à partir des barres et comparez-le au rapport. Chez moi, erreur médiane de 1 € et corrélation de 0,97. Si ça ne colle pas, c'est la valeur du point ou la convention bid/ask qui cloche.
Étape 4 : le piège des variables endogènes

Voici l'erreur que j'ai commise, et je la détaille parce qu'elle est très répandue.

En segmentant mes trades par durée de détention, j'ai obtenu un tableau spectaculaire : positions tenues moins de 15 minutes, +1 532 € ; au-delà, −745 €. Conclusion apparemment évidente : mettre un time-stop à 15 minutes.

C'est faux, pour deux raisons.

D'abord parce que le contrefactuel était incohérent. Il supposait que les perdantes coupées à 15 minutes l'auraient été à leur perte finale, et que les gagnantes coupées à 15 minutes auraient conservé leur gain final. Les deux hypothèses ne peuvent pas être vraies en même temps. Une fois les trajectoires M1 reconstituées, le calcul correct donnait −2 393 € au lieu de +782 €. J'avais inversé le signe d'une recommandation.

Ensuite et surtout, parce que la durée est une conséquence, pas une cause. Durée médiane de mes gagnantes : 1,9 minute. De mes perdantes : 12,5 minutes. Ce n'est pas que les trades courts gagnent, c'est que je coupe vite quand ça marche et que je tiens quand ça ne marche pas. Segmenter par durée, c'est conditionner sur le résultat : le tableau était condamné à montrer ce qu'il a montré, quelle que soit la qualité de ma méthode.

Le critère à retenir : une variable ne peut servir de règle que si elle est observable au moment de la décision. L'heure d'entrée, l'instrument, le sens, la taille, la volatilité récente le sont. La durée, le résultat, le fait que la position ait fini gagnante ne le sont pas.

C'est aussi pourquoi un stop-loss, lui, est testable honnêtement : son seuil se décide à l'entrée. Chez moi, le balayage complet a montré qu'aucun niveau inférieur à 300 points n'améliorait quoi que ce soit — résultat contre-intuitif, mais méthodologiquement valide, contrairement au précédent.

Étape 5 : comparer chaque « compétence » à une référence aléatoire

Puisque les time-stops échouaient tous, j'en avais conclu que ma sortie discrétionnaire valait quelque chose. Deuxième erreur, et même nature que la première : j'avais comparé ma sortie à de mauvaises alternatives, pas au hasard.

Le bon test : comparer sa sortie effective à une sortie prise au hasard dans une fenêtre comparable. Résultat chez moi : sortie aléatoire dans les 120 minutes suivant l'entrée, moyenne +664 €, écart-type 1 272 €, et mon résultat réel au 53e centile. Aucune compétence de sortie. Ce qui échouait, c'était de sortir tôt, pas de sortir au mauvais moment.

Faites le même test pour vos entrées : gardez le sens, le symbole, la taille et le jour, mais tirez l'heure d'entrée au hasard dans la séance. Chez moi, 90e centile pour p = 0,097, avec une référence aléatoire déjà largement positive — ce qui suggère que l'essentiel vient du choix de sens et de jour, pas de la minute d'entrée.

Ces tests de référence aléatoire sont, de très loin, ce que cette méthode apporte de plus utile. Ils coûtent dix lignes de code et ils démolissent la plupart des croyances qu'on entretient sur son propre trading.

Étape 6 : découper en deux moitiés

Tout ce qui précède reste une recherche menée dans vos propres données. Chaque paramètre testé consomme du degré de liberté, et une stratégie trouvée par balayage est optimale sur le passé par construction.

Le garde-fou minimal, avant même de parler de walk-forward : coupez la période en deux et vérifiez que l'effet tient dans les deux moitiés. Un effet présent dans une seule est un artefact jusqu'à preuve du contraire.

Chez moi, un seul résultat a passé ce filtre : l'allongement de l'horizon de détention. Sortie mécanique à 360 minutes, +4 112 € sur la première moitié, +3 830 € sur la seconde, contre +684 € et +99 € en discrétionnaire. La stabilité entre les deux sous-périodes, et le fait que la courbe forme un plateau large entre 120 et 360 minutes plutôt qu'un pic étroit, sont ce qui rend ce résultat crédible. Un pic étroit aurait signalé du surajustement.

Étape 7 : normaliser par le risque avant de comparer

Dernière étape, et elle est indispensable. Comparer des P&L bruts entre stratégies n'a aucun sens si elles n'engagent pas le même risque.

L'unité de comparaison est la MAE, parce qu'elle mesure ce que le compte doit pouvoir absorber, pas ce qu'il finit par perdre. Ramenez chaque variante à un budget de perte flottante identique — par exemple 1 000 € par séance — en ajustant les lots proportionnellement, puis comparez les P&L obtenus.

Sans cette normalisation, j'aurais comparé +782 € à +7 942 € en oubliant que la seconde variante traverse un flottant deux fois plus profond. Après normalisation, l'écart restait de un à cinq — mais c'est un chiffre qu'on a le droit d'écrire, contrairement à l'autre.

Récapitulatif
  • Exporter le rapport et recalculer le résultat à taille constante. Signal ou sizing ?
  • Tester le sizing contre une redistribution aléatoire des mêmes tailles.
  • Télécharger le M1, reconstituer MAE et MFE, valider la reconstruction contre le rapport.
  • N'utiliser que des variables observables à l'entrée. Bannir toute segmentation par durée ou par résultat.
  • Comparer chaque compétence supposée — entrée, sortie, sizing — à une référence aléatoire.
  • Découper en deux moitiés et ne retenir que ce qui tient dans les deux.
  • Normaliser par la MAE avant toute comparaison de performance.
  • Valider en avant, en démo, sur 150 à 200 positions, avant de toucher au réel.
Ce que cette méthode ne vous donnera pas

Elle ne vous donnera pas de certitude. Sur 200 trades et deux mois, les intervalles de confiance restent larges et la plupart des questions restent ouvertes. Pour établir un edge d'entrée de l'ordre de 0,02 % par trade, il faut compter 1 500 à 2 000 positions.

Elle ne vous dira pas non plus si votre stratégie survivra au prochain régime de marché. Mon échantillon ne contient aucune séance de tendance forte et soutenue, qui est précisément le scénario qui punirait le plus une détention longue sans stop. L'absence d'un tel jour dans les données n'est pas une preuve qu'il n'arrivera pas.

Ce qu'elle vous donnera, en revanche, c'est la liste de ce que vous croyiez savoir et que vos données ne soutiennent pas. Dans mon cas, ça faisait trois entrées, dont deux formulées par moi-même le matin même. C'est déjà beaucoup.

Les deux scripts publiés dans les messages précédents couvrent les étapes 1, 2 et une partie de la 6. Le reste tient en une centaine de lignes de pandas ; si ça intéresse du monde, je peux publier la chaîne complète.