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:
- 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
- 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));
//----
} - 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.2. Waddah Attar Trend Alert Indikator. Generierung von Alarmen
Verwandte Beiträge
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Währungsstärkeindex (CSI) - Ein unverzichtbarer Indikator für MetaTrader 5
- TD Sequential Ultimate für MetaTrader 5 – Der perfekte Indikator für Trader
