Schau, wie man Roboter kostenlos herunterladen kann
Find us on Telegram!
Join our fan page
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Indikatoren

BalanceOfPower_Histogram_Alert - Indikator für den MetaTrader 5

Ansichten:
776
Rating:
(14)
Veröffentlicht:
2017.02.07 14:59
Aktualisiert:
2023.03.29 15:01

Der echte Autor:

RoboFx

Der Indikator Balance of Power (BOP) in Form von einem farbigen Histogramm, welches die Kraft und die Richtung des geltenden Trends mit der Abgabe der Alerts zeigt, und schickt die Post-Nachrichten und die push-Nachrichten ins Smartphone. Die farbige Ausfüllung des Histogramms wird entsprechend den Werten der Eingangsparameter der Ebene Überkauf und Uberverkauf und der Bewegungsrichtung des Histogramms durchgeführt.

Für die Eingabe der Alerts, Emailnachrichten und push-Nachrichten aufs Smartphon im Code des Indikators wurden die folgenden Änderungen gemacht:

  1. Zu den Eingangsparametern des Indikators wurden neue Eingangsvariable geschrieben
    //---- Die Eingangsvariable für Alerts 
    input uint NumberofBar=1;                    //Die Nummer der Bar für die Sendung des Signals
    input bool SoundON=true;                     //Die Erlaubnis der Alert
    input uint NumberofAlerts=2;                 //Die Anzahl der Alerts
    input bool EMailON=false;                    //Die Erlaubnis der Email-Sendung des Signals
    input bool PushON=false;                     //Die Erlaubnis der Sendung des Signals aufs Handy
    
  2. Es wurden drei neue Funktionen BuySignal(), SellSignal() und GetStringTimeframe() zum Ende des Indikatorscodes hinzugefügt
    //+------------------------------------------------------------------+
    //| Buy signal function                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// Der Text des Indikatorsnamens für die Emailnachrichten und Puch-Signale
                   double &ColorArray[],// Der indizierte farbige Puffer
                   int ColorIndex,// Der Index der Farbe im indizierten farbigen Puffer für die Abgabe des Signals 
                   const int Rates_total,     // Die aktuelle Anzahl der Bars
                   const int Prev_calculated, // Die Anzahl der Bars beim vorherigen Tick
                   const double &Close[],     // Der Exit-Preis
                   const int &Spread[])       // Spreed
      {
    //---
       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 function                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Der Text des Indikatorsnamens für die Emailnachrichten und Puch-Signale
                    double &ColorArray[],       // Der indizierte farbige Puffer
                    int ColorIndex,             // Der Index der Farbe im indizierten farbigen Puffer für die Abgabe des Signals 
                    const int Rates_total,     // Die aktuelle Anzahl der Bars
                    const int Prev_calculated, // Die Anzahl der Bars beim vorherigen Tick
                    const double &Close[],     // Der Exit-Preis
                    const int &Spread[])       // Spreed
      {
    //---
       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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Die Erhaltung der Timeframe in Form einer Zeile                              |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Zum Block OnCalculate() nach den Loops der Berechnungen des Indikators wurde ein paar Aufrufe zu den Funktionen BuySignal() und SellSignal() 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);
    //---
    

Wo ColorIndBuffer — ist das der Name des indizierten farbigen Puffers für die Speicherung der farbigen Ausfüllung der Kerze in Form eines Index.

Es wird angenommen, dass im Indikatorscode im Block OnCalculate() nur ein Aufruf zu Funktionen BuySignal() und SellSignal() verwendet wird.

Der Indikator verwendet die Klassen der Bibliothek SmoothAlgorithms.mqh (man muss es in <Verzeichnis_Daten_Terminal>\MQL5\Include kopieren), die ausführliche Beschreibung der Arbeit mit denen im Artikel "Bildung von Kursreihenmittelwerten für Zwischenberechnungen ohne zusätzliche Puffer" veröffentlicht wurde.

Zum ersten Mal wurde dieser Indikator in MQL4 umgesetzt und in Code Base 07.02.2013. veröffentlicht.

in Abb.1. Der Indikator BalanceOfPower_Histogram_Alert im Chart

in Abb.1. Der Indikator BalanceOfPower_Histogram_Alert im Chart

in Abb.2. Der Indikator BalanceOfPower_Histogram_Alert. Die Eingabe des Alerts

in Abb.2. Der Indikator BalanceOfPower_Histogram_Alert. Die Eingabe des Alerts

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/16403

ColorJSatl_Digit_HTF ColorJSatl_Digit_HTF

Der Indikator ColorJSatl_Digit mit der Veränderungsmöglichkeit des Timeframes des Indikators in den Eingangsparametern.

si_q_asi_HTF si_q_asi_HTF

Der Indikator si_q_asi mit der Veränderungsmöglichkeit des Timeframes des Indikators in den Eingangsparametern.

ColorJFatl_Digit_Alert ColorJFatl_Digit_Alert

Der Indikator ColorJFatl_Digit mit der Eingabe der Alerts, der Sendung der Emailnachrichten und der push-Nachrichten aufs Smartphon.

Exp_ColorJSatl_Digit Exp_ColorJSatl_Digit

Der Experte Exp_ColorJSatl_Digit wurde aufgrund der veränderten Farbe des Indikators TSICloud gebaut.