Startseite Technischer Indikator Beitrag

iDeMarkerSignAlert: Der Indikator für MetaTrader 5 mit Alarmfunktionen

Anhang
15838.zip (3.08 KB, Herunterladen 0 mal)

Der iDeMarkerSignAlert ist ein praktischer Semaphore-Pfeil-Indikator, der auf dem klassischen DeMarker-Oszillator basiert. Er zeigt Signale an, wenn der Markt überkauft oder überverkauft ist, und bietet zudem eine Reihe von Alarmfunktionen. Das Beste daran? Du kannst Benachrichtigungen per E-Mail oder Push-Nachricht auf dein Mobilgerät erhalten!

Um die Alarmfunktionen zu implementieren, wurden einige Anpassungen am Indikatorcode vorgenommen:

  1. Neue Eingabeparameter wurden eingeführt:
    input uint NumberofBar=1;// Anzahl der Balken für das Signal
    input bool SoundON=true; // Alarme aktivieren
    input uint NumberofAlerts=2;// Anzahl der Alarme
    input bool EMailON=false; // E-Mail-Benachrichtigung aktivieren
    input bool PushON=false; // Push-Benachrichtigung aktivieren
    
  2. Drei neue Funktionen wurden am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Kauf-Signal-Funktion                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                   double &BuyArrow[],        // Indikator-Puffer mit Kaufsignalen
                   const int Rates_total,     // aktuelle Anzahl der Balken
                   const int Prev_calculated, // Anzahl der Balken beim 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;
       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 \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Zeitraum=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KAUF-Signal-Alarm","KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkaufs-Signal-Funktion                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                    double &SellArrow[],       // Indikator-Puffer mit Verkaufsignalen
                    const int Rates_total,     // aktuelle Anzahl der Balken
                    const int Prev_calculated, // Anzahl der Balken beim 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;
       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 \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Zeitraum=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKAUF-Signal-Alarm","VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Zeitraum="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Erhalten des Zeitrahmens als String                               |
    //+------------------------------------------------------------------+
    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("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread);
        SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
    

Hierbei sind BuyBuffer und SellBuffer die Namen der Indikator-Puffer, die die Kauf- und Verkaufssignale speichern. Leere Werte in den Indikator-Puffern müssen entweder Null oder EMPTY_VALUE sein.

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

Abb.1. Der iDeMarkerSignAlert Indikator im Chart

Abb.1. Der iDeMarkerSignAlert Indikator im Chart

Abb.2. Der iDeMarkerSignAlert Indikator generiert Alarme

Abb.2. Der iDeMarkerSignAlert Indikator. Generiert Alarme.

Verwandte Beiträge

Kommentar (0)