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 inputuint NumberofBar=1; //Bar-Nummer für das Signalinputbool SoundON=true; //Alerts aktiviereninputuint NumberofAlerts=2; //Anzahl der Alertsinputbool EMailON=false; //Signal per E-Mail versendeninputbool 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 constint Rates_total, // die aktuelle Anzahl der Balken constint Prev_calculated, // die Anzahl der Balken beim vorherigen Tick constdouble &Close[], // Schlusskurs constint &Spread[]) // Spread { //--- staticuint 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; doubleAsk=Close[index]; doubleBid=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 constint Rates_total, // die aktuelle Anzahl der Balken constint Prev_calculated, // die Anzahl der Balken beim vorherigen Tick constdouble &Close[], // Schlusskurs constint &Spread[]) // Spread { //--- staticuint 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; doubleAsk=Close[index]; doubleBid=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.


Kommentar 0