Accueil Indicateur technique Publication

Améliorez vos alertes de trading avec l'indicateur Iin_MA_Signal_Alert pour MetaTrader 5

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

Auteur original : Iin Zulkarnainn

Découvrez Iin_MA_Signal, un indicateur de signal sémaphorique qui offre des alertes, des notifications par e-mail et des notifications push.

Pour améliorer cet indicateur, plusieurs modifications ont été apportées à son code afin d'intégrer les alertes, les messages e-mail et les notifications push :

  1. Ajout de nouveaux paramètres d'entrée :
    input uint NombreDeBar=1;//Nombre de bar pour le signal
    input bool SonON=true; //Activer les alertes
    input uint NombreDAlertes=2;//Nombre d'alertes
    input bool EMailON=false; //Activer l'envoi par e-mail du signal
    input bool PushON=false; //Activer l'envoi du signal sur mobile
    
  2. Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe().
    //+------------------------------------------------------------------+
    //| Fonction d'achat signal                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string NomSignal,      // texte du nom de l'indicateur pour les messages e-mail et push
                   double &BuyArrow[],        // tampon d'indicateur avec les signaux d'achat
                   const int Taux_total,     // le nombre actuel de barres
                   const int Préc_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(Taux_total!=Préc_calculé) compteur=0;
    
       bool BuySignal=false;
       bool TestSérie=ArrayGetAsSeries(BuyArrow);
       int index;
       if(TestSérie) index=int(NombreDeBar);
       else index=Taux_total-int(NombreDeBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true;
       if(BuySignal && 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=Taux_total-int(NombreDeBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBar);
          else index=Taux_total-int(NombreDeBar)-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 \n Ask=",Ask,"\n Bid=",Bid,"\n heure courante=",texte,"\n Symbole=",Symbol()," Période=",sPériode);
          if(EMailON) SendMail(NomSignal+": alerte signal d'achat","Signal d'achat à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
          if(PushON) SendNotification(NomSignal+": Signal d'achat à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction de vente signal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomSignal,      // texte du nom de l'indicateur pour les messages e-mail et push
                    double &SellArrow[],       // tampon d'indicateur avec les signaux de vente
                    const int Taux_total,     // le nombre actuel de barres
                    const int Préc_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(Taux_total!=Préc_calculé) compteur=0;
    
       bool SellSignal=false;
       bool TestSérie=ArrayGetAsSeries(SellArrow);
       int index;
       if(TestSérie) index=int(NombreDeBar);
       else index=Taux_total-int(NombreDeBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true;
       if(SellSignal && 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=Taux_total-int(NombreDeBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSérie=ArrayGetAsSeries(Spread);
          if(TestSérie) index=int(NombreDeBar);
          else index=Taux_total-int(NombreDeBar)-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 \n Ask=",Ask,"\n Bid=",Bid,"\n heure courante=",texte,"\n Symbole=",Symbol()," Période=",sPériode);
          if(EMailON) SendMail(NomSignal+": alerte signal de vente","Signal de vente à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
          if(PushON) SendNotification(NomSignal+": Signal de vente à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtenir le timeframe en tant que 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("Iin_MA_Signal_Alert",BuyBuffer,Taux_total,Préc_calculé,Close,Spread);
       SellSignal("Iin_MA_Signal_Alert",SellBuffer,Taux_total,Préc_calculé,Close,Spread);
    //--- 
    

Les buffers BuyBuffer et SellBuffer 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 soit des zéros, soit EMPTY_VALUE.

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

Fig. 1. Iin_MA_Signal_Alert sur le graphique

Fig. 1. Iin_MA_Signal_Alert sur le graphique


Fig. 2. Iin_MA_Signal_Alert. Génération des alertes

Fig. 2. Iin_MA_Signal_Alert. Génération des alertes

Articles connexes

Commentaire (0)