BrainTrend1Sig_Alert ist ein Semaphore-Signalindikator, der dir nicht nur Signale, sondern auch Benachrichtigungen, E-Mails und Push-Nachrichten bietet.
Hier sind die wichtigsten Änderungen im Code des Indikators, die die Implementierung dieser Benachrichtigungen ermöglicht haben:
- Neue Eingabeparameter wurden hinzugefügt:
input uint AnzahlDerKerzen=1;// Anzahl der Kerzen für das Signal input bool SoundAktiv=true; // Benachrichtigungen aktivieren input uint AnzahlDerAlerts=2;// Anzahl der Benachrichtigungen 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()
//+------------------------------------------------------------------+ //| Funktion für Kaufsignal | //+------------------------------------------------------------------+ void BuySignal(string SignalName, // Name des Indikators für E-Mail und Push-Nachrichten double &KaufPfeil[], // Indikatorpuffer mit Kaufsignalen const int GesamteKerzen, // aktuelle Anzahl der Kerzen const int VorherigeBerechnung, // Anzahl der Kerzen bei der vorherigen Berechnung const double &Schluss[], // Schlusskurs const int &Spread[]) // Spread { //--- static uint zähler=0; if(GesamteKerzen!=VorherigeBerechnung) zähler=0; bool KaufSignal=false; bool SerienTest=ArrayGetAsSeries(KaufPfeil); int index; if(SerienTest) index=int(AnzahlDerKerzen); else index=GesamteKerzen-int(AnzahlDerKerzen)-1; if(NormalizeDouble(KaufPfeil[index],_Digits) && KaufPfeil[index]!=EMPTY_VALUE) KaufSignal=true; if(KaufSignal && zähler<=AnzahlDerAlerts) { zähler++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerienTest=ArrayGetAsSeries(Schluss); if(SerienTest) index=int(AnzahlDerKerzen); else index=GesamteKerzen-int(AnzahlDerKerzen)-1; double Ask=Schluss[index]; double Bid=Schluss[index]; SerienTest=ArrayGetAsSeries(Spread); if(SerienTest) index=int(AnzahlDerKerzen); else index=GesamteKerzen-int(AnzahlDerKerzen)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(SoundAktiv) Alert("KAUFSIGNAL Ask=",Ask," Bid=",Bid," aktuelle Zeit=",text," Symbol=",Symbol()," Periode=",sPeriode); if(EmailAktiv) SendMail(SignalName+": KAUFSIGNAL-Benachrichtigung","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 Verkaufsignal | //+------------------------------------------------------------------+ void SellSignal(string SignalName, // Name des Indikators für E-Mail und Push-Nachrichten double &VerkaufPfeil[], // Indikatorpuffer mit Verkaufsignalen const int GesamteKerzen, // aktuelle Anzahl der Kerzen const int VorherigeBerechnung, // Anzahl der Kerzen bei der vorherigen Berechnung const double &Schluss[], // Schlusskurs const int &Spread[]) // Spread { //--- static uint zähler=0; if(GesamteKerzen!=VorherigeBerechnung) zähler=0; bool Verkaufsignal=false; bool SerienTest=ArrayGetAsSeries(VerkaufPfeil); int index; if(SerienTest) index=int(AnzahlDerKerzen); else index=GesamteKerzen-int(AnzahlDerKerzen)-1; if(NormalizeDouble(VerkaufPfeil[index],_Digits) && VerkaufPfeil[index]!=EMPTY_VALUE) Verkaufsignal=true; if(Verkaufsignal && zähler<=AnzahlDerAlerts) { zähler++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerienTest=ArrayGetAsSeries(Schluss); if(SerienTest) index=int(AnzahlDerKerzen); else index=GesamteKerzen-int(AnzahlDerKerzen)-1; double Ask=Schluss[index]; double Bid=Schluss[index]; SerienTest=ArrayGetAsSeries(Spread); if(SerienTest) index=int(AnzahlDerKerzen); else index=GesamteKerzen-int(AnzahlDerKerzen)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(SoundAktiv) Alert("VERKAUFSIGNAL Ask=",Ask," Bid=",Bid," aktuelle Zeit=",text," Symbol=",Symbol()," Periode=",sPeriode); if(EmailAktiv) SendMail(SignalName+": VERKAUFSIGNAL-Benachrichtigung","VERKAUFSIGNAL bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode); if(PushAktiv) SendNotification(SignalName+": VERKAUFSIGNAL bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Zeitrahmen als String abrufen | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES zeitrahmen) { //---- return(StringSubstr(EnumToString(zeitrahmen),7,-1)); //---- }
- Einige Aufrufe der Funktionen BuySignal() und SellSignal() wurden nach den Berechnungsschleifen des Indikators im OnCalculate()-Block hinzugefügt://---
BuySignal("BrainTrend1Sig_Alert",KaufPuffer,gesamt_kerzen,vorgerechnet,schluss,spread);
SellSignal("BrainTrend1Sig_Alert",VerkaufPuffer,gesamt_kerzen,vorgerechnet,schluss,spread);
//---
Hierbei sind KaufPuffer und VerkaufPuffer die Namen der Indikatorpuffer zum Speichern der Kauf- bzw. Verkaufssignale. In den Indikatorpuffern sollten entweder Nullen oder EMPTY_VALUE als leere Werte gesetzt werden.
Es wird angenommen, dass nur ein Aufruf der Funktionen BuySignal() und SellSignal() im OnCalculate()-Block des Indikatorcodes verwendet wird.

Abbildung 1. BrainTrend1Sig_Alert Indikator im Chart

Abbildung 2. BrainTrend1Sig_Alert Indikator. Alerts generieren
Verwandte Beiträge
- Uniformitätsfaktor-Indikator für MetaTrader 5: Analysiere deine Preisbewegungen
- Tägliche prozentuale Veränderung in MT4 – Indikator für MetaTrader 4
- Boom Index Spike Pattern – Ein Leitfaden für MetaTrader 5 Trader
- Tägliche prozentuale Veränderung in MT5 – Indikator für MetaTrader 5
- Erstelle deinen eigenen neuronalen Netzwerk-Prädiktor für MetaTrader 4