Les principaux critères d’évaluation d’une stratégie de trading

Que l’on soit trader discrétionnaire (manuel), ou algo trader voire développeur d’algorithme de trading, il est important de connaître et comprendre les principaux critères d’évaluation d’une stratégie de trading.

Je ne vais pas ici en faire une liste exhaustive, mais me focaliser sur ceux que j’estime être les plus importants. La qualité d’une stratégie se mesure en terme, bien évidemment, de performance, mais aussi de risque pris, et de fréquence (donc de vitesse).

Une stratégie peut être particulièrement performante et peu risquée, mais si elle ne produit que quelques trades par an, on est en droit de se poser des questions sur la pertinence du back test qui a été réalisé.

Quelques définitions…

Profit Factor: Le facteur de profit représente le rapport entre le gain brut et la perte brute de la stratégie sur une période donnée. Ainsi, une stratégie commencera à être gagnante dès que le facteur profit dépassera le seuil de valeur 1. Plus le facteur profit sera élevé, et meilleure sera la performance de notre stratégie. Généralement, on commence à avoir une jolie courbe de progression de notre capital au-delà de 1.20. Au-delà de 2, cela commence à être bien plus confortable.

L’information donnée par le facteur de profit ne permet pas toutefois d’estimer le risque réel associé à la stratégie. Par exemple, si notre stratégie génère 200.000EUR bruts de gains sur 10 ans, avec 150.000EUR de pertes brutes, nous obtenons donc in fine +50.000EUR nets sur 10 ans, ce qui donne un facteur profit de 1.33. La répartition des 150.000 EUR de pertes au long de notre période de test est toutefois très importante. En effet, + ces pertes vont être réparties uniformément tout au long de la période, et + l’évolution de notre capital se fera de manière constante. Imaginons une alternance parfaite entre nos trades gagnants et nos trades perdants, comme par exemple 1 gagnant, suivi de 1 perdant, suivi de 1 gagnant, etc…. Cette répartition homogène va nous permettre de limiter au mieux la “marge de sécurité” de notre capital. Malheureusement, cette répartition idéale entre trades gagnants/trades perdants au file du temps relève du fantasme. Dans la vraie vie, le meilleur des systèmes de trading ne pourra jamais échapper à des séries de trades perdants qui vont ainsi provoquer des baisses plus ou moins importantes du capital d’où la notion de DrawDown.

Drawdown: ainsi le drawdown est un excellent indicateur du risque de notre stratégie. il permet de mesurer “les mouvements de pertes successives”, et est généralement calculé en % du capital. On doit ainsi veiller à ce que le drawdown maximal de notre stratégie ne dépasse pas une certaine valeur que chacun doit se fixer en fonction de son appétence au risque et du capital investi. Risquer 30% de 1000EUR n’est pas la même chose que de risquer 30% sur 100.000EUR. Une valeur qui semble faire consensus dans les algorithmes de trading se situe aux alentours de 20%. Evidemment, plus cette valeur sera faible, et meilleure sera la stratégie. Il ne faut toutefois pas perdre de vue que les résultats du passé ne peuvent en aucun cas garantir les performances à venir. Nous les utilisons faute de mieux, en attendant de savoir prédire l’avenir! Connaître cette valeur maximale de drawdown est toutefois primordiale car cela sert de point de référence pour estimer qu’une série de trades perdants est “normale” ou “anormale” si l’on vient à excéder le drawndown max historique, auquel cas une réévaluation de la stratégie semble nécessaire.

RiskReward / WinRate

Le RiskReward représente le rapport entre la moyenne des trades perdants sur la moyenne des trades gagnants. Si nous avons une stratégie avec un TakeProfit fixe à 100 points et un StopLoss fixe à 50 points, alors notre RiskReward sera aux alentours de 1/2 (aux alentours car dans la vraie vie, il faut retirer les frais et le slippage). Le RiskReward peut être fixe dans le cas où la stratégie utilise des conditions de sortie constantes(TP et SL fixes comme dans notre exemple), ou il peut être un RiskReward moyen sur la période si notre stratégie utilise des conditions de sortie variables (sur trailing stop, ATR, moyennes mobiles ou autre).

Evidemment, plus les gains moyens seront importants vis à vis des pertes moyennes, et meilleure sera notre stratégie car elle sera d’autant plus capable de récupérer de ses pertes. Un rapport de 1 / 2 semble être le minimum requis pour qu’une stratégie soit rentable. Certaines stratégies peuvent proposer des rapports bien plus intéressants, comme 1/5 ou encore 1/10.

Toutefois, plus une stratégie va chercher des gains importants, tout en limitant les pertes moyennes, et plus le taux de trades gagnants en sera impacté négativement.

D’où la notion de WinRate qui représente tout simplement le taux de trades gagnants sur notre période.

Toutes ces notions sont bien évidemment interconnectées les unes aux autres, et il est difficile d’obtenir d’excellents scores à chacune d’entre elles au sein d’une même stratégie.

Stratégies gagnantes avec 30% de trades gagnants

Ce qui me semble être important de comprendre, c’est qu’une stratégie n’a pas besoin d’avoir un WinRate élevé pour être rentable, et il s’agit là d’une erreur fréquemment commise.

Vous pouvez par exemple mettre en oeuvre une stratégie avec + de 95% de trades gagnants, mais qui au final aura un risque élevé d’être perdante, alors qu’à côté de cela, vous pouvez avoir une stratégie avec un WinRate inférieur à 30% mais qui affichera des gains très satisfaisants tout en limitant les risques.

Dans le premier cas, pour assurer un WinRate > 90%, il va être nécessaire de travailler l’entrée avec une extrême précision (d’où un risque élevé de suroptimisation), et probablement de prendre un StopLoss très élevé. Le fait de mettre un StopLoss très grand va avoir plusieurs conséquences sur notre stratégie:

1/ un risque de drawdown important très élevé. il faut toujours prévoir que l’on puisse avoir plusieurs pertes consécutives même si l’historique nous dit le contraire. combien de trades perdants pourrons nous supporter avant d’ être en faillite ou en dépression?

2/ afin de pouvoir supporter plusieurs pertes consécutives, il faut que notre capital de trading soit dimensionné en conséquence, ce qui va bloquer une grande part de notre capital qui ne sera pas utilisé pour le trading la grande majorité du temps => perte d’efficacité

Pour pallier à ces problèmes, on peut aussi considérer que le capital investi peut être perdu à tout moment. Si notre capital est multiplié par 2 tous les 3 mois, on peut effectivement envisager de pouvoir perdre notre mise une fois par an par exemple. Le système restera alors très rentable.

A l’opposé, nous pouvons avoir une stratégie avec un StopLoss très serré, donc un WinRate assez faible, mais des gains attendus qui peuvent être 5 à 10 fois supérieur aux pertes. On dira alors que la stratégie a une bonne capacité à récupérer de ses pertes.

Que privilégier: WinRate ou RiskReward ?

Mon avis sur la question est basé sur mon expérience personnelle et n’engage bien entendu que moi.

Au début de mon apprentissage sur le développement de robots de trading, j’étais focalisée sur le WinRate. J’avais du mal à accepter les pertes et je recherchais un système qui aurait presque toujours raison!

Je suis ingénieur, et issue d’un milieu éducatif et professionnel où il n’y a pas de place à l’approximation. Quand on nous demande de résoudre un problème, on doit le faire de manière précise et juste. Mais cela ne peut pas s’appliquer au monde de la prédiction, et notamment quand il s’agit de marchés financiers.

Ainsi, une approche visant à créer un système de trading rentable à condition d’avoir raison 70% du temps, voire plus, me semble particulièrement risqué.

Lors de la phase d’optimisation, vous pourrez toujours, à condition d’y mettre le temps et les efforts nécessaires, obtenir un système qui affichera 80% de trades gagnants sur votre historique de données. Toutefois, ce WinRate obtenu sur votre période de test et utilisée pour votre optimisation, ne sera qu’au mieux une grossière approximation de votre WinRate réel.

Il est possible de séparer le jeu de données en un jeu pour l’optimisation et un jeu pour l’évaluation. Il s’agit d’une bonne pratique généralement appliquée aux modèles prédictifs. Toutefois, dans le cas des marchés financiers, nous sommes dans ce que l’on appelle des données non stationnaires (contrairement à des données météorologiques par exemple). Cela signifie que nous sommes en permanence en terrain inconnu, et qu’une courbe peut exploser ses anciens records ou chuter, etc… Le WinRate restera toujours à mes yeux une inconnue. Nous pouvons au mieux estimer qu’il se situe entre une valeur “minimale” correspondant à notre stratégie non optimisée, et une valeur maximale correspondant à notre stratégie avec optimisation. La réalité est donc quelque part entre les 2. J’émets ainsi des limites basses/hautes strictes et des limites basses/hautes probables :

WinRate min strict = WinRate avant Optimisation

WinRate max strict = WinRate après optimisation

WinRate min probable = WinRate après optimisation + (WinRate après optimisation – WinRate avant Optimisation) / 2

WinRate max probable = WinRate après optimisation

Le RiskReward quant à lui est une donnée connue avec précision puisque c’est nous qui la fixons. Elle peut être soit fixe (cas où TP et SL sont fixes), auquel cas les seules variations seront dues au slippage notamment. Elle peut être également une moyenne obtenue sur la période de test dans le cas où les critères de sortie dépendent du marché (sorties sur ATR, moyennes mobiles, etc…), et dans ce cas nous ne devrons pas oublier que le RiskReward sera sujet à variation autour de cette moyenne (écart type) et en tenir compte dans l’évaluation de notre stratégie.

Mettons que l’on ait un RiskReward très favorable de 1 /5, c’est à dire que chaque trade gagnant va couvrir 5 trades perdants. Notre stratégie est donc théoriquement à l’équilibre à partir de seulement 20% de trades gagnants.

A partir de ce constat, si nous trouvons une stratégie qui, avant toute optimisation, génère au minimum 20% de trades gagnants avec un Risk Reward de 1/5, alors on peut supposer qu’en y ajoutant de l’optimisation, notre système devrait être gagnant, et au pire, à l’équilibre.

Ce qu’il faut bien retenir, c’est que + le RiskReward est favorable, et + on pourra supporter un taux d’erreur important sur l’estimation du WinRate, ce qui n’est pas négligeable.

Le travail d’optimisation, quand il est réalisé avec expérience et justesse, peut alors agir de manière efficace en vue d’augmenter le WinRate.

Rien de mieux que des exemples:

Stratégie NASDAQ avec 30% de trades gagnants, RiskReward de 1 / 3

Il s’agit ici d’une stratégie sur Nasdaq future, sur croisement macd en 15min et autres critères, avec un tout début d’optimisation (seulement 10 filtres ont été appliqués pour le moment).

La stratégie était légèrement gagnante avant optimisation, optimisation qui vise donc à éviter d’ouvrir une position dans les cas les plus manifestes de mauvais positionnement (basé sur analyse technique).

Le facteur profit est encore assez faible avec 1.27 mais cela n’empêche pas la courbe d’être très favorable notamment dû à la fréquence importante de trades générés.

Stratégie BTCUSD rentable à partir de 20% de trades gagnants, RiskReward de 1/5

Le BTC est particulièrement intéressant à trader en automatique, car il présente régulièrement de belles envolées ou à l’inverse de formidables chutes. Cette stratégie met en œuvre un StopLoss particulièrement serré, à 200points seulement, ce qui induit de nombreux échecs. Les profits quant à eux sont dynamiques, la clôture de position étant opérée sur une bougie M15 inverse dépassant 1% de la bougie précédente. Ce critère simple permet d’obtenir régulièrement des trades avec des profits très élevés. Les profits ne sont pas optimisés sur la plupart des trades, mais cette approche reste dans l’ensemble très favorable et a donc été conservée pour le moment.

Voici les résultats obtenus avant optimisation:

et ceux obtenus après optimisation (après 50 arbres de décision):

On constate que le WinRate historique est monté à 45%, ce qui a fait grimper le facteur profit à 5.29. Selon nos hypothèses, notre WinRate réel devrait donc se situer de manière quasi certaine entre 21% et 45%, et de manière très probable entre 33% et 45%.

Les pertes consécutives peuvent être très nombreuses, avec un maximum de 20, ce qui n’empêche pas la stratégie de s’en remettre assez facilement. Le capital doit donc être suffisant pour supporter ces pertes.

Bien backtester sa stratégie: l’effet “glissement”

Pour mener à bien le backtest de sa stratégie sous MetaTrader, de nombreuses choses sont à prendre en compte, dont on prend conscience généralement progressivement, après avoir fait des erreurs.

Je vais vous parler ici de ce que j’ai appelé l’effet “glissement”.

Il s’agit d’un effet insidieux dont on peut facilement oublier de tenir compte lors des simulations réalisées.

Généralement, une stratégie d’émission de signaux de trading va tenir compte des positions ouvertes. Cela est indispensable pour ne pas générer un trade par minute… Ainsi donc, on émet un trade, et tant que ce trade est ouvert, la stratégie peut être de ne pas ouvrir d’autre trade dans la même direction, ou dans les 2 directions, ou encore elle peut autoriser un autre trade mais à condition qu’il y ait 2h d’intervalle, etc…, etc… Une grande variété de possibilités, mais ces choix doivent être pris tôt dans la conception de notre robot.

Ce dont il faut bien avoir conscience, c’est que par la suite, à chaque modification de l’algorithme, les cartes vont être remélangées, et il va alors être nécessaire de réévaluer la situation.
Par exemple, si vous avez des critères avec des seuils permettant de quantifier un gradient de moyenne mobile, ou un éloignement à un support clé, votre trade sera peut-être bloqué au moment T1, mais sera autorisé un peu plus tard, quand la situation du marché aura légèrement évolué, disons au moment T2.
Ce nouveau trade au moment T2 n’était pas visible auparavant. Il s’agit donc d’un nouveau trade, qui peut-être gagnant, ou perdant.

Si vous avez opté pour la rédaction manuelle d’arbres de décision, cet état de fait peut-être pris en considération en relançant régulièrement les simulations sur la période complète, ceci plusieurs fois lors de la rédaction d’un arbre de décision, et SURTOUT, entre chaque arbre de décision.

Quelle que soit votre approche dans la conception de votre robot, la clé est donc d’être en mesure de lancer des simulations très régulièrement, à chaque fois que vos modifications ont été en mesure de modifier le paysage de vos trades. Sans cela, vous allez travailler sur la base d’informations erronées et perdre potentiellement des heures de travail.

Pour cela, il faut donc en premier lieu se préoccuper de la rapidité d’exécution des simulations. Une simulation sur 10 années ne devrait pas prendre plus de 30secondes à 1 minute afin de ne pas pénaliser votre travail de développement.

Vous trouverez dans cet autre article des astuces pour accélérer vos simulations si vous en avez besoin.

Une toute autre approche est possible pour répondre à cette problématique.

On peut définir un mode “backtesting” configurable au lancement du robot. Dans ce mode, la stratégie ne limitera plus le nombre de trades émis simultanément, mais imposera une autre règle, par exemple 1 seul trade par bougie H1 ou M30 (fonction de votre stratégie bien sûr). Etant donné que le robot va alors générer plusieurs trades à la fois, il faudra adapter la taille des lots ou le montant du capital afin que tous les trades requis puissent être ouverts.

Il est alors possible d’examiner d’emblée toutes les configurations possibles pour l’entraînement de notre modèle.

Les résultats généraux de la simulation obtenus dans ce mode “backtesting” ne seront bien évidemment pas représentatifs de la réalité. Une fois l’analyse voulue des trades réalisée, il faudra refaire une simulation en mode “normal” afin d’obtenir des chiffres plus réalistes.

Bien sûr ces recommandations sont tout autant valables pour un modèle en machine learning.

Cas pratique: création manuelle d’un arbre de décision

Nous allons voir ici comment créer un arbre de décision manuellement. Je ne vais pas rentrer dans le code Metatrader, car chaque développeur a ses propres habitudes, mais m’intéresser plutôt à la philosophie derrière.

Cet article est un complément à la page dédiée à mon algorithme “Smart Forest” que je vous conseille de lire en premier lieu sinon vous risquez d’être un peu perdu.

Tout d’abord, il est indispensable de savoir générer un fichier .csv contenant les trades émis avec toutes les caractéristiques correspondantes au moment de l’ouverture de la position, ainsi que le bilan final du trade, à savoir si il est gagnant ou pas, et aussi dans quelle mesure. Il peut en effet s’agir d’un trade avec un gain important, ou bien un gain minime. Les décisions que l’on prendra par la suite dépendront de ces informations, car nous serons plus à même de sacrifier un petit trade qu’un gros.

Prenons un exemple récent, le bilan sur novembre de Hera sur le BRENT. Un gain appréciable de 759EUR pour un capital de 5000EUR, mais en y regardant de plus près, sur les 11 trades émis, 4 étaient perdants.

Graphique H4:

Graphique D1:

2 de ces trades perdants ont été émis le 22/11/23, sur une très forte bougie h4 baissière, avec des ouvertures de position visiblement très éloignés de la MM8.h4 (en bleu). En daily, on visualise également très bien le fait que ces trades étaient mal positionnés. Il est probable qu’un humain avisé n’aurait pas ouvert de trades à la vente à ce moment là. Le trade perdant du 30/11 semble correspondre au même schéma en H4, nous pouvons donc espérer écrire un arbre de décision qui engloberait ces 3 trades.

Des contrôles qui fonctionnent généralement bien consistent à mesurer les écarts aux moyennes mobiles, ainsi que leurs gradients, ceci souvent en conjonction avec d’autres observations. Parfois il est nécessaire de tester plusieurs variantes afin de trouver ce qui correspond le mieux.

L’observation permet donc d’émettre les premières hypothèses, puis une simulation sur la période globale de test doit être lancée afin d’identifier tous les trades impactés. Chaque hypothèse doit être testée pour être validée.

Dans ce cas, je remarque qu’en H4, les moyennes mobiles ne sont pas « rangées » dans le bon ordre, et le trade est lancé totalement à l’opposé. La MM50 est représentée en jaune, et la MM26 en vert. On a donc la MM8 > MM50 > MM26, ce qui n’est pas une configuration « propre », illustrant un mouvement récent fort dans le sens de l’achat. L’émission d’un trade à la vente, de surcroît mal positionné par rapport aux moyennes mobiles semble effectivement être un mauvais choix, aux probabilités de succès réduites.


Nous allons dans un premier temps émettre des critères les plus généraux possibles, puis ce sont les résultats de la simulation qui nous permettront d’affiner les choses.

On pourrait ainsi écrire pour la vente (ce sera l’inverse pour les achats):

Ce premier jet nous permet d’isoler 27 trades sur la période de 10 ans (sans nos trades de novembre), ce qui peut sembler faible mais toutefois suffisant pour pouvoir identifier des critères supplémentaires. On peut ajouter à cela nos 3 trades de novembre 2023 qui correspondent également à ce descriptif.


Cela constituera un arbre de taille assez réduite, mais nous pourrons toujours apprécier dans le futur que des trades ne soient plus émis dans une situation comparable. Hera est un robot déjà bien avancé en terme d’optimisation, donc à ce stade, il est normal que les trades gagnants soient majoritaires.

Pour ne pas perdre trop de trades positifs, nous allons voir si il est possible d’affiner un peu les choses. Même si il ne faut jamais s’obstiner à essayer de trouver une cohérence là où il n’y en a pas!

C’est là que le fichier .csv est indispensable.

Avec l’expérience, on peut identifier rapidement les valeurs caractéristiques extrêmes qui permettent de préciser les choses, le but étant de relier entre eux le plus de trades perdants, en excluant au maximum les trades positifs. La lecture des données conjuguée à la visualisation des trades sur la courbe, rend cette technique particulièrement efficace.

Dans cet exemple, les critères supplémentaires conservés vont être relatifs au positionnement du prix vis à vis de la mm8.mn1, de la mm4.mn1, et des gradients de moyenne mobile mm4.d1 et mm8.w1. Il serait quasiment impossible d’identifier ces informations avec leur seuil sans l’aide d’un reporting adapté.

Dans cet exemple relativement simple, la seule lecture du fichier de reporting s’est avérée suffisante, mais le plus souvent, il est nécessaire de recourir à des patterns graphiques pour parvenir à affiner les choses.

On pourrait ainsi écrire, toujours pour les ventes (les seuils sont ici à titre indicatif, ils doivent être déterminés sur des valeurs normalisées et apparaissent souvent très utiles pour quantifier la force d’une tendance ou l’importance d’un éloignement):

Ces nouveaux critères permettent d’identifier désormais les trades suivants (auxquels il faut toujours rajouter nos 3 trades perdants de novembre – s’agissant de jeux de données différents, historique tickstory vs historique récent metatrader, il n’est pas possible de les avoir sur un même graphique. La « fusion » des données doit se faire manuellement).

Nous avons conservé ainsi 10 trades (+ 3 trades de novembre), dont seulement 3 gagnants, qui seront désormais exclus par cet arbre de décision.

Les trades sur novembre suite à validation de cet arbre de décision sont ainsi plus « propres » qu’initialement. Il ne reste plus qu’un trade négatif, le 21/11 à 12h00, qu’il serait difficile de sécuriser. Un exemple de trade perdant « par malchance » sur lequel baser un arbre de décision ne semble pas être une bonne idée. S’acharner à vouloir exclure des trades perdants qui sont en toute objectivité bien placés nous ferait tomber dans l’écueil de l’over fitting.

Notre arbre de décision est ainsi achevé, d’une manière assez simple, puisqu’il n’a pas été nécessaire de lui associer des branches.

Quelques mots concernant les branches. Une branche est l’équivalent d’un « sauf si…. », et permet d’exclure d’un arbre de décision un ensemble de trades correspondant à une situation précise. Une branche, qui sera un ensemble de conditions favorables, va donc permettre l’exclusion de trades gagnants d’un arbre de décision.

Stratégies de trading: le grand débat

En matière de conception de robot de trading, on pourrait identifier 2 approches principales qui semblent être en opposition.

La première tend à rechercher un “alpha” optimum, c’est à dire un ensemble de quelques critères (généralement moins de 10), qui permettraient de générer des trades globalement favorables et qui ainsi se suffiraient à eux-mêmes. Dans cette approche, on voit d’un mauvais œil toute tentative d’optimisation qui ferait prendre systématiquement un risque trop grand d’over-fitting (suroptimisation de la phase d’entraînement avec dégradation des performances lors du passage en réel).
Cette approche pourrait être comparée à la recherche d’une aiguille dans une botte de foin. Une recherche souvent longue avant d’aboutir à une formule suffisamment robuste pour garantir des revenus quelles que soient les conditions de marché. Cette quête du Graal, toutefois, si elle se concrétise, permet par la suite de mettre en œuvre un robot d’une simplicité déconcertante…
Cette approche requiert beaucoup de patience, et de curiosité. Il faut également savoir qu’un alpha peut être non rentable sur un actif donné, mais générer des profits réguliers sur un autre pourtant proche. Une systématisation des tests sur des dizaines, voire des centaines d’actifs peut donc s’avérer être une stratégie payante.

“Amateurs develop individual strategies, believing that there is such a thing as a magical formula for riches. In contrast, professionals develop methods to mass-produce strategies. The money is not in making a car, it is in making a car factory.
Think like a business. Your goal is to run a research lab like a factory, where true discoveries are not born out of inspiration, but out of methodic hard work. That was the philosophy of physicist Ernest Lawrence, the founder of the first U.S. National Laboratory”

Marcos Lopez de Prado – Advances en Financial Machine Learning

La deuxième approche tend à considérer qu’il est inutile de chercher à modéliser par un moyen simple un problème aussi complexe que des données financières. A problème complexe, solution complexe. Il s’agit donc ici de chercher une stratégie brute acceptable, c’est à dire générant suffisamment de signaux gagnants (et perdants), sans forcément se préoccuper dans un premier temps de savoir si cette stratégie brute est gagnante ou pas. Bien entendu, plus la performance initiale est bonne, et moins il y aura de travail par la suite.
Il ne s’agit alors plus de creuser indéfiniment à la recherche d’un diamant déjà taillé, mais plutôt de partir d’un diamant brut et de le tailler soi-même (ce qui implique d’apprendre à tailler un diamant!).
Le travail d’optimisation qui va alors s’en suivre va chercher à soustraire des trades générés le plus possible de trades perdants, ce qui va permettre d’augmenter le WinRate. En langage de machine learning, on part d’une stratégie brute avec une précision moyenne à faible, mais avec un bon recall, puis on cherche à améliorer la précision sans détériorer le facteur recall (en d’autres termes, on veut abaisser le nombre de faux positifs, tout en maintenant élevé le nombre de vrais positifs).
Bien entendu, les modèles de machine learning/deep learning rentrent dans cette catégorie.

Over-fitting vs under-fitting


Si dans la première approche décrite précédemment, le risque d’over-fitting est nul (puisqu’il n’y a pas eu d’étape d’optimisation poussée), le risque d’under-fitting est quant à lui élevé. En somme, une telle stratégie va très probablement émettre des trades dans des configurations de marché que tout analyste technique aurait pu qualifier à l’avance de très probablement défavorable. Des pertes évitables auront donc lieu régulièrement, ce qui peut s’avérer assez frustrant.

Dans la deuxième approche, l’optimisation va quant à elle faire effectivement prendre le risque d’over-fitting, problème qu’il est important de prendre très au sérieux. A mes débuts, j’étais capable de produire des résultats de simulation quasi linéaires, avec 90% de trades gagnants, des performances incroyables, et pourtant, lors du passage sur des données en temps réel, c’était la désillusion la plus totale. Cela signifie-t-il qu’il faille éviter totalement toute phase d’optimisation? Je ne le pense pas. Il est par contre nécessaire d’essayer de comprendre l’over-fitting, afin de le limiter au maximum.

Des données en quantité suffisante

Le premier conseil est de disposer de données en quantité suffisante. On peut généralement trouver gratuitement des historiques sur 10 ans pour les indices, forex, matières premières. Bien plus si vous vous intéressez aux actions. Avec le recul, un historique de 10 ans me semble insuffisant. Vous pouvez essayer de vous procurer des historiques plus anciens, ce qui sera probablement payant. Vous pouvez également, et c’est également une bonne pratique, optimiser votre robot sur la base des données de plusieurs actifs proches. Plusieurs paires de devises si vous êtes sur le forex, ou plusieurs indices si vous êtes sur les indices.
A titre d’exemple mon dernier robot Pegase est optimisé/testé sur 5 indices : DowJones, Dax, SP500, Nasdaq, JP225. Un dernier indice, le CAC40 est utilisé pour la validation/évaluation des performances.
Donc plus on a de données, mieux c’est.
Bien entendu, il faudra prendre soin de normaliser nos données afin de pouvoir comparer plusieurs actifs entre eux.

Ne pas trop descendre dans les échelles de temps

Mon deuxième conseil est de rester le plus général possible lors de l’écriture d’un critère, ce qui implique notamment de ne pas descendre dans les échelles de temps. Avec l’expérience, on s’aperçoit que la description d’une configuration de marché sur la base des graphes MN1, W1 et D1 suffit le plus souvent. Plus on descend, et plus on rentre dans une description très spécifique qui aura peu de chances de se reproduire un jour. Et plus on descend, plus le “bruit” occupera une place importante par rapport à l’information véritable.

Faire varier les seuils

L’objectif de l’optimisation est d’arriver à décrire des configurations de marché qui se reproduisent régulièrement dans le temps, avec des résultats comparables à chaque fois. Cette capacité à identifier les “features” les plus appropriées et à écrire les bons critères se développe bien entendu avec l’expérience.
Une bonne pratique consiste toutefois à faire varier les seuils que l’on peut être amené à utiliser. Par exemple, si l’on veut quantifier la force d’un gradient de moyenne mobile, ou bien l’éloignement du prix par rapport à une bande de bollinger ou à une moyenne mobile, on peut être amené à utiliser une valeur seuil. On va ainsi s’apercevoir par exemple que si notre gradient de moyenne mobile est supérieur à X, et le prix est inférieur à Y par rapport à cette moyenne mobile, il devient dangereux de vendre car nous constatons une majorité de trades perdants. Mais que se passe-t-il si nous faisons varier X et Y de quelques points? Si la proportion de trades perdants reste très majoritaire, alors nous pourrons peut-être en conclure que ces critères se suffisent à eux-mêmes. Par contre si nous voyons apparaître des trades gagnants intéressants, alors nous allons peut-être en conclure que l’ajout de nouveaux critères, tels que le stochastique ou autre, est nécessaire.

Pour conclure, je dirai que le choix entre les 2 approches vous appartient, mais que les 2 peuvent donner de bons résultats, à condition d’avoir bien conscience des notions d’over-fitting/under-fitting.

Si le machine learning a le vent en poupe ces dernières années concernant la prédiction de données financières et que de nombreuses recherches sont menées dans ce domaine, les solutions simples et toutes faîtes ne sont pas aussi évidentes. Ce n’est pas parce que vous allez mettre en œuvre un algorithme Random Forest rapidement sur votre jeu de données, avec quelques features prises au hasard, que vous pouvez espérer rapidement de bons résultats sans vous soucier de ce que fait l’algorithme.

Passer du temps à analyser les marchés, écrire des critères à la main pour voir concrètement ce que cela donne, et au fil du temps identifier des patterns qui fonctionnent est une première étape qui me semble indispensable.
Pour alimenter votre algorithme de machine learning avec les bonnes informations, encore faut-il savoir quelles sont ces “bonnes informations”.

Dans un prochain article j’introduirais mon algorithme “Smart Forest“, en référence à l’algorithme “Random Forest” de machine learning. Nous y verrons comment on peut écrire des arbres de décision manuellement, et quels avantages/inconvénients cette approche peut avoir par rapport à son cousin Random Forest.

Stratégie de trading: Stop Loss, Take Profit et taille des positions

Lors de l’élaboration de votre stratégie de trading, une fois le timeframe de référence de vos signaux choisi , vous devez spécifier la valeur de votre Stop Loss, de votre Take Profit ainsi que la taille de vos positions.

Ces 3 valeurs sont des valeurs particulièrement interconnectées. Leur choix définitif sera probablement fixé après de nombreux essais, et pourront varier au fil des optimisations réalisées. En effet, plus votre % de trades gagnants va augmenter, et plus vous allez peut-être vous autoriser à augmenter votre stop loss. On peut qualifier ces informations d'”hyper paramètres” tant leur impact sur la performance du robot est importante.

Une bonne habitude est donc de les mettre en paramètres de lancement du robot afin de pouvoir les modifier par la suite plus aisément et ainsi tester différentes valeurs.

Voyons ce qu’il est important de savoir à ce sujet.

Tout d’abord, c’est votre stratégie de trading, qui a été privilégiée sur une échelle de temps donnée, qui va vous suggérer un objectif à atteindre. Cet objectif peut être exprimé de différentes manières: en points, ou en % de variation du prix de votre actif. Il peut être un objectif “rigide”, qui va se traduire par un Take Profit au niveau de vos positions, ou bien un objectif au-delà duquel va être appliqué un Trailing Stop, ou bien il va s’agir d’un objectif minimum au-delà duquel des signaux de sortie seront examinés (traversée moyenne mobile par exemple). Quelle que soit la manière dont va être utilisée cet objectif, il est préférable d’en avoir un car c’est lui qui va permettre de définir les autres paramètres tout aussi important pour notre robot.

Une fois notre objectif (strict ou minimum) défini, nous pouvons définir notre stop loss. L’occasion d’introduire une notion fondamentale, le Risk Reward, qui représente le ratio entre la perte potentielle d’un trade et son gain potentiel. Nous allons forcément chercher à avoir un Risk Reward le plus faible possible, tout en restant cohérent avec notre stratégie. Donc si par exemple vous avez un TP de 100, avec un SL de 50, vous obtenez un Risk Reward de 0.5 ce qui n’est pas si mal. Pour être rentable, votre stratégie devra alors avoir un WinRate d’au moins 33% (1 trade gagnant pour 2 trades perdants).

Vous l’aurez compris, les valeurs optimales de nos Take Profit et Stop Loss ne seront connues avec précision qu’une fois le robot déjà bien avancé, car nous devons connaître notre WinRate, dont la valeur va s’améliorer au fil des optimisations.

Il reste maintenant à fixer la taille de nos positions. Une bonne pratique est de déduire cette valeur de celle du Stop Loss, qui représente la perte maximale risquée (théoriquement…) pour chaque position ouverte. Ce qui vous intéresse réellement est de savoir quelle proportion en % de votre capital vous risquez à chaque trade ouvert. Ainsi, si vous risquez 50 points, en étant prêt à perdre 1% de votre capital, vous pourrez en déduire la taille de votre position.

Le fait de déduire la taille de vos positions de la valeur de votre Stop Loss et du Risk Ratio (% du capital à mettre en jeu) présente plusieurs avantages. Vous pouvez par exemple vouloir adapter votre stop loss à la situation du marché (stop loss variable déterminé sur une moyenne mobile, un high/low d’un bougie précédente ou une valeur d’atr), auquel cas la taille de vos positions s’adaptera automatiquement. Ensuite, vos tailles de positions vont suivre l’évolution de votre capital (qu’elle soit favorable ou pas), ce qui est aussi très important durant les simulations.

Ci-dessous une fonction pratique que j’utilise (Metatrader) pour calculer le montant des positions à ouvrir.

Stop Loss et Take Profit en % plutôt qu’en points

Une dernière notion très importante à comprendre. J’en ai parlé brièvement plus haut. Lors de la définition de vos Stop Loss et Take Profit, vous avez le choix entre l’utilisation de Points, ou de % de la valeur de votre actif.

Pourquoi privilégier les % ?

Les données financières sont des données “non stationnaires”, c’est à dire que leur valeur peut évoluer grandement au fil du temps. Un actif qui vaut 10000$ aujourd’hui en valait peut-être le tiers il y a 10 ans de cela.

Ainsi, on peut intuitivement comprendre que si un objectif de 100 points est réaliste pour un actif qui vaut 10000$, il l’est peut-être déjà beaucoup moins sur le même actif quand il en valait 3000$…

Cela pose de sérieux problèmes si vous souhaitez tester votre stratégie sur un historique de données de plusieurs années. D’où l’intérêt de définir votre objectif comme étant égal à 1% de la valeur de votre actif, plutôt que comme valant 100 points.

Ci-dessus un exemple des paramètres de lancement d’un robot sous Metatrader.

On y trouve en premier lieu le Risk Ratio % qui permet de définir le montant du capital mis en jeu à chaque trade.

Les TP et SL sont eux aussi définis en %.

Définis de cette manière, ces paramètres de lancement vont suivre l’évolution du capital ainsi que l’évolution de prix de l’actif au fil du temps.

Stratégie de trading: bien choisir le timeframe

Le choix du timeframe est d’une importance capitale dans l’élaboration d’un robot de trading, et ne doit pas être pris à la légère. C’est l’une des premières pierres de votre édifice, qui va déterminer tout le reste. Si en cours de route vous changez d’avis, cela peut avoir des incidences importantes sur tout le travail d’optimisation que vous aurez fait jusque là.

Si vous réalisez un robot de trading “simple”, via Trading View ou ProRealTime par exemple, avec une stratégie de quelques lignes sans optimisation poussée, avec un robot que vous associez à un timeframe donné (signal de croisement macd+rsi en M15 par exemple), alors vous ne vous sentirez pas très concerné par cet article. Ce qui suit va surtout concerner les robots plus avancés sur lesquels un gros travail d’optimisation peut être réalisé.

Pour bien choisir son timeframe, il faut déjà avoir conscience de tout le travail qui va s’en suivre. Il faut donc déjà s’être cassé les dents sur quelques robots auparavant, avoir fait des erreurs, des essais, puis d’autres erreurs, et d’autres essais.

La première erreur est de vouloir commencer par une stratégie qui va rechercher des signaux sur de petites échelles de temps (en dessous de H4). Les marchés financiers ont cela de particulier que le rapport signal/bruit est très faible, et cela est d’autant plus vrai que l’on va descendre dans les petites échelles de temps. Le fait de “zoomer” à l’extrême, sur du M15, M5, ou pire M2/M1 rend la compréhension de ce qu’il se passe quasi impossible. Bien entendu, cela dépend aussi de l’objectif en terme de points que vous vous fixez. Mais quoi qu’il en soit, nous sommes face à un problème très complexe à résoudre, et travailler sur les petites échelles de temps va venir rajouter de la complexité. Vous verrez que même en H4/D1 c’est déjà bien assez compliqué.

Si vous partez avec l’idée de vouloir optimiser votre robot, vous allez être amené à contrôler les tendances, supports/résistances, et indicateurs sur les échelles de temps supérieures. Pour ma part j’ai pris l’habitude de contrôler les tendances D1, W1, et MN1, car j’ai pu constater leur influence importante sur la qualité des signaux. Je ne descends presque jamais sous H4, car l’expérience m’a appris que cela n’apportait rien sauf le fait d’accroître l’over fitting, ce que nous voulons à tout prix éviter.

Donc plus vous descendez, et plus aurez du travail. Et plus vous serez plongés dans du bruit qu’il est inutile d’essayer de prédire ou d’anticiper.

Quelle que soit la stratégie choisie et le type de trading que vous avez l’habitude de faire, dîtes vous bien que l’objectif in fine est le même pour tous: dégager de la rentabilité, régulièrement, et en prenant le moins de risque possible. Le fait d’émettre des signaux en H4, ou D1 n’enlèvent absolument rien à la rentabilité espérée, bien au contraire. Et surtout, ils permettent une optimisation efficace qu’il est difficile d’obtenir sur les petites échelles de temps.

Mon premier conseil est donc d’émettre des signaux en D1, ou H4 minimum, puis d’essayer de comprendre les configurations de marché les mieux adaptées à votre stratégie.