Originele auteur:
Rafael Jimenez Tocino
Indicator RJTX_Matches_Smoothed met meldingen, e-mails en pushnotificaties voor smartphones.
Er zijn verschillende wijzigingen aangebracht in de code van de indicator om meldingen, e-mailberichten en pushnotificaties te implementeren:
- Nieuwe invoervariabelen zijn toegevoegd aan de inputs van de indicator:
input uint NumberofBar=1; // Bar nummer om het signaal te activeren input bool SoundON=true; // Meldingen inschakelen input uint NumberofAlerts=2; // Aantal meldingen input bool EMailON=false; // E-mail verzending inschakelen input bool PushON=false; // Pushmeldingen naar mobiele apparaten inschakelen
- Drie nieuwe functies zijn toegevoegd aan het einde van de indicator: BuySignal(), SellSignal(), en GetStringTimeframe()
//+------------------------------------------------------------------+ //| Functie voor koop signaal | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // tekst van de indicatornaam voor e-mail en pushberichten double &BuyArrow[], // indicatorbuffer met koop signalen const int Rates_total, // huidig aantal bars const int Prev_calculated, // aantal bars op de vorige tick const double &Close[], // slotprijs const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool BuySignal=false; bool SeriesTest=ArrayGetAsSeries(BuyArrow); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!BuyArrow[index1] && BuyArrow[index]) 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]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("BUY signaal Ask=",Ask," Bid=",Bid," currtime=",text," Symbool=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signaal melding","BUY signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Functie voor verkoop signaal | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // tekst van de indicatornaam voor e-mail en pushberichten double &SellArrow[], // indicatorbuffer met verkoop signalen const int Rates_total, // huidig aantal bars const int Prev_calculated, // aantal bars op de vorige tick const double &Close[], // slotprijs const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!SellArrow[index1] && SellArrow[index]) 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]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SELL signaal Ask=",Ask," Bid=",Bid," currtime=",text," Symbool=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signaal melding","SELL signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| De tijdsperiode als string verkrijgen | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Een paar aanroepen naar de functies BuySignal() en SellSignal() zijn toegevoegd na de berekeningen van de indicator in het blok OnCalculate()
//--- BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("RJTX_Matches_Smoothed_Alert",SellBuffer,rates_total,prev_calculated,close,spread); //---
Waar BuyBuffer en SellBuffer de namen zijn van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. Ofwel nullen of EMPTY_VALUE moeten aan de indicatorbuffers worden toegevoegd als lege waarden.
Er wordt aangenomen dat slechts één aanroep naar elke van de functies BuySignal() en SellSignal() wordt gebruikt in de indicatorcode in het blok OnCalculate().
De indicator maakt gebruik van de klassen van de bibliotheek SmoothAlgorithms.mqh (die gekopieerd moet worden naar de <terminal_data_directory>\MQL5\Include map). Het gebruik van de klassen is uitvoerig beschreven in het artikel Averaging Price Series for Intermediate Calculations Without Using Additional Buffers.
Deze indicator werd voor het eerst geïmplementeerd in MQL4 en gepubliceerd in de Code Base op 23 december 2015.

Fig.1. RJTX_Matches_Smoothed_Alert indicator op de grafiek
Fig. 2. Indicator RJTX_Matches_Smoothed_Alert. Meldingen
Gerelateerde berichten
- BykovTrend_HTF_Signal: Dé Indicator voor MetaTrader 5 voor Trendanalyse
- Prijs in het Poolse Coördinatensysteem - Indicator voor MetaTrader 5
- Fibonacci ZigZag Indicator voor MetaTrader 5: Een Stapsgewijze Handleiding
- Open Range Breakout Indicator voor MetaTrader 5: Ontdek de Kracht van deze Tool
- ATR Geïntegreerde Laguerre RSI Indicator voor MetaTrader 5
