Startseite Technischer Indikator Beitrag

BalanceOfPower_Histogram_Alert: Der Trendindikator für MetaTrader 5

Anhang
16403.zip (22.71 KB, Herunterladen 0 mal)

Autor: RoboFx

Der Balance of Power (BOP) Indikator zeigt als farbigen Histogramm die Stärke und Richtung des aktuellen Trends. Neu hinzugefügte Alerts ermöglichen es, Benachrichtigungen per E-Mail oder Push-Nachricht auf mobile Geräte zu erhalten. Die Histogrammfarben orientieren sich an den eingestellten Parametern für überkaufte und überverkaufte Niveaus sowie der Bewegungsrichtung des Histogramms.

Um die Alerts, E-Mail-Nachrichten und Push-Benachrichtigungen zu implementieren, wurden folgende Änderungen am Indikatorcode vorgenommen:

  1. Neue Eingabeparameter wurden eingeführt:
    //---- Eingabevariablen für Alerts 
    input uint NumberofBar=1;                    //Barnummer für das Signal
    input bool SoundON=true;                     //Alerts aktivieren
    input uint NumberofAlerts=2;                 //Anzahl der Alerts
    input bool EMailON=false;                    //Aktiviere das Versenden des Signals per E-Mail
    input bool PushON=false;                     //Aktiviere das Senden des Signals an mobile Geräte
    
  2. Drei neue Funktionen wurden am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Buy-Signal-Funktion                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// Text des Indikatornamens für E-Mail- und Push-Nachrichten
                   double &ColorArray[],// Farbindex-Puffer
                   int ColorIndex,// Farbindex im Farbindex-Puffer zur Signalgenerierung
                   const int Rates_total,     // aktuelle Anzahl der Bars
                   const int Prev_calculated, // Anzahl der Bars im vorherigen Tick
                   const double &Close[],     // Schlusskurs
                   const int &Spread[])       // Spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) BuySignal=true;
       if(BuySignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Sell-Signal-Funktion                                               |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                    double &ColorArray[],       // Farbindex-Puffer
                    int ColorIndex,             // Farbindex im Farbindex-Puffer zur Signalgenerierung
                    const int Rates_total,     // aktuelle Anzahl der Bars
                    const int Prev_calculated, // Anzahl der Bars im vorherigen Tick
                    const double &Close[],     // Schlusskurs
                    const int &Spread[])       // Spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) SellSignal=true;
       if(SellSignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Zeitrahmen als String zurückgeben                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Ein paar Aufrufe der Funktionen BuySignal() und SellSignal() wurden nach den Berechnungsschleifen des Indikators im OnCalculate()-Block hinzugefügt:
    //---     
       BuySignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,0,rates_total,prev_calculated,close,spread);
       SellSignal("BalanceOfPower_Histogram_Alert",ColorIndBuffer,7,rates_total,prev_calculated,close,spread);
    //---
    

Hierbei ist ColorIndBuffer der Name des Farbindex-Puffers, der die Kerzenfarbe in Form eines Index speichert.

Es wird angenommen, dass in dem OnCalculate()-Block des Indikatorcodes jeweils nur ein Aufruf der Funktionen BuySignal() und SellSignal() verwendet wird.

Der Indikator nutzt die Klassen der SmoothAlgorithms.mqh Bibliothek (kopiere sie in <terminal_data_folder>\MQL5\Include). Die Verwendung der Klassen wurde ausführlich im Artikel "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers" beschrieben.

Ursprünglich wurde dieser Indikator in MQL5 geschrieben und erstmals am Code Base am 07.02.2013 veröffentlicht.

Abbildung 1. Der BalanceOfPower_Histogram_Alert Indikator im Chart

Abbildung 1. Der BalanceOfPower_Histogram_Alert Indikator im Chart

Abbildung 2. Der BalanceOfPower_Histogram_Alert Indikator generiert Alerts.

Abbildung 2. Der BalanceOfPower_Histogram_Alert Indikator generiert Alerts.

Verwandte Beiträge

Kommentar (0)