Home Technische indicator Bericht

iRSISignAlert: Een Krachtige Indicator voor MetaTrader 5

Bijlage
15840.zip (3.1 KB, Downloaden 0 keer)

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:

  1. 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
    
  2. 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));
    //----
      }
  3. 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.1. De iRSISignAlert indicator op de grafiek

Fig.2. De iRSISignAlert indicator. Meldingen genereren.

Fig.2. De iRSISignAlert indicator. Meldingen genereren.

Gerelateerde berichten

Reactie (0)