Accueil Indicateur technique Publication

BrainTrend2SigAlert : L'indicateur incontournable pour MetaTrader 5

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

BrainTrend2Sig est un indicateur à signaux sémaphores qui propose des alertes, des emails et des notifications push pour optimiser votre trading.

Voici les 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 NombreDeBars=1;//Numéro de bar pour le signal
    input bool SonON=true; //Activer les alertes
    input uint NombreDeAlertes=2;//Nombre d'alertes
    input bool EMailON=false; //Activer l'envoi d'email 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 signal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NomDuSignal,      // texte du nom de l'indicateur pour les emails et notifications
                   double &BuyArrow[],        // tampon de l'indicateur avec les signaux d'achat
                   const int TotalBars,     // nombre actuel de barres
                   const int Prev_calculated, // nombre de barres sur le tick précédent
                   const double &Close[],     // prix de clôture
                   const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalBars!=Prev_calculated) compteur=0;
    
       bool BuySignal=false;
       bool TestSerie=ArrayGetAsSeries(BuyArrow);
       int index;
       if(TestSerie) index=int(NombreDeBars);
       else index=TotalBars-int(NombreDeBars)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true;
       if(BuySignal && compteur<=NombreDeAlertes)
         {
          compteur++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          TestSerie=ArrayGetAsSeries(Close);
          if(TestSerie) index=int(NombreDeBars);
          else index=TotalBars-int(NombreDeBars)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSerie=ArrayGetAsSeries(Spread);
          if(TestSerie) index=int(NombreDeBars);
          else index=TotalBars-int(NombreDeBars)-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,"
     temps courant=",text,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EMailON) SendMail(NomDuSignal+": alerte d'ACHAT","Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(NomDuSignal+": Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fonction de vente signal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomDuSignal,      // texte du nom de l'indicateur pour les emails et notifications
                    double &SellArrow[],       // tampon de l'indicateur avec les signaux de vente
                    const int TotalBars,     // nombre actuel de barres
                    const int Prev_calculated, // nombre de barres sur le tick précédent
                    const double &Close[],     // prix de clôture
                    const int &Spread[])       // spread
      {
    //---
       static uint compteur=0;
       if(TotalBars!=Prev_calculated) compteur=0;
    
       bool SellSignal=false;
       bool TestSerie=ArrayGetAsSeries(SellArrow);
       int index;
       if(TestSerie) index=int(NombreDeBars);
       else index=TotalBars-int(NombreDeBars)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true;
       if(SellSignal && compteur<=NombreDeAlertes)
         {
          compteur++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          TestSerie=ArrayGetAsSeries(Close);
          if(TestSerie) index=int(NombreDeBars);
          else index=TotalBars-int(NombreDeBars)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          TestSerie=ArrayGetAsSeries(Spread);
          if(TestSerie) index=int(NombreDeBars);
          else index=TotalBars-int(NombreDeBars)-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,"
     temps courant=",text,"
     Symbole=",Symbol()," Période=",sPeriod);
          if(EMailON) SendMail(NomDuSignal+": alerte de VENTE","Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod);
          if(PushON) SendNotification(NomDuSignal+": Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+text+" 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("BrainTrend2SigAlert",BuyBuffer,total_bars,prev_calculated,close,spread);
    SellSignal("BrainTrend2SigAlert",SellBuffer,total_bars,prev_calculated,close,spread);
    //---

Les BuyBuffer et SellBuffer sont les noms des tampons de l'indicateur pour stocker les signaux d'achat et de vente. Les valeurs vides doivent être définies dans les tampons de l'indicateur. En théorie, une seule appel à BuySignal() et SellSignal() sera utilisé dans le bloc OnCalculate() du code de l'indicateur.

Fig.1. Indicateur BrainTrend2SigAlert sur le graphique

Fig.1. Indicateur BrainTrend2SigAlert sur le graphique

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

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

Articles connexes

Commentaire (0)