Accueil Trading Systématique Publication

Optimisez vos trades avec le Trailing Stop sur MetaTrader 4

Pièce jointe
34177.zip (1.19 KB, Télécharger 2 fois)

Le trailing stop est un outil essentiel pour sécuriser nos trades. Il permet de déplacer le stop loss dans la zone de profit, garantissant ainsi que nous protégeons nos gains de manière automatique.

Commençons par coder les paramètres d'entrée pour notre trailing stop.

input    bool     isTrailingStop = true;  // Trailing Stop
input    int      trailingStart  = 15;    // Début du Trailing (pips)
input    int      trailingStep   = 5     // Pas du Trailing (pips)

input    int      MagicNumber = 0;        // Numéro Magique

Variable globale

// Variable Globale
double   myPoint    = 0.0;

Lorsque nous exécutons cet Expert Advisor, la fonction OnInit() sera exécutée pour la première fois. Dans cette fonction, nous allons valider et initialiser les variables d'entrée.

int OnInit()
  {
  
   if (isTrailingStop && trailingStart <= 0){
      Alert ("Paramètres incorrects");
      return(INIT_PARAMETERS_INCORRECT);
   }
   
   myPoint     = GetPipPoint(Symbol());
   
   return(INIT_SUCCEEDED);
  }

Chaque fois qu'un mouvement de prix (tick) se produit sur le graphique où cet EA est associé, la fonction OnTick() sera exécutée. À l'intérieur de cette fonction, nous allons appeler la fonction setTrailingStop().

void OnTick()
  {
//---
   setTrailingStop(MagicNumber);
   
  }

Fonction setTrailingStop()

void setTrailingStop(int magicNumber=0){
   if (isTrailingStop==false) return;
   
   int      tOrder = 0;
   string   pair = "";
   double   sl = 0.0, tp = 0.0;
   
   pair = Symbol();
   
   tOrder = OrdersTotal();
   for (int i=tOrder-1; i>=0; i--){
      bool hrsSelect = OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if (OrderMagicNumber() == magicNumber && StringFind(OrderSymbol(), pair, 0) == 0 ){
         if (OrderType() == OP_BUY){
            if ( (Bid - (trailingStart * myPoint)) >= OrderOpenPrice()
                  && (Bid - ((trailingStart+trailingStep) * myPoint) >= OrderStopLoss() )
                ){
               sl = NormalizeDouble(Bid - (trailingStart * myPoint), Digits());
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){
                  Print ("#", OrderTicket(), " échec de la mise à jour du sl");
               }
            }
         }
         
         if (OrderType() == OP_SELL){
            if ( (Ask + (trailingStart * myPoint)) <= OrderOpenPrice()
                  && ( (Ask + ((trailingStart+trailingStep) * myPoint) <= OrderStopLoss() ) || OrderStopLoss() == 0.0)
               )
            {
               sl = NormalizeDouble(Ask + (trailingStart * myPoint), Digits() );
               if (!OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, clrBlue)){
                  Print ("#", OrderTicket(), " échec de la mise à jour du sl");
               }
            }
      } // fin if magicNumber
   }// fin for
}


Une autre fonction standard requise est GetPipPoint()

// Fonction GetPipPoint
double GetPipPoint(string pair)
{
   double point= 0.0;
   int digits = (int) MarketInfo(pair, MODE_DIGITS);
   if(digits == 2 || digits== 3) point= 0.01;
   else if(digits== 4 || digits== 5) point= 0.0001;
   return(point);
}

Si vous avez des questions, n'hésitez pas à les poser dans les commentaires ou à rejoindre notre groupe de partage (t.me/codeMQL).

N'oubliez pas de jeter un œil à notre application SignalForex pour vous aider à trader de manière plus rentable.

Vous pouvez nous soutenir en téléchargeant l'application SignalForex sur Google Play.

Articles connexes

Commentaire (0)