Accueil Indicateur technique Publication

RJTX_Matches_Smoothed_Alert : Un Indicateur Pratique pour MetaTrader 5

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

Auteur Réel :

Rafael Jimenez Tocino

Indicateur RJTX_Matches_Smoothed avec alertes, notifications par email et push pour smartphones.

Des modifications ont été apportées au code de l'indicateur pour permettre l'implémentation d'alertes, de messages par email et de notifications push :

  1. De nouvelles variables d'entrée ont été ajoutées aux paramètres de l'indicateur :
    input uint NumberofBar=1;                 // Numéro de la barre pour activer le signal
    input bool SoundON=true;           // Activer les alertes
    input uint NumberofAlerts=2;       // Nombre d'alertes
    input bool EMailON=false;          // Activer l'envoi d'email pour le signal
    input bool PushON=false;           // Activer l'envoi du signal sur mobile
    


  2. Trois nouvelles fonctions ont été ajoutées à la fin de l'indicateur : BuySignal(), SellSignal(), et GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fonction d'alerte d'achat                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // texte du nom de l'indicateur pour les messages email et push
                   double &BuyArrow[],        // tampon de l'indicateur avec les signaux d'achat
                   const int Rates_total,     // nombre actuel de barres
                   const int Prev_calculated, // nombre de barres à la tick précédente
                   const double &Close[],     // prix de clôture
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!BuyArrow[index1] && BuyArrow[index]) BuySignal=true;
       if(BuySignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SIGNAL D'ACHAT 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": Alerte de signal d'achat","Signal d'achat à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SIGNAL D'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction de signal de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // texte du nom de l'indicateur pour les messages email et push
                    double &SellArrow[],       // tampon de l'indicateur avec les signaux de vente
                    const int Rates_total,     // nombre actuel de barres
                    const int Prev_calculated, // nombre de bar à la tick précédente
                    const double &Close[],     // prix de clôture
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!SellArrow[index1] && SellArrow[index]) SellSignal=true;
       if(SellSignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SIGNAL DE VENTE 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": Alerte de signal de vente","Signal de vente à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SIGNAL DE VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Récupération de la période sous forme de chaîne                      |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    


  3. Quelques appels aux fonctions BuySignal() et SellSignal() ont été ajoutés après les cycles de calcul de l'indicateur dans le bloc OnCalculate()
    //---     
       BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("RJTX_Matches_Smoothed_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---
    


Les tampons BuyBuffer et SellBuffer portent les noms des tampons de l'indicateur pour stocker les signaux d'achat et de vente. Des zéros ou EMPTY_VALUE doivent être ajoutés aux tampons de l'indicateur en tant que valeurs vides.

On suppose qu'un seul appel à chacune des fonctions BuySignal() et SellSignal() est utilisé dans le code de l'indicateur dans le bloc OnCalculate().

L'indicateur utilise les classes de la bibliothèque SmoothAlgorithms.mqh (à copier dans le dossier <terminal_data_directory>\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.

Cet indicateur a été initialement implémenté en MQL4 et publié dans la Base de Code le 23 décembre 2015.


Fig.1. Indicateur RJTX_Matches_Smoothed_Alert sur le graphique

Fig.1. Indicateur RJTX_Matches_Smoothed_Alert sur le graphique


Fig. 2. Indicateur RJTX_Matches_Smoothed_Alert. Alertes

Fig. 2. Indicateur RJTX_Matches_Smoothed_Alert. Alertes

Articles connexes

Commentaire (0)