Startseite Technischer Indikator Beitrag

wlxBW5ZoneAlert - Dein neuer Indikator für MetaTrader 5

Anhang
16121.zip (3.5 KB, Herunterladen 0 mal)

Autor: Wellx

Der wlxBW5ZoneAlert ist ein Semaphore-Signalindikator, der auf den Werten des Accelerator Oscillator und des Awesome Oscillator von Bill Williams basiert. Er bietet praktische Alerts, die dir per E-Mail und Push-Benachrichtigung auf dein mobiles Gerät gesendet werden.

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

  1. Neue Eingabeparameter hinzugefügt:
    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; //E-Mail-Benachrichtigungen aktivieren
    input bool PushON=false; //Push-Benachrichtigungen aktivieren
    
  2. Drei neue Funktionen zum Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe().
    //+------------------------------------------------------------------+
    //| Funktion für Kaufsignal                                               |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Name des Indikators 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 beim vorherigen Tick
                   const double &Close[],     // Schlusskurs
                   const int &Spread[])       // Spread
      {
    u//---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) 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("KAUF Signal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KAUF-Signal-Alert","KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Funktion für Verkaufssignal                                                |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Name des Indikators für E-Mail und Push-Nachrichten
                    double &SellArrow[],       // Indikatorpuffer mit Verkaufssignalen
                    const int Rates_total,     // aktuelle Anzahl der Bars
                    const int Prev_calculated, // Anzahl der Bars beim vorherigen Tick
                    const double &Close[],     // Schlusskurs
                    const int &Spread[])       // Spread
      {
    u//---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) 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("VERKAUF Signal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKAUF-Signal-Alert","VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //|  Zeitrahmen als String erhalten                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Aufrufe der Funktionen BuySignal() und SellSignal() nach den Berechnungszyklen des Indikators im OnCalculate()-Block hinzugefügt:
    u//---     
       BuySignal("wlxBW5ZoneAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("wlxBW5ZoneAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---
    

Die Namen BuyBuffer und SellBuffer sind die Puffer des Indikators, in denen die Kauf- und Verkaufssignale gespeichert werden. Leere Werte in den Indikator-Puffern müssen entweder auf Null oder EMPTY_VALUE gesetzt werden.

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

Der Indikator nutzt die Klassen der SmoothAlgorithms.mqh Bibliothek (kopiere sie in MQL5\Include). Die Verwendung der Klassen wurde ausführlich in dem Artikel "Durchschnittsbildung von Preiserien für Zwischenberechnungen ohne Verwendung zusätzlicher Puffer" beschrieben.

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

Abb.1. Der wlxBW5ZoneAlert Indikator im Chart

Abb.1. Der wlxBW5ZoneAlert Indikator im Chart

Abb.2. Der wlxBW5ZoneAlert Indikator. Alerts generieren.

Abb.2. Der wlxBW5ZoneAlert Indikator. Alerts generieren.

Verwandte Beiträge

Kommentar (0)