De iRSISignAlert is een handzame indicator voor MetaTrader 5, die gebruik maakt van de klassieke Relative Strength Index (RSI) om signalen te genereren wanneer de markt overbought of oversold is. Deze indicator is uitgerust met handige meldingen, waaronder e-mail en push-notificaties naar je mobiele apparaten.
Hieronder bespreken we de aanpassingen die zijn gedaan aan de code van de indicator om de meldingen te implementeren:
- Nieuwe invoerparameters zijn toegevoegd:
input uint AantalBars=1; //Aantal bars voor het signaal input bool GeluidAan=true; //Meldingen inschakelen input uint AantalMeldingen=2; //Aantal meldingen input bool EMailAan=false; //E-mail meldingen inschakelen input bool PushAan=false; //Push-meldingen inschakelen
- Drie nieuwe functies zijn toegevoegd aan het einde van de code: BuySignal(), SellSignal() en GetStringTimeframe()
//+------------------------------------------------------------------+ //| Functie voor koop signaal | //+------------------------------------------------------------------+ void BuySignal(string SignaalNaam, // tekst van de indicatornaam voor e-mail en push berichten double &KoopPijl[], // buffer van de indicator met koop signalen const int TotaalBars, // het huidige aantal bars const int VorigBerekend, // het aantal bars op de vorige tick const double &Sluit[], // sluitprijs const int &Spread[]) // spread { //--- static uint teller=0; if(TotaalBars!=VorigBerekend) teller=0; bool KoopSignaal=false; bool SerieTest=ArrayGetAsSeries(KoopPijl); int index; if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; if(NormalizeDouble(KoopPijl[index],_Digits) && KoopPijl[index]!=EMPTY_VALUE) KoopSignaal=true; if(KoopSignaal && teller<=AantalMeldingen) { teller++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Sluit); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; double Vraagprijs=Sluit[index]; double Bod=Sluit[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; Bod+=Spread[index]; string sVraag=DoubleToString(Vraagprijs,_Digits); string sBod=DoubleToString(Bod,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(GeluidAan) Alert("KOOP signaal Vraagprijs=",Vraagprijs," Bod=",Bod," huidige tijd=",tekst," Symbool=",Symbol()," Periode=",sPeriode); if(EMailAan) SendMail(SignaalNaam+": KOOP signaal melding","KOOP signaal bij Vraagprijs="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); if(PushAan) SendNotification(SignaalNaam+": KOOP signaal bij Vraagprijs="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Functie voor verkoop signaal | //+------------------------------------------------------------------+ void SellSignal(string SignaalNaam, // tekst van de indicatornaam voor e-mail en push berichten double &VerkoopPijl[], // buffer van de indicator met verkoop signalen const int TotaalBars, // het huidige aantal bars const int VorigBerekend, // het aantal bars op de vorige tick const double &Sluit[], // sluitprijs const int &Spread[]) // spread { //--- static uint teller=0; if(TotaalBars!=VorigBerekend) teller=0; bool VerkoopSignaal=false; bool SerieTest=ArrayGetAsSeries(VerkoopPijl); int index; if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; if(NormalizeDouble(VerkoopPijl[index],_Digits) && VerkoopPijl[index]!=EMPTY_VALUE) VerkoopSignaal=true; if(VerkoopSignaal && teller<=AantalMeldingen) { teller++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SerieTest=ArrayGetAsSeries(Sluit); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; double Vraagprijs=Sluit[index]; double Bod=Sluit[index]; SerieTest=ArrayGetAsSeries(Spread); if(SerieTest) index=int(AantalBars); else index=TotaalBars-int(AantalBars)-1; Bod+=Spread[index]; string sVraag=DoubleToString(Vraagprijs,_Digits); string sBod=DoubleToString(Bod,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(GeluidAan) Alert("VERKOOP signaal Vraagprijs=",Vraagprijs," Bod=",Bod," huidige tijd=",tekst," Symbool=",Symbol()," Periode=",sPeriode); if(EMailAan) SendMail(SignaalNaam+": VERKOOP signaal melding","VERKOOP signaal bij Vraagprijs="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); if(PushAan) SendNotification(SignaalNaam+": VERKOOP signaal bij Vraagprijs="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| De tijdsperiode als string verkrijgen | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Een paar aanroepen van de functies BuySignal() en SellSignal() zijn toegevoegd na de berekeningen van de indicator in het OnCalculate() blok:
BuySignal("iWPRSign",KoopBuffer,rates_total,prev_calculated,close,spread); SellSignal("iWPRSign",VerkoopBuffer,rates_total,prev_calculated,close,spread);
Hierbij zijn KoopBuffer en VerkoopBuffer de namen van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. Lege waarden in de indicatorbuffers moeten ingesteld worden op nul of EMPTY_VALUE.
Het is de bedoeling dat er slechts één aanroep van de functies BuySignal() en SellSignal() wordt gebruikt in het OnCalculate() blok van de indicatorcode.

Fig.1. De iRSISignAlert indicator op de grafiek

Fig.2. De iRSISignAlert indicator. Meldingen genereren.
Gerelateerde berichten
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- Verbeter je Handelsstrategieën met de ColorXADX Indicator voor MetaTrader 5