Accueil Indicateur technique Publication

BykovTrendAlert : Un Indicateur Pour MetaTrader 5 Avec Alertes Avancées

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

Auteur réel :

Ramdass - Conversion uniquement

Le BykovTrend est un indicateur de sémaphore de signal qui inclut des alertes, des envois d'emails et des notifications push sur vos appareils mobiles.

Voici les modifications apportées au code de l'indicateur pour mettre en place ces alertes, emails et 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 d'email pour le signal
    input bool PushON=false; // Activer l'envoi du signal sur les appareils mobiles
    
  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,      // nom de l'indicateur pour les messages email et push
                   double &FlècheAchat[],        // tampon de l'indicateur avec les signaux d'achat
                   const int TotalDesBarres,     // nombre actuel de barres
                   const int Précédent_calculé, // nombre de barres au tick précédent
                   const double &Close[],     // prix de clôture
                   const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalDesBarres!=Précédent_calculé) compteur=0;
    
       bool SignalAchat=false;
       bool TestSérie=ArrayGetAsSeries(FlècheAchat);
       int index;
       if(TestSérie) index=int(NombreDeBar);
       else index=TotalDesBarres-int(NombreDeBar)-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(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 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 de signal de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomDuSignal,      // nom de l'indicateur pour les messages email et push
                    double &FlècheVente[],       // tampon de l'indicateur avec les signaux de vente
                    const int TotalDesBarres,     // nombre actuel de barres
                    const int Précédent_calculé, // nombre de barres au tick précédent
                    const double &Close[],     // prix de clôture
                    const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalDesBarres!=Précédent_calculé) compteur=0;
    
       bool SignalVente=false;
       bool TestSérie=ArrayGetAsSeries(FlècheVente);
       int index;
       if(TestSérie) index=int(NombreDeBar);
       else index=TotalDesBarres-int(NombreDeBar)-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(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 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érer la période sous forme de chaîne                              |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Ajout d'appels à BuySignal() et SellSignal() après les cycles de calcul de l'indicateur dans le bloc OnCalculate()
    //---     
       BuySignal("BykovTrendAlert",FlècheAchat,total_des_barres,précédent_calculé,close,spread);
       SellSignal("BykovTrendAlert",FlècheVente,total_des_barres,précédent_calculé,close,spread);
    //--- 
    

Où 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 soit des zéros soit des EMPTY_VALUE.

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

Cet indicateur a été initialement implémenté en MQL4 et publié dans la Base de Code le 28.09.2007.

Fig1. L'indicateur BykovTrendAlert sur le graphique

Fig1. L'indicateur BykovTrendAlert sur le graphique


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

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

Articles connexes

Commentaire (0)