Der Semaphore-Pfeil-Signalindikator basiert auf dem klassischen Relative Strength Index (RSI) und zeigt Signale an, wenn der Markt überkauft oder überverkauft ist. Mit nützlichen Funktionen wie Alarmen, E-Mail-Benachrichtigungen und Push-Nachrichten für mobile Endgeräte, ist dieser Indikator ein Muss für jeden Trader.
Um die Alarmfunktionen, E-Mail-Benachrichtigungen und Push-Nachrichten zu implementieren, wurden folgende Änderungen im Indikatorcode vorgenommen:
- Neue Eingabeparameter hinzugefügt:
input uint AnzahlDerKerzen=1;// Kerzenanzahl für das Signal input bool AlarmAktiv=true; // Alarme aktivieren input uint AnzahlDerAlarme=2;// Anzahl der Alarme input bool EMailAktiv=false; // E-Mail-Benachrichtigungen aktivieren input bool PushAktiv=false; // Push-Benachrichtigungen aktivieren
- Drei neue Funktionen wurden am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe().
//+------------------------------------------------------------------+ //| Kauf-Signal-Funktion | //+------------------------------------------------------------------+ void BuySignal(string SignalName, // Text des Indikatornamens für E-Mail- und Push-Nachrichten double &KaufPfeil[], // Indikatorpuffer mit Kaufsignalen const int GesamtKerzen, // aktuelle Anzahl der Kerzen const int VorherBerechnet,// Anzahl der Kerzen im vorherigen Tick const double &Schluss[], // Schlusskurs const int &Spread[]) // Spread { //--- static uint zähler=0; if(GesamtKerzen!=VorherBerechnet) zähler=0; bool KaufSignal=false; bool SerieTest=ArrayGetAsSeries(KaufPfeil); int index; if(SerieTest) index=int(AnzahlDerKerzen); else index=GesamtKerzen-int(AnzahlDerKerzen)-1; if(NormalizeDouble(KaufPfeil[index],_Digits) && KaufPfeil[index]!=EMPTY_VALUE) KaufSignal=true; if(KaufSignal && zähler<=AnzahlDerAlarme) { zähler++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Schluss); if(SerieTest) index=int(AnzahlDerKerzen); else index=GesamtKerzen-int(AnzahlDerKerzen)-1; double Ask=Schluss[index]; double Bid=Schluss[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AnzahlDerKerzen); else index=GesamtKerzen-int(AnzahlDerKerzen)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(AlarmAktiv) Alert("KAUF-Signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Periode=",sPeriod); if(EMailAktiv) SendMail(SignalName+": KAUF-Signal-Alarm","KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); if(PushAktiv) SendNotification(SignalName+": KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Verkaufs-Signal-Funktion | //+------------------------------------------------------------------+ void SellSignal(string SignalName, // Text des Indikatornamens für E-Mail- und Push-Nachrichten double &VerkaufPfeil[], // Indikatorpuffer mit Verkaufssignalen const int GesamtKerzen, // aktuelle Anzahl der Kerzen const int VorherBerechnet, // Anzahl der Kerzen im vorherigen Tick const double &Schluss[], // Schlusskurs const int &Spread[]) // Spread { //--- static uint zähler=0; if(GesamtKerzen!=VorherBerechnet) zähler=0; bool VerkaufsSignal=false; bool SerieTest=ArrayGetAsSeries(VerkaufPfeil); int index; if(SerieTest) index=int(AnzahlDerKerzen); else index=GesamtKerzen-int(AnzahlDerKerzen)-1; if(NormalizeDouble(VerkaufPfeil[index],_Digits) && VerkaufPfeil[index]!=EMPTY_VALUE) VerkaufsSignal=true; if(VerkaufsSignal && zähler<=AnzahlDerAlarme) { zähler++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Schluss); if(SerieTest) index=int(AnzahlDerKerzen); else index=GesamtKerzen-int(AnzahlDerKerzen)-1; double Ask=Schluss[index]; double Bid=Schluss[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AnzahlDerKerzen); else index=GesamtKerzen-int(AnzahlDerKerzen)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(AlarmAktiv) Alert("VERKAUF-Signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Periode=",sPeriod); if(EMailAktiv) SendMail(SignalName+": VERKAUF-Signal-Alarm","VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); if(PushAktiv) SendNotification(SignalName+": VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Zeitrahmen als String zurückgeben | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Ein paar Aufrufe der Funktionen BuySignal() und SellSignal() wurden nach den Berechnungsschleifen im OnCalculate()-Block hinzugefügt:
BuySignal("iWPRSign",KaufPuffer,gesamt_kerzen,vorgängig_berechnet,schluß,spread); SellSignal("iWPRSign",VerkaufPuffer,gesamt_kerzen,vorgängig_berechnet,schluß,spread);
Dabei sind KaufPuffer und VerkaufPuffer die Namen der Indikatorpuffer für die Speicherung der Kauf- und Verkaufssignale. Die leeren Werte in den Indikatorpuffern müssen entweder Null oder EMPTY_VALUE gesetzt werden.
Es wird davon ausgegangen, dass nur ein Aufruf der Funktionen BuySignal() und SellSignal() im OnCalculate()-Block des Indikatorcodes verwendet wird.

Abb.1. Der iRSISignAlert-Indikator im Chart

Abb.2. Der iRSISignAlert-Indikator. Alarmgenerierung.
Verwandte Beiträge
- Tägliche prozentuale Veränderung in MT4 – Indikator für MetaTrader 4
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Marktfazilitätsindex (BW MFI) – Ein hilfreicher Indikator für MetaTrader 5