
La règle d'or des Traders
Introduction
La tâche principale d'un trader n'est pas seulement de trouver le bon moment pour entrer sur le marché. Il faut aussi trouver le bon moment pour en sortir. La règle d'or du trading dit : «Réduisez toujours vos pertes et laissez courir vos profits».
Pour réaliser des bénéfices sur la base d'une attente mathématique élevée, nous devons comprendre trois principes de base d'un bon trading.
- Connaissez votre risque en entrant sur le marché (c'est une valeur Stop Loss initiale);
- Réduisez vos bénéfices et laissez vos bénéfices s'écouler (ne fermez pas votre position avant que votre système ne l'exige) ;
- Connaissez les attentes mathématiques de votre système – testez-le et ajustez-le régulièrement.
Méthode de suivi des positions étape par étape permettant aux bénéfices de courir
Beaucoup pensent qu'il est impossible de faire du profit, car nous ne savons pas où ira le marché. Mais avons-nous vraiment besoin de le savoir pour trader avec succès ? Un trading réussi est principalement basé sur un système correctement conçu en tenant compte des moments appropriés pour entrer sur le marché. De telles considérations sont faites en utilisant le pouvoir d'attente et les règles de suivi des positions étape par étape qui permettent au profit de courir pour le plus haut niveau possible.
Le moment d'entrée sur le marché peut être trouvé de plusieurs manières, par exemple, en utilisant des modèles de chandeliers, des modèles de vagues, etc. Dans le même temps, le facteur de profit doit être pris en compte (rapport profit/perte).
Cette méthode est basée sur l'exigence suivante : un trader sélectionne la valeur Stop Loss la plus basse possible lors de l'ouverture d'une position. Cette valeur peut être déterminée à l'aide de diverses méthodes, par exemple par exemple, il peut être égal à 1,5% de l'acompte. Lorsque le marché atteint un profit égal à la valeur du Stop Loss, la moitié du lot est fermée mais le Stop Loss n'est pas modifié !
Par conséquent, nous créons une sorte de filet de sécurité, au cas où le marché irait dans le sens inverse. C'est-à-dire que nous réduisons notre risque en fixant les pertes minimales. Si le marché évoluait dans une direction favorable juste pour quelques temps plus tard, le Stop Loss est déclenché (Fig. 1-3).
Fig. 1. Ouvrir un position
Fig. 2. Réglage du Stop Loss
si le marché à chuté:
Fig. 3. Si le marché à chuté, vous êtes au seuil de rentabilité
Code du programme de suivi de position
Nous proposons un code de programme qui suit les positions ouvertes et actualise le deuxième principe d'or, car il permet aux bénéfices de courir au plus haut niveau possible.
Si le marché évolue toujours dans une direction favorable et atteint une valeur prédéterminée, par exemple 100 pips, le Stop Loss est réinitialisé à un niveau d'équilibre. D'autres réinitialisations sont effectuées lorsque vous atteignez le profit dans des intervalles prédéterminés, par exemple, 50 pips. Nous pouvons déplacer le Stop Loss à chaque barre suivante, mais les brokers n'aiment pas les réinitialisations fréquentes, en particulier lorsque la transaction est effectuée dans des délais inférieurs. L’ erreur (stdlib.mq4) du dossier des bibliothèques a la même erreur # 8 error = «demandes trop fréquentes» pour ce cas.
La méthode pour déterminer chaque prochain niveau de Stop Loss est sélectionnée par une position de prix au moment de réaliser un profit en fonction des niveaux de Fibonacci. Les niveaux de Fibonacci appliqués sont construits selon la méthode Vegas Tunnel ici.
Le calcul des niveaux de Fibonacci est effectué par la fonction de génération de niveaux LevelFibo() :
//+------------------------------------------------------------------+ void LevelFibo() { double Fb1,Fb2,Fb3,Fb4,Fb5,Fb6,Fb7,Fb8,Fb9,Fb10,Fb11,Fb12,Fb13; // "Vegas" channel double Ma144_1 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1); double Ma169_1 = iMA(NULL,0,169,0,MODE_EMA,PRICE_CLOSE,1); // "Vegas" channel median double MedVegas=NormalizeDouble((Ma144_1+Ma169_1)/2,Digits); // calculate Fibo levels values using "Vegas" method Fb1=MedVegas-377*Point; Fb12=MedVegas+377*Point; Fb2=MedVegas-233*Point; Fb11=MedVegas+233*Point; Fb3=MedVegas-144*Point; Fb10=MedVegas+144*Point; Fb4=MedVegas-89*Point; Fb9=MedVegas+89*Point; Fb5=MedVegas-55*Point; Fb8=MedVegas+55*Point; Fb6=MedVegas-34*Point; Fb7=MedVegas+34*Point; } //+------------------------------------------------------------------+
Lors du calcul du Stop Loss pour les positions BUY, le profit est la différence entre le prix Max de la première barre High[1] et le niveau d'ouverture de la position OrderOpenPrice(). Le niveau de Stop Loss est défini comme le niveau de Fibonacci «le plus proche» par rapport à la valeur Min de la première barre Low[1] (Fig. 4).
Fig. 4. Calcul du Stop Loss pour la position ACHETER
Lors du calcul du Stop Loss pour les positions de VENDRE, le profit est la différence entre le niveau d'ouverture de la position OrderOpenPrice() et le prix Max de la première barre High[1] (Fig. 5).
Fig. 5. Calcul du Stop Loss pour la position de VENDRE
Pour les positions d'achat, les valeurs Stop Loss sont basées sur les niveaux de Fibo. Selon la valeur la plus basse du premier chandelier, il est présenté comme une fonction distincte.
Le code de fonction est indiqué ci-dessous :
//+---------------------------------------------------------------------+ //| Function (table) for specifying Stop Loss values for BUY position | //| by Fibo levels according to the lowest value of the first candle | //+---------------------------------------------------------------------+ void StopLevelFiboBuy() { if(Low[1]>Fb12) newSL_B=Fb12-100*Point; if(Low[1]<=Fb12 && Low[1]>(Fb12+Fb11)/2) newSL_B=(Fb12+Fb11)/2; if(Low[1]<=(Fb12+Fb11)/2 && Low[1]>Fb11) newSL_B=Fb11; if(Low[1]<=Fb11 && Low[1]>(Fb11+Fb10)/2) newSL_B=(Fb11+Fb10)/2; if(Low[1]<=(Fb10+Fb11)/2 && Low[1]>Fb10) newSL_B=Fb10; if(Low[1]<=Fb10 && Low[1]>(Fb10+Fb9)/2) newSL_B=Fb9; if(Low[1]<=(Fb10+Fb9)/2 && Low[1]>Fb9) newSL_B=Fb8; if(Low[1]<=Fb9 && Low[1]>Fb8) newSL_B=Fb7; if(Low[1]<=Fb8 && Low[1]>Fb7) newSL_B=(Fb7+MedVegas)/2; if(Low[1]<=Fb7 && Low[1]>MedVegas) newSL_B=Fb6; if(Low[1]<=MedVegas && Low[1]>(MedVegas+Fb6)/2)newSL_B=Fb6; if(Low[1]<=(MedVegas+Fb6)/2 && Low[1]>Fb6) newSL_B=Fb5; if(Low[1]<=Fb6 && Low[1]>Fb5) newSL_B=Fb4; if(Low[1]<=Fb5 && Low[1]>Fb4) newSL_B=(Fb3+Fb4)/2; if(Low[1]<=Fb4 && Low[1]>Fb3) newSL_B=Fb3; if(Low[1]<=Fb3 && Low[1]>(Fb3+Fb2)/2) newSL_B=(Fb3+Fb2)/2; if(Low[1]<=(Fb3+Fb2)/2 && Low[1]>Fb2) newSL_B=Fb2; if(Low[1]<=Fb2 && Low[1]>(Fb2+Fb1)/2) newSL_B=(Fb1+Fb2)/2; if(Low[1]<=(Fb2+Fb1)/2 && Low[1]>Fb1) newSL_B=Fb1; if(Low[1]<=Fb1) newSL_B=Fb1-100*Point; } //+------------------------------------------------------------------+
Le tableau des valeurs Stop Loss par niveaux de Fibo en fonction de la valeur maximale du premier chandelier de la fonction StopLevelFiboSell() pour les positions Vendre est représenté par le code suivant :
//+----------------------------------------------------------------------+ //| Function (table) for specifying Stop Loss values for SELL position | //| by Fibo levels according to the highest value of the first candle | //+----------------------------------------------------------------------+ void StopLevelFiboSell() { if(High[1]<=Fb12 && High[1]>(Fb12+Fb11)/2) newSL_S=Fb12+100*Point; if(High[1]<=Fb12 && High[1]>Fb11) newSL_S=Fb12; if(High[1]<=Fb11 && High[1]>Fb11+Fb10) newSL_S=Fb11; if(High[1]<=Fb10 && High[1]>(Fb10+Fb9)/2) newSL_S=(Fb11+Fb10)/2; if(High[1]<=Fb9 && High[1]>Fb8) newSL_S=(Fb10+Fb9)/2; if(High[1]<=Fb8 && High[1]>Fb7) newSL_S=Fb9; if(High[1]<=Fb7 && High[1]>MedVegas) newSL_S=Fb8; if(High[1]<=MedVegas && High[1]>MedVegas) newSL_S=Fb7; if(High[1]<=(MedVegas+Fb6)/2 && High[1]>Fb6) newSL_S=MedVegas; if(High[1]<=Fb6 && High[1]>Fb5) newSL_S=MedVegas; if(High[1]<=Fb5 && High[1]>Fb4) newSL_S=Fb6; if(High[1]<=Fb4 && High[1]>Fb3) newSL_S=Fb5; if(High[1]<=Fb3 && High[1]>Fb2) newSL_S=Fb4; if(High[1]<=Fb2 && High[1]>(Fb2+Fb1)/2) newSL_S=(Fb2+Fb3)/2; if(High[1]<(Fb2+Fb1)/2 && High[1]>Fb1) newSL_S=Fb2; if(High[1]<Fb1) newSL_S=(Fb2+Fb1)/2; } //+------------------------------------------------------------------+
Il serait approprié d'ajouter la fonction de calcul des niveaux de LevelFibo Fibonacci à chacune des deux fonctions de dépendance mentionnées. Cela a été fait dans les fichiers de démonstration ci-joints.
Maintenant, concernant la combinaison de deux fonctions ou plutôt l'activation de la fonction de calcul des niveaux LevelFibo() dans la fonction d'identification des niveaux Stop Loss focalisée sur ces niveaux. Cette combinaison est logique, car les fonctions fonctionnent ensemble. Par conséquent, le nombre d'appels de fonctions pendant la suivie sera réduit - il n'en restera qu'un au lieu de deux.
Après avoir été combinés, ils se présenteront comme suit :
//+----------------------------------------------------------------------+ //| Function (table) for specifying Stop Loss values for BUY position | //| by Fibo levels according to the lowest value of the first candle | //+----------------------------------------------------------------------+ void StoplevelFiboBuy() { double Fb1,Fb2,Fb3,Fb4,Fb5,Fb6,Fb7,Fb8,Fb9,Fb10,Fb11,Fb12,Fb13; double Ma144_1 = iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE,1); double Ma169_1 = iMA(NULL,0,169,0,MODE_EMA,PRICE_CLOSE,1); double MedVegas=NormalizeDouble((Ma144_1+Ma169_1)/2,Digits); Fb1=MedVegas-377*Point; Fb12=MedVegas+377*Point; Fb2=MedVegas-233*Point; Fb11=MedVegas+233*Point; Fb3=MedVegas-144*Point; Fb10=MedVegas+144*Point; Fb4=MedVegas-89*Point; Fb9=MedVegas+89*Point; Fb5=MedVegas-55*Point; Fb8=MedVegas+55*Point; Fb6=MedVegas-34*Point; Fb7=MedVegas+34*Point; if(Low[1]>Fb12) newSL_B=Fb12-100*Point; if(Low[1]<=Fb12 && Low[1]>(Fb12+Fb11)/2) newSL_B=(Fb12+Fb11)/2; if(Low[1]<=(Fb12+Fb11)/2 && Low[1]>Fb11) newSL_B=Fb11; if(Low[1]<=Fb11 && Low[1]>(Fb11+Fb10)/2) newSL_B=(Fb11+Fb10)/2; if(Low[1]<=(Fb10+Fb11)/2 && Low[1]>Fb10) newSL_B=Fb10; if(Low[1]<=Fb10 && Low[1]>(Fb10+Fb9)/2) newSL_B=Fb9; if(Low[1]<=(Fb10+Fb9)/2 && Low[1]>Fb9) newSL_B=Fb8; if(Low[1]<=Fb9 && Low[1]>Fb8) newSL_B=Fb7; if(Low[1]<=Fb8 && Low[1]>Fb7) newSL_B=(Fb7+MedVegas)/2; if(Low[1]<=Fb7 && Low[1]>MedVegas) newSL_B=Fb6; if(Low[1]<=MedVegas && Low[1]>(MedVegas+Fb6)/2)newSL_B=Fb6; if(Low[1]<=(MedVegas+Fb6)/2 && Low[1]>Fb6) newSL_B=Fb5; if(Low[1]<=Fb6 && Low[1]>Fb5) newSL_B=Fb4; if(Low[1]<=Fb5 && Low[1]>Fb4) newSL_B=(Fb3+Fb4)/2; if(Low[1]<=Fb4 && Low[1]>Fb3) newSL_B=Fb3; if(Low[1]<=Fb3 && Low[1]>(Fb3+Fb2)/2) newSL_B=(Fb3+Fb2)/2; if(Low[1]<=(Fb3+Fb2)/2 && Low[1]>Fb2) newSL_B=Fb2; if(Low[1]<=Fb2 && Low[1]>(Fb2+Fb1)/2) newSL_B=(Fb1+Fb2)/2; if(Low[1]<=(Fb2+Fb1)/2 && Low[1]>Fb1) newSL_B=Fb1; if(Low[1]<=Fb1) newSL_B=Fb1-100*Point; } // ----------------------------------------------------------------------+
Le code de commande principal des positions de suivi est représenté sous la forme d'un fragment Expert Advisor avec la séquence d'actions pour l'exécution des fonctions mentionnées ci-dessus en fonction du prix valeurs des barres courantes. Le suivi étape par étape commence après qu'un ordre ouvert approprié a été sélectionné.
Un petit fragment de code de fin est affiché ci-dessous :
//+------------------------------------------------------------------+ //| TRAILING OPEN POSITIONS | //+------------------------------------------------------------------+ for(int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {Print("Order selection error = ",GetLastError());} if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(OrderMagicNumber()==Magic) { // ----------------------------------------------------------------------+ if((High[1]-OrderOpenPrice())>=SL_B*Point && OrderLots()==0.2)Close_B_lot(); // ----------------------------------------------------------------------+ if((High[1]-OrderOpenPrice())/Point>=100 && OrderLots()==0.1 && OrderStopLoss()<OrderOpenPrice()) { Print(" 1 - StopLoss shift"); if(!OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+2*Point,OrderTakeProfit(),0,Aqua)) { Print(" at Modif.ord.# ",OrderTicket()," Error # ",GetLastError()); } return; } // ----------------------------------------------------------------------+ if((High[1]-OrderOpenPrice())>=120*Point && OrderOpenPrice()>Ma144_1-144*Point) { StoplevelFiboBuy(); newSL_B=newSL_B+21*Point; if((Bid-newSL_B)/Point<StopLevel)newSL_B=Bid-StopLevel*Point; if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel) { Print("2nd shift of StopLoss "); Modyf_B_lot(); } } // ----------------------------------------------------------------------+ if((High[1]-OrderOpenPrice())>=200*Point && (High[1]-OrderOpenPrice())<=250*Point) { StoplevelFiboBuy(); if((Bid-newSL_B)/Point<StopLevel)newSL_B=Bid-StopLevel*Point; if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel) { Print(" 3rd shift by level order # ",OrderTicket()); Modyf_B_lot(); } } // ----------------------------------------------------------------------+ if((High[1]-OrderOpenPrice())>=250*Point && OrderOpenPrice()>Ma144_1-144*Point) { StoplevelFiboBuy(); newSL_B=newSL_B+10*Point; if((Bid-newSL_B)/Point<StopLevel) newSL_B=Bid-StopLevel*Point; if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel) { Print(" 4th shift by level order # ",OrderTicket()); Modyf_B_lot(); } } // ----------------------------------------------------------------------+ if((High[1]-OrderOpenPrice())>=300*Point && (High[1]-OrderOpenPrice())<=350*Point) { StoplevelFiboBuy(); newSL_B=newSL_B+20*Point; if((Bid-newSL_B)/Point<StopLevel) newSL_B=Bid-StopLevel*Point; if(newSL_B>OrderStopLoss() && (Bid-newSL_B)/Point>StopLevel) { Print(" 5th shift by level order # ",OrderTicket()); Modyf_B_lot(); } } // ----------------------------------------------------------------------+ ... } } } }
La séquence de suivi étape par étape se compose de 8 étapes dans la version ci-jointe de la démo Expert Advisor.
Ci-dessous se trouve la capture d'écran affichant les étapes de fonctionnement de la démo Expert Advisor pour le suivi du position acheter. La position a été ouverte du fait que « l'absorption de trois chandeliers» le modèle a été formé. D'ailleurs, le «marteau inversé» fait partie des chandeliers absorbés. Ce fait renforce la force du signal pour ouvrir une position d'achat.
Fig. 6. Exemple de suivi de position d'achat
L'indicateur «Vegas» doit être utilisé pour voir les lignes Fibo comme sur une capture d'écran claire. Il est visible sur le site MQL4 :https://www.mql5.com/fr/code/7148
La même petite capture d'écran étirée de l'écran «sombre»:
Fig. 7. Capture d'écran de l'écran du moniteur (version de démonstration pour Acheter)
Fig. 8. Exemple de suivi de position de vente
Des paramètres de test temporaires doivent être installés pour afficher le travail des Expert Advisors de démonstration, comme illustré à la Fig. 9-10 ci-dessous :
Fig. 9. Paramètres de test de Demo_trail_Buy.mql Expert Advisor
Fig. 10. Paramètres de test de Demo_trail_Sell.mql Expert Advisor
Remarque : Des fichiers avec des Experts Advisors de démonstration sont joints à l'article, en tant que mini-robots pour suivre les positions d'achat et de vente. Les positions sont ouvertes en double lot ici. Mais lorsque le Stop Loss est déplacé à un niveau d'équilibre, il y a confiance dans le mouvement futur des prix dans la bonne direction et il est possible d'ajouter une autre position.
Conclusion
Les exemples présentés d'ordres de suivis montrent que la méthode de déplacement des ordres Stop Loss axée sur les niveaux dynamiques de Fibo peut donner des résultats positifs. La méthode décrite peut être recommandée pour une utilisation pratique dans le commerce.
Niveaux dynamiques de Fibo identifiant les fonctions :
- LevelFiboKgd.mq4
- StopLevelFiboBuy.mq4
- StopLevelFiboSell.mq4
- Fichiers de démonstration :
- Demo_trail_Buy_v1.mq4 - Fichier de démonstration pour acheter
- Demo_trail_Sell_v1.mq4 - Fichier de démonstration pour vendre
Traduit du russe par MetaQuotes Ltd.
Article original : https://www.mql5.com/ru/articles/1349





- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation