Accueil Indicateur technique Publication

ColorX2MA_Alert : L’indicateur d'alerte pour MetaTrader 5

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

Découvrez l'indicateur ColorX2MA, qui intègre des alertes, l'envoi d'emails et des notifications push sur vos appareils mobiles. Cet outil est un véritable atout pour les traders souhaitant rester informés en temps réel.

Pour mettre en place ces fonctionnalités, plusieurs modifications ont été apportées au code de l'indicateur :

  1. Introduction de nouveaux paramètres d'entrée :
  2. //---- Variables d'entrée pour les alertes 
    input uint NombreDeBar=1;                    // Numéro de la barre 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'emails pour le signal
    input bool PushON=false;                     // Activer l'envoi de notifications sur mobile
    
  3. Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe() :
  4. //+------------------------------------------------------------------+
    //| Fonction d'alerte d'achat                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NomSignal,// texte du nom de l'indicateur pour les emails et notifications
                   double &TableauCouleur[],// tampon d'index des couleurs
                   int IndexCouleur,// index de couleur dans le tampon d'index des couleurs pour générer un signal
                   const int TotalDesBarres,     // le nombre actuel de barres
                   const int Prev_calculé, // le nombre de barres lors du tick précédent
                   const double &Close[],     // prix de clôture
                   const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalDesBarres!=Prev_calculé) compteur=0;
    
       bool AlerteAchat=false;
       bool TestSérie=ArrayGetAsSeries(TableauCouleur);
       int index,index1;
       if(TestSérie)
         {
          index=int(NombreDeBar);
          index1=index+1;
         }
       else
         {
          index=TotalDesBarres-int(NombreDeBar)-1;
          index1=index-1;
         }
       if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) AlerteAchat=true;
       if(AlerteAchat && 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(NombreDeBar);
          else index=TotalDesBarres-int(NombreDeBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBar);
          else index=TotalDesBarres-int(NombreDeBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal d'ACHAT 
     Ask=",Ask,"
     Bid=",Bid,"
     temps actuel=",texte,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EmailON) SendMail(NomSignal+": Alerte d'ACHAT","Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(NomSignal+": Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction d'alerte de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomSignal,      // texte du nom de l'indicateur pour les emails et notifications
                    double &TableauCouleur[],       // tampon d'index des couleurs
                    int IndexCouleur,             // index de couleur dans le tampon d'index des couleurs pour générer un signal
                    const int TotalDesBarres,     // le nombre actuel de barres
                    const int Prev_calculé, // le nombre de barres lors du tick précédent
                    const double &Close[],     // prix de clôture
                    const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalDesBarres!=Prev_calculé) compteur=0;
    
       bool AlerteVente=false;
       bool TestSérie=ArrayGetAsSeries(TableauCouleur);
       int index,index1;
       if(TestSérie)
         {
          index=int(NombreDeBar);
          index1=index+1;
         }
       else
         {
          index=TotalDesBarres-int(NombreDeBar)-1;
          index1=index-1;
         }
       if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) AlerteVente=true;
       if(AlerteVente && 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(NombreDeBar);
          else index=TotalDesBarres-int(NombreDeBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBar);
          else index=TotalDesBarres-int(NombreDeBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal de VENTE 
     Ask=",Ask,"
     Bid=",Bid,"
     temps actuel=",texte,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EmailON) SendMail(NomSignal+": Alerte de VENTE","Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(NomSignal+": Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Récupérer la période sous forme de chaîne                           |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  5. Ajout d'appels aux fonctions BuySignal() et SellSignal() après les cycles de calcul de l'indicateur dans le bloc OnCalculate() :
  6. //---     
       BuySignal("X2MA_Alert",TableauCouleur,1,total_des_barres,prev_calculé,close,spread);
       SellSignal("X2MA_Alert",TableauCouleur,2,total_des_barres,prev_calculé,close,spread);
    //--- 
    

    Dans ces exemples, TableauCouleur est le nom du tampon d'index de couleur pour stocker la couleur de la ligne sous forme d'index.

    Nous prévoyons qu'un seul appel aux fonctions BuySignal() et SellSignal() sera utilisé dans le bloc OnCalculate() du code de l'indicateur.

    L'indicateur utilise les classes de la bibliothèque SmoothAlgorithms.mqh (copiez-la dans <dossier_données_du_terminal>\MQL5\Include). L'utilisation des classes a été décrite en détail dans l'article "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

    Fig1. L'indicateur ColorX2MA_Alert sur le graphique

    Fig1. L'indicateur ColorX2MA_Alert sur le graphique

    Fig.2. L'indicateur ColorX2MA_Alert. Génération d'alertes.

    Fig.2. L'indicateur ColorX2MA_Alert. Génération d'alertes.

    Articles connexes

Commentaire (0)