Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Facebook !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Experts

Code Block for "Trailing Stop" based on current market price. (Ask / Bid) - expert pour MetaTrader 5

Vues:
90
Note:
(5)
Publié:
MQL5 Freelance Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance

Ce bloc de code fonctionne si vous utilisez un Stop Loss ou non.


Conditions requises

  • Vous devez inclure "Trade.mqh " pour avoir accès à la classe CTrade qui vous permet de travailler avec des positions et des ordres.

#include <Trade\Trade.mqh> // <<------------------------------------------ Inclure ce "Trade.mqh" pour accéder à la classe CTrade 

  • Vous devez définir un paramètre d'entrée pour ajuster la distance de suivi comme vous le souhaitez. Ce n'est pas nécessaire, mais c'est pratique.
input double Traling_Step = 3.0;
  • Vous devez définir une instance pour la classe CTrade. Le nom peut être quelconque. Il serait préférable de la définir après le gestionnaire d'événement OnInt .

  • Ensuite, vous devez créer une instruction if pour vérifier si une position est en cours à ce moment-là. Cette instruction appelle la fonction Check_TrailingStop() ; pour chaque tick. C'est important car l'EA doit suivre une trajectoire précise et régulière. N'oubliez pas de placer cette instruction en haut du gestionnaire d'événement OnTick pour qu'elle fonctionne correctement.
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert|
//+------------------------------------------------------------------+
int OnInit()
  {
//--- créer un timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }


CTrade trade; // <<------------------------------------------ Déclarez l'appel "CTrade". Vous pouvez remplacer "trade" par n'importe quel nom.
void OnTick()
  {
   
   if(PositionsTotal() > 0) // appelle la fonction de stop suiveur pour chaque tick s'il y a / s'il y a des positions en cours. 
     {
      Check_TralingStop(); 
     } 
     
       
  }

  • Vous devez déclarer une fonction personnalisée appelée Check_TrailingStop() ; ( dans ce cas) pour faire le reste. Vous pouvez utiliser le nom de votre choix.
  • La fonction personnalisée passe en revue toutes les positions ouvertes et les suit jusqu'à la distance requise.
void Check_TralingStop()
  {
   int totalPositions = PositionsTotal();
   for(int count =0; count < totalPositions; count++)
     {
      ulong TicketNo = PositionGetTicket(count); // Obtenir le numéro du ticket de position en utilisant l'index de la position.

      if(PositionSelectByTicket(TicketNo)) // Sélectionnez une position en utilisant le numéro de ticket (nous avons déjà choisi le numéro de ticket).
        {
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY) // Vérifier la position Type.
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);       // <<-------------------Get Position Current Stop Loss
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(bidPrice - (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // Aucun stop loss n'est vrai.
              {
               if(bidPrice > openPrice && trailingLevel > openPrice) // Ne s'exécute qu'une seule fois par position. Définit le premier SL.

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // Modifier le stop suiveur en utilisant "CTrade.trade"
              }


            if(bidPrice > openPrice && trailingLevel > stopLoss) // vérifier que le niveau de fin est supérieur au niveau précédent.
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // Modifier le stop suiveur en utilisant "CTrade.trade"
              }

           }
         if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_SELL)
           {
            double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);
            double stopLoss  = PositionGetDouble(POSITION_SL);
            double takeProfit = PositionGetDouble(POSITION_TP);
            double bidPrice  = SymbolInfoDouble(_Symbol,SYMBOL_BID);
            double askPrice  = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
            ulong ticket = PositionGetTicket(count);
            double trailingLevel = NormalizeDouble(askPrice + (Traling_Step * Point()),_Digits);

            if(stopLoss < openPrice) // Aucun stop loss n'est vrai.
              {
               if(askPrice < openPrice && trailingLevel < openPrice) // Ne s'exécute qu'une seule fois par position. Définit le premier SL.

                  trade.PositionModify(ticket,trailingLevel,takeProfit); // Modifier le stop suiveur en utilisant "CTrade.trade"
              }

            if(askPrice < openPrice && trailingLevel < stopLoss) // vérifier que le niveau de fin est supérieur au niveau précédent.
              {
               trade.PositionModify(ticket,trailingLevel,takeProfit); // Modifier le stop suiveur en utilisant "CTrade.trade"
              }
           }

        }
     }
  }










    Traduit de l’anglais par MetaQuotes Ltd.
    Code original : https://www.mql5.com/en/code/49021

    StoDiv StoDiv

    Un indicateur de signal sémaphore typique utilisant un oscillateur stochastique et des fractales.

    AcheterVendre AcheterVendre

    Cet indicateur montre la dernière "ligne de défense" de la tendance actuelle. Le changement de tendance est indiqué par des carrés de couleur et la direction de la tendance par des points de couleur.

    Simple Code for Detect  A  "New Bar or New Candle " Received Simple Code for Detect A "New Bar or New Candle " Received

    Ce bloc de code détecte une nouvelle barre ou une nouvelle bougie lorsqu'il a été reçu.

    Corrélation de rang de Spearman ultra Corrélation de rang de Spearman ultra

    Cet indicateur de tendance de signal est basé sur les lectures de l'indicateur personnalisé de corrélation de rang de Spearman et sur l'analyse de tendance de ses multiples lignes de signal.