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.

Metatrader – Historiques de données financières

En matière de prédiction, rien n’est plus important que de disposer de données de qualité, et en quantité suffisante. Pour réaliser un robot robuste, c’est à dire adapté au plus grand nombre de situations de marché différentes, un test réalisé sur 1 ou 2 ans sera loin d’être suffisant.

Si vous avez opté pour une stratégie dont le principe est volontairement de générer des trades de manière quasi aléatoire, en espérant une balance plutôt positive in fine, ce point aura peut-être moins d’importance, mais vous devriez tout de même être curieux de savoir si vos réglages fonctionnent de manière générale, ou si ils sont adaptés juste sur ces derniers mois, avec par exemple un contexte de croissance forte et régulière.


Si votre robot est basé sur des signaux d’achat/vente clairement identifiés par une stratégie donnée, l’analyse des tendances aux différentes échelles de temps va alors permettre d’identifier les configurations de marché favorables à notre stratégie, de celles qui le sont beaucoup moins, et bien entendu, d’agir en conséquence.

Pour cela, il est important de regarder les tendances hebdomadaires et mensuelles qui ont un impact très important (que vous vous en soyez rendu compte ou pas encore…), et qui ne peuvent s’étudier que sur plusieurs années.

Restreindre son analyse à 1 ou 2 années comme beaucoup le font fait perdre une quantité d’informations pourtant très utile.

La récupération d’historiques suffisants est donc l’une des premières préoccupations à avoir, mais malheureusement, c’est un sujet rarement évoqué sur les forums.

Voyons donc tout cela en détail.

Tout d’abord, il est important de comprendre que par défaut, les historiques disponibles sur Metatrader sont largement incomplets. Si par exemple en mensuel vous allez pouvoir remonter 20 années au-delà, en hebdomadaire vous n’aurez peut-être plus que 10 années, puis au fur et à mesure que vous allez baisser dans les échelles de temps, la taille de l’historique va diminuer. Ces valeurs vont en outre varier d’un actif à un autre, et d’un broker à l’autre.
Sur l’échelle à 1 minute, vous n’aurez plus que quelques mois.
Et si vous descendez jusqu’aux ticks, il faut savoir que Metatrader inclut un système de simulation de ticks. Vous n’aurez donc probablement pas des ticks réels mais des ticks simulés.

Voyons maintenant comment améliorer le fonctionnement de base de Metatrader concernant les historiques de données.

Tick Data Suite et Tick Story sont 2 fournisseurs d’historiques de données financières parmi les plus cités. Tick Data Suite est un service payant (mais accessible), avec une version d’essai gratuite de 15 jours qui vous permet déjà de télécharger pas mal de données. Tick Story est un service gratuit, mais avec une version payante permettant notamment d’accélérer grandement les téléchargements qui sinon peuvent prendre facilement plusieurs heures.

Je vais par la suite utiliser Tick Story pour les explications, mais la procédure est quasiment la même pour Tick Data Suite, seule change l’interface de téléchargement.

Dans les 2 cas, il est possible de récupérer des historiques de 10 à 20 ans selon les actifs. Est-ce suffisant? Pas évident, nous verrons dans un autre comment y remédier en réalisant des optimisations sur plusieurs actifs.

Après avoir installer l’interface Tick Story proposée depuis leur site, vous avez rapidement accès à l’ensemble des actifs disponibles, forex, indices, crypto, commodities, etc… si vous ne trouvez pas votre bonheur, vous pouvez toujours essayer auprès d’un autre fournisseur de datas.

L’étape suivante consiste, avec un clic droit, à sélectionner votre actif, puis choisissez “Exporter vers MT5”, puis l’option “Bar” ou “Tick”. Les fichiers Ticks sont bien évidemment beaucoup plus volumineux que les simples Bars. Nous verrons dans un prochain article que les simulations sur Ticks sont également beaucoup plus lentes que sur les Bars. Vous pouvez dans un premier temps prendre l’option “Bar”, et si vous avez besoin plus tard de confirmer votre stratégie de manière plus précise en utilisant les Ticks, vous saurez où les trouver.

Une fois l’option “Bar” choisie, l’utilitaire de téléchargement apparaît. La période proposée par défaut est la période totale disponible. Ici, pour le DAX40, on a accès aux données depuis 2011, ce qui fait un peu plus de 10 années de données. Est-ce suffisant? Probablement pas, mais c’est tout ce qu’il est possible d’avoir pour commencer en gratuit.

Dans la ligne “Calendrier”, vous pouvez choisir le timeframe à télécharger. Je vous conseille le 1 minute ou le 5 minutes mais il vaut mieux ne pas aller au-delà.

La ligne “Régler le fuseau horaire” a une importance capitale que je n’ai comprise que tardivement malheureusement. Si vous laissez la valeur par défaut, sans chercher à vous aligner avec le fuseau horaire du serveur de votre broker, vous risquez d’avoir des décalages entre les courbes “temps réel” et les courbes issues de vos historiques. Cela peut avoir plusieurs incidences. Par exemple si votre stratégie doit respecter à des heures précises, vous n’allez tout simplement pas tester sur les bonnes tranches d’heures. Une autre incidence sur laquelle on peut facilement passer à côté pendant des années, est qu’un décalage d’une heure seulement entre les heures de votre historiques et les heures de votre broker peut provoquer l’apparition d’une bougie le dimanche (absente sur les courbes temps réel), ce qui va venir chambouler tous vos calculs d’indicateurs, positionnement dans votre stratégie, optimisation, etc… Autant dire que vous n’aurez qu’à tout reprendre depuis le début.

Pour ne pas vous tromper, il est préférable de télécharger seulement les derniers jours, de charger sur metatrader (nous allons voir maintenant comment faire), puis de comparer avec vos courbes réelles. Si vos bougies sont décalées, c’est que vous n’avez pas le bon fuseau horaire. Une fois que vous êtes certain du bon fuseau horaire à télécharger, vous n’avez plus qu’à lancer le téléchargement et à patienter!

Chargement des données dans Metatrader

La procédure est assez simple, quand on sait comment s’y prendre.

L’idée consiste à créer un nouveau symbole que l’on va venir alimenter avec nos historiques. Ce symbole sera ensuite utilisable directement depuis le testeur de stratégie comme si il s’agissait d’un symbole fourni par votre broker.

Depuis la barre d’outils, en haut à gauche, ou depuis l’onglet “Voir / Symboles”, vous lancez la fenêtre “Symboles”. Vous choisissez l’actif désiré, ici le DAX, en cliquant dessus, les informations relatives à cet actif apparaissent en bas. Puis vous cliquez sur “Créer un symbole”. Le fait de pré-sélectionner votre actif va permettre de récupérer toutes les informations qui lui sont relatives, et donc d’éviter de les saisir par la suite.

La fenêtre “Symbole personnalisé” apparaît alors. Il est préférable d’ajouter une extension “_ts” par exemple pour “tickstory” au nom de votre symbole afin de tracer l’origine des données et ne pas risquer de le confondre avec un symbole “réel”.

Une fois créé, votre symbole apparaîtra dans la rubrique “Custom”.

La dernière étape consiste à uploader votre historique. Pour cela, il vous suffit de cliquer sur le bouton “Barres” en haut de cette même fenêtre, puis sur le bouton “Importer des Barres”.

Une fois arrivé là, vous avez presque fini, mais une dernière vérification très importante s’impose: le montant des spreads. Les historiques contiennent en effet en dernière colonne le montant du spread applicable, mais il peut arriver un que cette valeur, qui dépend notamment du tickvalue configuré sur votre symbole, ne corresponde pas du tout aux spreads réels appliqués par votre broker. J’ai constaté des écarts équivalents à un facteur de 10, ce qui bien sût n’est pas acceptable. Pour s’assurer qu’il n’y a pas de soucis à ce niveau, le mieux est de lancer un robot dans le testeur de stratégie qui va afficher l’écart entre votre ASK et votre BID. Vous faîtes la même chose sur votre symbole réel. Si vous avez effectivement un facteur 10 de différence, vous devez alors ouvrir votre fichier d’historique sur un bon vieux excel et modifier la valeur de la dernière colonne en conséquence.

Il va de soi que sur un historique de 10 ans, le montant du spread a forcément évolué dans le temps, en même temps que la valeur de l’actif en question. C’est donc à vous de faire le choix d’utiliser une valeur fixe, un pourcentage, ou autre. Toutefois si vous avez des stratégies en daily, avec des trades sur plusieurs journées, une valeur approximative du spread de quelques points n’aura que peu d’influence sur l’évaluation de la performance générale. Si vous faîtes du scalping, ce n’est bien évidemment pas la même histoire!

Une fois le fichier modifié, vous pouvez le téléverser à nouveau par la même procédure.

Trading algorithmique: quel langage/plateforme choisir?

Le choix de l’environnement que vous souhaitez utiliser pour le développement de vos robots de trading est le premier choix particulièrement déterminant pour la suite et ne doit pas être pris à la légère.

La prise en main de cet environnement va demander par la suite beaucoup d’efforts et de temps, voici donc quelques conseils pour vous aider à y voir plus clair.

TradingView et ProRealTime sont des plateformes particulièrement appréciées, agréables à prendre en main, et très adaptées aux non-développeurs. Attention, ce sont des plateformes payantes. TradingView propose une version gratuite, mais les fonctionnalités sont alors limitées, comme par exemple le nombre d’indicateurs que l’on peut associer simultanément sur un même graphe. Les prix vont de 12.95$/mois à 49.95$/mois, ce qui n’est pas négligeable.
Chacune de ces plateformes propose son propre langage de programmation, relativement accessible pour un non-développeur (c’est l’objectif affiché).
Vous allez pouvoir coder vos stratégies ou indicateurs assez rapidement.

Cela fait de TradingView et ProRealTime les choix à privilégier si vous n’avez pas de compétence en programmation.

Mais si vous avez des compétences en programmation, vous allez très rapidement vous sentir très à l’étroit, et c’est normal. Ces plateformes sont avant tout dédiées au grand public.

Les points bloquants sont les suivants:

  • historique de données restreint, fonction de l’abonnement choisi et du timeframe. Au mieux, vous aurez 20.000 barres d’historiques sur TradingView par exemple.
  • environnement de travail délocalisé. vous avez la possibilité de ne pas partager votre script, mais il sera forcément accessible par toute l’équipe technique. si vous avez eu le bonheur de trouver la perle rare et que vous générer de gros profits, dîtes-vous que cela se saura et que votre code n’aura jamais la garantie d’être parfaitement protégé.
  • environnement inadapté aux gros scripts (un robot particulièrement travaillé peut rapidement prendre plusieurs milliers de lignes)
  • à ma connaissance, impossibilité de générer des fichiers de statistiques relatifs aux trades émis et aux conditions de marché qui sont indispensables pour aller plus loin dans l’optimisation d’un robot
  • vous n’êtes pas libre de travailler avec le broker de votre choix

Vous l’aurez compris, en tant que développeur, habituée aux environnements libres, et gratuits, je préfère de loin Metatrader et/ou Python, qui nous allons le voir sont particulièrement adaptés à de situations différentes, et qui en font des outils assez complémentaires.

Metatrader

Metatrader 4 ou 5 est une plateforme totalement libre et gratuite.
Vous pouvez la connecter au broker de votre choix, et avoir accès à une gamme particulièrement riche d’indicateurs et de robots qu’ils soient gratuits ou payants. La communauté Metatrader est particulièrement active. Le design est certes moins attractif que TradingView, mais on s’y habitue très vite.

Le MetaEditor qui vous permet de créer vos indicateurs et trading bots est une interface de développement classique, en local bien en sécurité sur votre pc, rien ne viendra limiter votre ardeur à la tâche. Vous pourrez entre autre générer des fichiers de statistiques, utiliser de la programmation orientée objet, bref, faire un vrai travail de développement.

Le langage se prend en main assez rapidement, même si cela est plus compliqué que pour les plateformes payantes vues précédemment.

Les historiques par défaut sont assez limités, mais nous verrons dans un prochain article que ce n’est pas un frein, car il est possible d’ajouter des historiques gratuitement sur bon nombre d’actifs.

Pour ces raisons, Metatrader est un candidat très sérieux pour débuter dans le développement de robot de trading.

Les limites que l’on pourrait poser à son utilisation sont les suivantes:

  • non adapté pour la mise en œuvre d’un robot qui devrait scruter des centaines ou milliers d’actions à la recherche des meilleures opportunités
  • on ne peut réaliser que des systèmes “experts” par opposition aux systèmes plus avancés que l’on connaît aujourd’hui sous les termes de machine learning ou deep learning

Python

Python est un langage open source, parmi les plus appréciés actuellement. Il offre de nombreuses bibliothèques spécialement adaptées au Machine Mearning et au Deep Learning, ainsi que des bibliothèques dédiées à la finance, comme la bibliothèque talib qui permet de calculer des indicateurs techniques.

Le choix de python doit être mûrement réfléchi, relativement à notre niveau en programmation, et surtout à l’objectif que l’on souhaite atteindre. Foncer tête baissée sur Python, sans avoir au préalable d’expérience en développement de robot de trading, nécessaire pour en comprendre les spécificités, serait à mon sens une erreur.

“Think big, start small, move fast”.

Si vous avez déjà une bonne expérience en développement de robot de trading, Python sera par contre particulièrement adapté dans les situations suivantes:

  • réalisation d’un robot sur actions, devant scanner des centaines, voire des milliers d’actifs pour lister les meilleures opportunités
  • mise en application d’algorithmes de machine learning/deep learning

En espérant que cela vous aura été utile!