Accueil Indicateur technique Publication

Alerte Histogramme de Balance de Puissance : Indicateur pour MetaTrader 5

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

Auteur réel :

RoboFx

L'indicateur Balance de Puissance (BOP) est présenté sous forme d'histogramme coloré, représentant la force et la direction de la tendance actuelle. Il offre des alertes, envoie des e-mails et des notifications push sur vos appareils mobiles. La couleur de l'histogramme varie en fonction des paramètres d'entrée définissant les niveaux de surachat et de survente ainsi que la direction de mouvement de l'histogramme.

Pour intégrer les alertes, les messages électroniques et les notifications push, plusieurs modifications ont été apportées au code de l'indicateur :

  1. Introduction de nouveaux paramètres d'entrée :
    //---- Variables d'entrée pour les alertes 
    input uint NombreDeBarres=1;                    //Numéro de barre pour le signal
    input bool SonON=true;                     //Activer les alertes
    input uint NombreDAlerts=2;                 //Nombre d'alertes
    input bool EMailON=false;                    //Activer l'envoi de signal par e-mail
    input bool PushON=false;                     //Activer l'envoi de signal sur appareils mobiles
    
  2. Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fonction du signal d'achat                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string nomSignal,// texte du nom de l'indicateur pour les messages e-mail et push
                   double &TableauCouleur[],// buffer d'index de couleur
                   int IndexCouleur,// index de couleur dans le buffer d'index de couleur pour générer un signal
                   const int Total_Rates,     // le nombre actuel de barres
                   const int Precedent_calculé, // le 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(Total_Rates!=Precedent_calculé) compteur=0;
    
       bool signalAchat=false;
       bool testSérie=ArrayGetAsSeries(TableauCouleur);
       int index,index1;
       if(testSérie)
         {
          index=int(NombreDeBarres);
          index1=index+1;
         }
       else
         {
          index=Total_Rates-int(NombreDeBarres)-1;
          index1=index-1;
         }
       if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) signalAchat=true;
       if(signalAchat && compteur<=NombreDAlerts)
         {
          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=Total_Rates-int(NombreDeBarres)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          testSérie=ArrayGetAsSeries(Spread);
          if(testSérie) index=int(NombreDeBarres);
          else index=Total_Rates-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 de signal 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 signal de vente                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string nomSignal,      // texte du nom de l'indicateur pour les messages e-mail et push
                    double &TableauCouleur[],       // buffer d'index de couleur
                    int IndexCouleur,             // index de couleur dans le buffer d'index de couleur pour générer un signal
                    const int Total_Rates,     // le nombre actuel de barres
                    const int Precedent_calculé, // le 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(Total_Rates!=Precedent_calculé) compteur=0;
    
       bool signalVente=false;
       bool testSérie=ArrayGetAsSeries(TableauCouleur);
       int index,index1;
       if(testSérie)
         {
          index=int(NombreDeBarres);
          index1=index+1;
         }
       else
         {
          index=Total_Rates-int(NombreDeBarres)-1;
          index1=index-1;
         }
       if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) signalVente=true;
       if(signalVente && compteur<=NombreDAlerts)
         {
          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=Total_Rates-int(NombreDeBarres)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          testSérie=ArrayGetAsSeries(Spread);
          if(testSérie) index=int(NombreDeBarres);
          else index=Total_Rates-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 signal 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 le timeframe 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("BalanceOfPower_Histogram_Alert",TableauCouleurInd,0,Total_Rates,Precedent_calculé,Close,Spread);
       SellSignal("BalanceOfPower_Histogram_Alert",TableauCouleurInd,7,Total_Rates,Precedent_calculé,Close,Spread);
    //---
    

Où TableauCouleurInd est le nom du buffer d'index de couleur pour stocker la couleur de la bougie sous forme d'index.

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

L'indicateur utilise les classes de la bibliothèque SmoothAlgorithms.mqh (copiez-la dans <dossier_de_données_terminal>\MQL5\Include). L'utilisation de ces classes est décrite en détail dans l'article "Moyenne des séries de prix pour des calculs intermédiaires sans utiliser de buffers supplémentaires".

À l'origine, cet indicateur a été écrit en MQL5 et a été publié pour la première fois dans la Base de Code le 07.02.2013.

Fig1. L'indicateur BalanceOfPower_Histogram_Alert sur le graphique

Fig1. L'indicateur BalanceOfPower_Histogram_Alert sur le graphique

Fig.2. L'indicateur BalanceOfPower_Histogram_Alert générant des alertes.

Fig.2. L'indicateur BalanceOfPower_Histogram_Alert générant des alertes.

Articles connexes

Commentaire (0)