Accueil Indicateur technique Publication

BeginnerAlert : L'indicateur incontournable pour MetaTrader 5

Pièce jointe
16448.zip (3.75 KB, Télécharger 0 fois)

Auteur : EarnForex

L'indicateur BeginnerAlert est un outil très pratique pour les traders utilisant MetaTrader 5. Il affiche les extrêmes de tendance (maximums et minimums), qui peuvent servir de points de support et de résistance. Cela vous aide à déterminer le canal de la tendance actuelle, et il est équipé d'alertes qui envoient des notifications par e-mail et des push notifications sur vos appareils mobiles.

C'est un indicateur simple qui utilise une période définie pour identifier les minimums et maximums, les marquant avec des points sur votre graphique.

Pour intégrer les alertes, les e-mails et les notifications push, plusieurs modifications ont été apportées au code de l’indicateur :

  1. Ajout de nouveaux paramètres d'entrée :
    input uint NombreDeBarre=1;// Nombre de barres pour le signal
    input bool SonON=true; // Activer les alertes
    input uint NombreDAlertes=2;// Nombre d'alertes
    input bool EMailON=false; // Activer l'envoi d'e-mails pour le signal
    input bool PushON=false; // Activer l'envoi de signaux sur les appareils mobiles
    
  2. Ajout de trois nouvelles fonctions à la fin du code de l’indicateur : BuySignal(), SellSignal() et GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Fonction signal d'achat                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NomDuSignal,      // texte du nom de l'indicateur pour les e-mails et notifications
                   double &FlècheAchat[],        // tampon indicateur avec les signaux d'achat
                   const int Total_Barres,     // nombre actuel de barres
                   const int Précédent_calculé, // nombre de barres sur le tick précédent
                   const double &Close[],     // prix de clôture
                   const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(Total_Barres!=Précédent_calculé) compteur=0;
    
       bool SignalAchat=false;
       bool TestSérie=ArrayGetAsSeries(FlècheAchat);
       int index;
       if(TestSérie) index=int(NombreDeBarre);
       else index=Total_Barres-int(NombreDeBarre)-1;
       if(NormalizeDouble(FlècheAchat[index],_Digits) && FlècheAchat[index]!=EMPTY_VALUE) SignalAchat=true;
       if(SignalAchat && compteur<=NombreDAlertes)
         {
          compteur++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string texte=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          TestSérie=ArrayGetAsSeries(Close);
          if(TestSérie) index=int(NombreDeBarre);
          else index=Total_Barres-int(NombreDeBarre)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBarre);
          else index=Total_Barres-int(NombreDeBarre)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPériode=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal d'ACHAT 
     Ask=",Ask,"
     Bid=",Bid,"
     temps actuel=",texte,"
     Symbole=",Symbol()," Période=",sPériode);
          if(EMailON) SendMail(NomDuSignal+": Alerte de signal d'ACHAT","Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
          if(PushON) SendNotification(NomDuSignal+": Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction signal de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomDuSignal,      // texte du nom de l'indicateur pour les e-mails et notifications
                    double &FlècheVente[],       // tampon indicateur avec les signaux de vente
                    const int Total_Barres,     // nombre actuel de barres
                    const int Précédent_calculé, // nombre de barres sur le tick précédent
                    const double &Close[],     // prix de clôture
                    const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(Total_Barres!=Précédent_calculé) compteur=0;
    
       bool SignalVente=false;
       bool TestSérie=ArrayGetAsSeries(FlècheVente);
       int index;
       if(TestSérie) index=int(NombreDeBarre);
       else index=Total_Barres-int(NombreDeBarre)-1;
       if(NormalizeDouble(FlècheVente[index],_Digits) && FlècheVente[index]!=EMPTY_VALUE) SignalVente=true;
       if(SignalVente && compteur<=NombreDAlertes)
         {
          compteur++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string texte=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          TestSérie=ArrayGetAsSeries(Close);
          if(TestSérie) index=int(NombreDeBarre);
          else index=Total_Barres-int(NombreDeBarre)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBarre);
          else index=Total_Barres-int(NombreDeBarre)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPériode=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal de VENTE 
     Ask=",Ask,"
     Bid=",Bid,"
     temps actuel=",texte,"
     Symbole=",Symbol()," Période=",sPériode);
          if(EMailON) SendMail(NomDuSignal+": Alerte de signal de VENTE","Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
          if(PushON) SendNotification(NomDuSignal+": Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Récupération de la période sous forme de chaîne                    |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Ajout d'appels aux fonctions BuySignal() et SellSignal() après les cycles de calcul de l’indicateur dans le bloc OnCalculate():
    //---     
       BuySignal("BeginnerAlert",FlècheAchat,total_barres,précédent_calculé,Close,spread);
       SellSignal("BeginnerAlert",FlècheVente,total_barres,précédent_calculé,Close,spread);
    //--- 
    

Les FlècheAchat et FlècheVente sont les noms des tampons de l'indicateur pour stocker les signaux d'achat et de vente. Les valeurs vides dans les tampons de l'indicateur doivent être définies soit sur zéro, soit sur EMPTY_VALUE.

Il est prévu que seul un appel aux fonctions BuySignal() et SellSignal() soit utilisé dans le bloc OnCalculate() du code de l’indicateur.

À l'origine, cet indicateur a été écrit en MQL4 et a été publié pour la première fois dans la Base de Code le 03.09.2008.

Fig1. L'indicateur BeginnerAlert sur le graphique

Fig1. L'indicateur BeginnerAlert sur le graphique

Fig.2. L'indicateur BeginnerAlert générant des alertes.

Fig.2. L'indicateur BeginnerAlert générant des alertes.

Articles connexes

Commentaire (0)