Der Indikator ColorX2MA mit der Eingabe der Alerts, der Sendung der Emailnachrichten und der push-Nachrichten aufs Smartphon.
Für die Eingabe der Alerts, Emailnachrichten und push-Nachrichten aufs Smartphon im Code des Indikators wurden die folgenden Änderungen gemacht:
//---- Die Eingangsvariable für Alerts input uint NumberofBar=1; //Die Nummer der Bar für die Sendung des Signals input bool SoundON=true; //Die Erlaubnis der Alert input uint NumberofAlerts=2; //Die Anzahl der Alerts input bool EMailON=false; //Die Erlaubnis der Email-Sendung des Signals input bool PushON=false; //Die Erlaubnis der Sendung des Signals aufs Handy
//+------------------------------------------------------------------+ //| Buy signal function | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname,// Der Text des Indikatorsnamens für die Emailnachrichten und Puch-Signale double &ColorArray[],// Der indizierte farbige Puffer int ColorIndex,// Der Index der Farbe im indizierten farbigen Puffer für die Abgabe des Signals const int Rates_total, // Die aktuelle Anzahl der Bars const int Prev_calculated, // Die Anzahl der Bars beim vorherigen Tick const double &Close[], // Der Exit-Preis const int &Spread[]) // Spreed { //--- 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("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Sell signal function | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // Der Text des Indikatorsnamens für die Emailnachrichten und Puch-Signale double &ColorArray[], // Der indizierte farbige Puffer int ColorIndex, // Der Index der Farbe im indizierten farbigen Puffer für die Abgabe des Signals const int Rates_total, // Die aktuelle Anzahl der Bars const int Prev_calculated, // Die Anzahl der Bars beim vorherigen Tick const double &Close[], // Der Exit-Preis const int &Spread[]) // Spreed { //--- 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("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Die Erhaltung der Timeframe in Form einer Zeile | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
//--- BuySignal("X2MA_Alert",ColorX2MA,1,rates_total,prev_calculated,close,spread); SellSignal("X2MA_Alert",ColorX2MA,2,rates_total,prev_calculated,close,spread); //---
Wo ColorX2MA — ist das der Name des indizierten farbigen Puffers für die Speicherung der farbigen Ausfüllung der Linie in Form eines Index.
Es wird angenommen, dass im Indikatorscode im Block OnCalculate() nur ein Aufruf zu Funktionen BuySignal() und SellSignal() verwendet wird.
Der Indikator verwendet die Klassen der Bibliothek SmoothAlgorithms.mqh (man muss es in <Verzeichnis_Daten_Terminal>\MQL5\Include kopieren), die ausführliche Beschreibung der Arbeit mit denen im Artikel "Bildung von Kursreihenmittelwerten für Zwischenberechnungen ohne zusätzliche Puffer" veröffentlicht wurde.

in Abb.1. Der Indikator ColorX2MA_Alert im Chart
in Abb.2. Der Indikator ColorX2MA_Alert. Die Eingabe des Alerts
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/16477
Delta_RSI
Der Analysator des Trends, welcher aufgrund der Differenz zwischen zwei unterschiedlichen Perioden von Oszillatoren RSI erstellt ist.
BykovTrendAlert
Der semaphore Signal-Indikator BykovTrend mit der Eingabe der Alerts, der Sendung der Emailnachrichten und der push-Nachrichten aufs Smartphon.
Exp_ColorXvaMA_Digit_StDev
Das Handelssystem, welches aufgrund der Signale des Indikators ColorXvaMA_Digit_StDev gebaut wurde.
Delta_MFI
Der Analysator des Trends, welcher aufgrund der Differenz zwischen zwei unterschiedlichen Perioden von Oszillatoren MFI erstellt ist.