Startseite Technischer Indikator Beitrag

Waddah Attar Trend Alert: Ein unverzichtbarer Indikator für MetaTrader 5

Anhang
16832.zip (22.5 KB, Herunterladen 0 mal)

Autor: Ing. Waddah Attar

Der Waddah Attar Trend Alert Indikator bietet Ihnen die Möglichkeit, Alarme, E-Mails und Push-Benachrichtigungen zu erhalten.

Um die Funktionen für Alarme und Benachrichtigungen zu implementieren, wurden folgende Änderungen am Indikatorcode vorgenommen:

  1. Neue Eingabeparameter wurden eingeführt:
    //---- Eingaben für Alarme 
    input uint AnzahlDerKerzen=1;// Anzahl der Kerzen für das Signal
    input bool SoundAktiv=true;// Alarme aktivieren
    input uint AnzahlDerAlarme=2;// Anzahl der Alarme
    input bool EMailAktiv=false;// E-Mail-Signale aktivieren
    input bool PushAktiv=false;// Push-Benachrichtigungen aktivieren
    
  2. Drei neue Funktionen wurden am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Funktion für Kaufsignal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalName,// Name des Indikators für E-Mails und Push-Nachrichten
    double &FarbArray[],// Farbindex-Buffer
    int FarbIndex,// Farbindex im Farbindex-Buffer für die Signalgenerierung
    const int GesamtKerzen,// aktuelle Anzahl der Kerzen
    const int VorherBerechnet,// Anzahl der Kerzen beim letzten Tick
    const double &Schluss[],// Schlusskurs
    const int &Spread[]) // Spread
    {
    //---
    static uint zaehler=0;
    if(GesamtKerzen!=VorherBerechnet) zaehler=0;

    bool Kaufsignal=false;
    bool SerienTest=ArrayGetAsSeries(FarbArray);
    int index,index1;
    if(SerienTest)
    {
    index=int(AnzahlDerKerzen);
    index1=index+1;
    }
    else
    {
    index=GesamtKerzen-int(AnzahlDerKerzen)-1;
    index1=index-1;
    }
    if(FarbArray[index1]!=FarbIndex && FarbArray[index]==FarbIndex) Kaufsignal=true;
    if(Kaufsignal && zaehler<=AnzahlDerAlarme)
    {
    zaehler++;
    MqlDateTime tm;
    TimeToStruct(TimeCurrent(),tm);
    string text=TimeToString(TimeCurrent(),TIME_DATE)+ " " +string(tm.stunde)+":"+string(tm.min);
    SerienTest=ArrayGetAsSeries(Schluss);
    if(SerienTest) index=int(AnzahlDerKerzen);
    else index=GesamtKerzen-int(AnzahlDerKerzen)-1;
    double Ask=Schluss[index];
    double Bid=Schluss[index];
    SerienTest=ArrayGetAsSeries(Spread);
    if(SerienTest) index=int(AnzahlDerKerzen);
    else index=GesamtKerzen-int(AnzahlDerKerzen)-1;
    Bid+=_Point*Spread[index];
    string sAsk=DoubleToString(Ask,_Digits);
    string sBid=DoubleToString(Bid,_Digits);
    string sPeriode=GetStringTimeframe(ChartPeriod());
    if(SoundAktiv) Alert("Kaufsignal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Periode=",sPeriode);
    if(EMailAktiv) SendMail(SignalName+": Kaufsignal Alarm","Kaufsignal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
    if(PushAktiv) SendNotification(SignalName+": Kaufsignal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
    }

    //---
    }
    //+------------------------------------------------------------------+
    //| Funktion für Verkaufssignal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalName, // Name des Indikators für E-Mails und Push-Nachrichten
    double &FarbArray[], // Farbindex-Buffer
    int FarbIndex, // Farbindex im Farbindex-Buffer für die Signalgenerierung
    const int GesamtKerzen, // aktuelle Anzahl der Kerzen
    const int VorherBerechnet, // Anzahl der Kerzen beim letzten Tick
    const double &Schluss[], // Schlusskurs
    const int &Spread[]) // Spread
    {
    //---
    static uint zaehler=0;
    if(GesamtKerzen!=VorherBerechnet) zaehler=0;

    bool Verkaufssignal=false;
    bool SerienTest=ArrayGetAsSeries(FarbArray);
    int index,index1;
    if(SerienTest)
    {
    index=int(AnzahlDerKerzen);
    index1=index+1;
    }
    else
    {
    index=GesamtKerzen-int(AnzahlDerKerzen)-1;
    index1=index-1;
    }
    if(FarbArray[index1]!=FarbIndex && FarbArray[index]==FarbIndex) Verkaufssignal=true;
    if(Verkaufssignal && zaehler<=AnzahlDerAlarme)
    {
    zaehler++;
    MqlDateTime tm;
    TimeToStruct(TimeCurrent(),tm);
    string text=TimeToString(TimeCurrent(),TIME_DATE)+ " " +string(tm.stunde)+":"+string(tm.min);
    SerienTest=ArrayGetAsSeries(Schluss);
    if(SerienTest) index=int(AnzahlDerKerzen);
    else index=GesamtKerzen-int(AnzahlDerKerzen)-1;
    double Ask=Schluss[index];
    double Bid=Schluss[index];
    SerienTest=ArrayGetAsSeries(Spread);
    if(SerienTest) index=int(AnzahlDerKerzen);
    else index=GesamtKerzen-int(AnzahlDerKerzen)-1;
    Bid+=_Point*Spread[index];
    string sAsk=DoubleToString(Ask,_Digits);
    string sBid=DoubleToString(Bid,_Digits);
    string sPeriode=GetStringTimeframe(ChartPeriod());
    if(SoundAktiv) Alert("Verkaufssignal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Periode=",sPeriode);
    if(EMailAktiv) SendMail(SignalName+": Verkaufssignal Alarm","Verkaufssignal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
    if(PushAktiv) SendNotification(SignalName+": Verkaufssignal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
    }
    //---
    }
    //+------------------------------------------------------------------+
    //| Zeitrahmen als String abrufen                                  |
    //+------------------------------------------------------------------+
    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("Waddah_Attar_Trend_Alert",FarbIndexBuffer,0,gesamtKerzen,vorherBerechnet,schluss,spread);
    SellSignal("Waddah_Attar_Trend_Alert",FarbIndexBuffer,1,gesamtKerzen,vorherBerechnet,schluss,spread);
    //---

Hierbei ist FarbIndexBuffer der Name eines Farbindex-Puffers, der die Linienfarbe als Index speichert, während 0 und 1 die Farben im Farbindex-Puffer darstellen.

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 Bibliothek SmoothAlgorithms.mqh (kopieren Sie sie in <terminal_data_folder>\MQL5\Include). Die Verwendung der Klassen wurde ausführlich in dem Artikel "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers" beschrieben.

Fig.1. Waddah Attar Trend Alert Indikator auf dem Chart

Fig.1. Waddah Attar Trend Alert Indikator auf dem Chart

Fig.2. Waddah Attar Trend Alert Indikator. Generierung von Alarmen

Fig.2. Waddah Attar Trend Alert Indikator. Generierung von Alarmen

Verwandte Beiträge

Kommentar (0)