Der ColorX2MA Indikator bringt Ihnen endlich die Möglichkeit, Alerts direkt in MetaTrader 5 zu nutzen! Sie können sich über E-Mails und Push-Benachrichtigungen auf Ihrem Mobilgerät informieren lassen.
Um diese Alerts zu implementieren, wurden folgende Anpassungen im Code des Indikators vorgenommen:
- Neue Eingabeparameter wurden eingeführt:
//---- Eingabevariablen für Alerts input uint NumberofBar=1; //Bar-Nummer für das Signal input bool SoundON=true; //Alerts aktivieren input uint NumberofAlerts=2; //Anzahl der Alerts input bool EMailON=false; //Signal per E-Mail versenden input bool PushON=false; //Signal an mobile Geräte senden
- Am Ende des Indikatorcodes wurden drei neue Funktionen hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
//+------------------------------------------------------------------+ //| Funktion für Kaufsignal | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname,// Text des Indikators für E-Mail und Push-Nachrichten double &ColorArray[],// Farbindex-Puffer int ColorIndex,// Farbindex im Farbindex-Puffer zum Generieren eines Signals const int Rates_total, // die aktuelle Anzahl der Balken const int Prev_calculated, // die 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(ColorArray); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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 Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": KAUF Signal Alert","KAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": KAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Funktion für Verkaufssignal | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // Text des Indikators für E-Mail und Push-Nachrichten double &ColorArray[], // Farbindex-Puffer int ColorIndex, // Farbindex im Farbindex-Puffer zum Generieren eines Signals const int Rates_total, // die aktuelle Anzahl der Balken const int Prev_calculated, // die 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(ColorArray); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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 Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": VERKAUF Signal Alert","VERKAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": VERKAUF Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Die Zeiteinheit als String erhalten | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Ein paar Aufrufe zu den Funktionen BuySignal() und SellSignal() wurden nach den Berechnungsschleifen im OnCalculate() Block hinzugefügt:
//--- BuySignal("X2MA_Alert",ColorX2MA,1,rates_total,prev_calculated,close,spread); SellSignal("X2MA_Alert",ColorX2MA,2,rates_total,prev_calculated,close,spread); //---
Hierbei steht ColorX2MA für den Namen des Farbindex-Puffers, der die Linienfarbe in Form eines Index speichert.
Es wird angenommen, dass in dem OnCalculate() Block des Indikatorcodes nur ein Aufruf der Funktionen BuySignal() und SellSignal() verwendet wird.
Der Indikator nutzt die Klassen der SmoothAlgorithms.mqh Bibliothek (bitte in den Ordner <terminal_data_folder>\MQL5\Include kopieren). Die Nutzung der Klassen wurde ausführlich in dem Artikel "Durchschnittsbildung von Preiserien für Zwischenberechnungen ohne zusätzliche Puffer" beschrieben.

Abb.1. Der ColorX2MA_Alert Indikator auf dem Chart
Abb.2. Der ColorX2MA_Alert Indikator. Generierung von Alerts.
Verwandte Beiträge
- 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
- Tägliche Pivot-Punkte: Der unverzichtbare Indikator für MetaTrader 5
