Startseite Technischer Indikator Beitrag

RJTX_Matches_Smoothed_Alert - Ein leistungsstarker Indikator für MetaTrader 5

Anhang
22712.zip (22.92 KB, Herunterladen 0 mal)

Autor:

Rafael Jimenez Tocino

Der Indikator RJTX_Matches_Smoothed bietet nützliche Alerts, E-Mail-Benachrichtigungen und Push-Nachrichten für Smartphones.

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

  1. Neue Eingangsvariablen wurden zu den Indikatoreinstellungen hinzugefügt:
    input uint NumberofBar=1;                 // Bar-Nummer zur Aktivierung des Signals
    input bool SoundON=true;           // Alerts aktivieren
    input uint NumberofAlerts=2;       // Anzahl der Alerts
    input bool EMailON=false;          // E-Mail-Benachrichtigungen aktivieren
    input bool PushON=false;           // Push-Nachrichten an mobile Geräte senden
    


  2. Drei neue Funktionen wurden am Ende des Indikators hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Buy-Signal-Funktion                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                   double &BuyArrow[],        // Indikatorpuffer mit Kaufsignalen
                   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(BuyArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!BuyArrow[index1] && BuyArrow[index]) 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]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("KAUF-Signal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Zeitrahmen=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KAUF-Signal-Alert","KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitrahmen="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitrahmen="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Sell-Signal-Funktion                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                    double &SellArrow[],       // Indikatorpuffer mit Verkaufsignalen
                    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(SellArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!SellArrow[index1] && SellArrow[index]) 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]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("VERKAUF-Signal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Zeitrahmen=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKAUF-Signal-Alert","VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitrahmen="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitrahmen="+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 Berechnungszyklen des Indikators im Block OnCalculate() hinzugefügt:
    //---     
       BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("RJTX_Matches_Smoothed_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---
    


Dabei sind BuyBuffer und SellBuffer die Namen der Indikatorpuffer zur Speicherung der Kauf- und Verkaufssignale. Leere Werte müssen entweder als Nullen oder EMPTY_VALUE in die Indikatorpuffer eingefügt werden.

Es wird angenommen, dass im Indikatorcode jeweils nur ein Aufruf für die Funktionen BuySignal() und SellSignal() im Block OnCalculate() verwendet wird.

Der Indikator verwendet die Klassen der Bibliothek SmoothAlgorithms.mqh (die in den Ordner <terminal_data_directory>\MQL5\Include kopiert werden muss). Die Verwendung der Klassen wurde ausführlich im Artikel Averaging Price Series for Intermediate Calculations Without Using Additional Buffers beschrieben.

Dieser Indikator wurde erstmals in MQL4 implementiert und am Code Base am 23. Dezember 2015 veröffentlicht.


Abb.1. Indikator RJTX_Matches_Smoothed_Alert im Chart

Abb.1. RJTX_Matches_Smoothed_Alert Indikator im Chart


Abb. 2. Indikator RJTX_Matches_Smoothed_Alert. Alarmierung

Abb. 2. Indikator RJTX_Matches_Smoothed_Alert. Alarmierung

Verwandte Beiträge

Kommentar (0)