Accueil Indicateur technique Publication

ColorJFatl_Digit_Alert : Un Indicateur Pratique pour MetaTrader 5

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

L'indicateur ColorJFatl_Digit est un outil incontournable pour tous les traders utilisant MetaTrader 5. Avec ses alertes intégrées, il envoie des notifications par email et des push sur vos appareils mobiles, vous permettant de rester informé où que vous soyez.

Voici les modifications apportées au code de l'indicateur pour activer ces fonctionnalités :

  1. Ajout de nouveaux paramètres d'entrée pour les alertes :
    //---- Variables d'entrée pour les alertes 
    input uint NombreDeBar=1;                    // Nombre de bar pour le signal
    input bool SonON=true;                     // Activer les alertes
    input uint NombreDAlerts=2;                 // Nombre d'alertes
    input bool EMailON=false;                    // Activer l'envoi d'email pour le signal
    input bool PushON=false;                     // Activer l'envoi de signal sur mobile
    
  2. Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fonction de signal d'achat                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string NomDuSignal,// texte du nom de l'indicateur pour les messages email et push
                   double &TableauCouleur[],// tampon d'index de couleur
                   int IndexCouleur,// index de couleur dans le tampon d'index de couleur pour générer un signal
                   const int TotalDeBars,     // le nombre actuel de bars
                   const int Précédent_calculé, // nombre de bars au dernier tick
                   const double &Close[],     // prix de clôture
                   const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalDeBars!=Précédent_calculé) compteur=0;
    
       bool SignalAchat=false;
       bool TestSérie=ArrayGetAsSeries(TableauCouleur);
       int index,index1;
       if(TestSérie)
         {
          index=int(NombreDeBar);
          index1=index+1;
         }
       else
         {
          index=TotalDeBars-int(NombreDeBar)-1;
          index1=index-1;
         }
       if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) SignalAchat=true;
       if(SignalAchat && compteur<=NombreDAlerts)
         {
          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=TotalDeBars-int(NombreDeBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBar);
          else index=TotalDeBars-int(NombreDeBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal d'ACHAT \n Ask=",Ask,"\n Bid=",Bid,"\n temps courant=",texte,"\n Symbole=",Symbol()," Période=",sPeriode);
          if(EMailON) SendMail(NomDuSignal+": ALERTE signal d'ACHAT","Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode);
          if(PushON) SendNotification(NomDuSignal+": ALERTE signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction de signal de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomDuSignal,      // texte du nom de l'indicateur pour les messages email et push
                    double &TableauCouleur[],       // tampon d'index de couleur
                    int IndexCouleur,             // index de couleur dans le tampon d'index de couleur pour générer un signal
                    const int TotalDeBars,     // le nombre actuel de bars
                    const int Précédent_calculé, // nombre de bars au dernier tick
                    const double &Close[],     // prix de clôture
                    const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalDeBars!=Précédent_calculé) compteur=0;
    
       bool SignalVente=false;
       bool TestSérie=ArrayGetAsSeries(TableauCouleur);
       int index,index1;
       if(TestSérie)
         {
          index=int(NombreDeBar);
          index1=index+1;
         }
       else
         {
          index=TotalDeBars-int(NombreDeBar)-1;
          index1=index-1;
         }
       if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) SignalVente=true;
       if(SignalVente && compteur<=NombreDAlerts)
         {
          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=TotalDeBars-int(NombreDeBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBar);
          else index=TotalDeBars-int(NombreDeBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal de VENTE \n Ask=",Ask,"\n Bid=",Bid,"\n temps courant=",texte,"\n Symbole=",Symbol()," Période=",sPeriode);
          if(EMailON) SendMail(NomDuSignal+": ALERTE signal de VENTE","Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode);
          if(PushON) SendNotification(NomDuSignal+": ALERTE signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtenir la période sous forme de chaîne                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Ajout de quelques appels aux fonctions BuySignal() et SellSignal() après les cycles de calcul de l'indicateur dans le bloc OnCalculate() :
    //---     
       BuySignal("ColorJFatl_Digit_Alert",TableauCouleurExtLine,2,total_de_bars,précédent_calculé,close,spread);
       SellSignal("ColorJFatl_Digit_Alert",TableauCouleurExtLine,0,total_de_bars,précédent_calculé,close,spread);
    //--- 
    

Notez que TableauCouleurExtLine est le nom du tampon d'index de couleur pour stocker la couleur de la ligne sous forme d'un index.

Il est prévu que les appels aux fonctions BuySignal() et SellSignal() ne soient utilisés qu'une seule fois 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_terminal>\MQL5\Include). L'utilisation des classes a été décrite en détail dans l'article "Moyennage des séries de prix pour des calculs intermédiaires sans utiliser de tampons supplémentaires".

Fig1. L'indicateur ColorJFatl_Digit_Alert sur le graphique

Fig1. L'indicateur ColorJFatl_Digit_Alert sur le graphique

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

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

Articles connexes

Commentaire (0)