Accueil Indicateur technique Publication

BrainTrend1Sig_Alert : Un Indicateur Puissant pour MetaTrader 5

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

BrainTrend1Sig_Alert est un indicateur de sémaphore qui propose des alertes, des notifications par e-mail et des notifications push pour vous aider à trader efficacement.

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

  1. Ajout de nouveaux paramètres d'entrée :
    input uint NombreDeBarres=1;// Nombre de barres 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'e-mails pour le signal
    input bool PushON=false; // Activer l'envoi de notifications sur mobile
    
  2. Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fonction d'achat                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NomSignal,      // texte du nom de l'indicateur pour les e-mails et notifications push
                   double &BuyArrow[],        // tampon de l'indicateur avec les signaux d'achat
                   const int TotalDesBarres,     // le nombre actuel de barres
                   const int PrecedentCalcule,// 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(TotalDesBarres!=PrecedentCalcule) compteur=0;
    
       bool signalAchat=false;
       bool testSérie=ArrayGetAsSeries(BuyArrow);
       int index;
       if(testSérie) index=int(NombreDeBarres);
       else index=TotalDesBarres-int(NombreDeBarres)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[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(NombreDeBarres);
          else index=TotalDesBarres-int(NombreDeBarres)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          testSérie=ArrayGetAsSeries(Spread);
          if(testSérie) index=int(NombreDeBarres);
          else index=TotalDesBarres-int(NombreDeBarres)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal d'ACHAT 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",texte,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EMailON) SendMail(NomSignal+": Alerte d'ACHAT","Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(NomSignal+": Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomSignal,      // texte du nom de l'indicateur pour les e-mails et notifications push
                    double &SellArrow[],       // tampon de l'indicateur avec les signaux de vente
                    const int TotalDesBarres,     // le nombre actuel de barres
                    const int PrecedentCalcule,// 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(TotalDesBarres!=PrecedentCalcule) compteur=0;
    
       bool signalVente=false;
       bool testSérie=ArrayGetAsSeries(SellArrow);
       int index;
       if(testSérie) index=int(NombreDeBarres);
       else index=TotalDesBarres-int(NombreDeBarres)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[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(NombreDeBarres);
          else index=TotalDesBarres-int(NombreDeBarres)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          testSérie=ArrayGetAsSeries(Spread);
          if(testSérie) index=int(NombreDeBarres);
          else index=TotalDesBarres-int(NombreDeBarres)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SonON) Alert("Signal de VENTE 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",texte,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EMailON) SendMail(NomSignal+": Alerte de VENTE","Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(NomSignal+": Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtenir la période sous forme de 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("BrainTrend1Sig_Alert",BuyBuffer,total_des_barres,precedent_calcule,close,spread);
    SellSignal("BrainTrend1Sig_Alert",SellBuffer,total_des_barres,precedent_calcule,close,spread);
    //---

Les buffers BuyBuffer et SellBuffer sont les noms des tampons de l'indicateur pour stocker les signaux d'achat et de vente. Des zéros ou EMPTY_VALUE doivent être définis dans les tampons de l'indicateur comme valeurs vides.

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

Fig.1. Indicateur BrainTrend1Sig_Alert sur le graphique

Fig.1. Indicateur BrainTrend1Sig_Alert sur le graphique

Fig.2. Indicateur BrainTrend1Sig_Alert. Génération d'alertes

Fig.2. Indicateur BrainTrend1Sig_Alert. Génération d'alertes

Articles connexes

Commentaire (0)