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

Mike 2017.01.18 18:49 42 0 0
Pièce jointe

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 :
    inputuint NombreDeBar=1;// Nombre de bar pour le signalinputbool SonON=true; // Activer les alertesinputuint NombreDAlertes=2;// Nombre d'alertesinputbool EmailON=false; // Activer l'envoi d'email pour le signalinputbool 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
                   constint TotalDesBarres,     // nombre actuel de barres
                   constint Précédent_calculé, // nombre de barres au tick précédent
                   constdouble &Close[],     // prix de clôture
                   constint &Spread[])       // spread
      {
    //---
       staticuint 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;
          doubleAsk=Close[index];
          doubleBid=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
                    constint TotalDesBarres,     // nombre actuel de barres
                    constint Précédent_calculé, // nombre de barres au tick précédent
                    constdouble &Close[],     // prix de clôture
                    constint &Spread[])       // spread
      {
    //---
       staticuint 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;
          doubleAsk=Close[index];
          doubleBid=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.

Liste
Commentaire 0