Home Technische indicator Bericht

Harami_Alert: Een Must-Have Indicator voor MetaTrader 5

Bijlage
22403.zip (3.69 KB, Downloaden 0 keer)

Oorspronkelijke auteur:

Paul Stringer

Deze indicator herkent Harami-patronen en biedt meldingen, e-mails en push-notificaties.

Om de meldingen, e-mailberichten en push-notificaties te implementeren, zijn de volgende wijzigingen aangebracht in de code van de indicator:

  1. Nieuwe invoerparameters 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 voor het signaal inschakelen
    input bool PushAan=false; //Push-meldingen naar mobiele apparaten inschakelen
    
  2. Drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Functie voor koop signaal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignaalNaam,      // tekst van de indicatornaam voor e-mail en pushberichten
                   double &KoopPijlen[],        // indicatorbuffer met koop signalen
                   const int TotaalBars,     // het huidige aantal bars
                   const int Vorige_berekend, // het aantal bars op de vorige ticking
                   const double &Sluit[],     // sluitprijs
                   const int &Spread[])       // spread
      {
    //---
       static uint teller=0;
       if(TotaalBars!=Vorige_berekend) teller=0;
    
       bool KoopSignaal=false;
       bool SerieTest=ArrayGetAsSeries(KoopPijlen);
       int index;
       if(SerieTest) index=int(AantalBars);
       else index=TotaalBars-int(AantalBars)-1;
       if(NormalizeDouble(KoopPijlen[index],_Digits) && KoopPijlen[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 Vraag=Sluit[index];
          double Bod=Sluit[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(AantalBars);
          else index=TotaalBars-int(AantalBars)-1;
          Bod+=Spread[index]*_Point;
          string sVraag=DoubleToString(Vraag,_Digits);
          string sBod=DoubleToString(Bod,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(GeluidAan) Alert("KOOP signaal \n Vraag=",Vraag,"\n Bod=",Bod,"\n huidige tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode);
          if(EMailAan) SendMail(SignaalNaam+": KOOP signaal melding","KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
          if(PushAan) SendNotification(SignaalNaam+": KOOP signaal bij Vraag="+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 pushberichten
                    double &VerkoopPijlen[],       // indicatorbuffer met verkoop signalen
                    const int TotaalBars,     // het huidige aantal bars
                    const int Vorige_berekend, // het aantal bars op de vorige ticking
                    const double &Sluit[],     // sluitprijs
                    const int &Spread[])       // spread
      {
    //---
       static uint teller=0;
       if(TotaalBars!=Vorige_berekend) teller=0;
    
       bool VerkoopSignaal=false;
       bool SerieTest=ArrayGetAsSeries(VerkoopPijlen);
       int index;
       if(SerieTest) index=int(AantalBars);
       else index=TotaalBars-int(AantalBars)-1;
       if(NormalizeDouble(VerkoopPijlen[index],_Digits) && VerkoopPijlen[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 Vraag=Sluit[index];
          double Bod=Sluit[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(AantalBars);
          else index=TotaalBars-int(AantalBars)-1;
          Bod+=Spread[index]*_Point;
          string sVraag=DoubleToString(Vraag,_Digits);
          string sBod=DoubleToString(Bod,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(GeluidAan) Alert("VERKOOP signaal \n Vraag=",Vraag,"\n Bod=",Bod,"\n huidige tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode);
          if(EMailAan) SendMail(SignaalNaam+": VERKOOP signaal melding","VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
          if(PushAan) SendNotification(SignaalNaam+": VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Tijdframe als string ophalen                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Een paar aanroepen toegevoegd aan de functies BuySignal() en SellSignal() na de berekeningen van de indicator in de OnCalculate() blok:
    //---     
       BuySignal("Harami_Alert",KoopBuffer,totaal_bars,vorige_berekend,sluit,spread);
       SellSignal("Harami_Alert",VerkoopBuffer,totaal_bars,vorige_berekend,sluit,spread);
    //---     
    

Waar KoopBuffer en VerkoopBuffer de namen zijn van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. Voor de lege waarden in de indicatorbuffers moeten ofwel nullen, of EMPTY_VALUE worden ingesteld.

Het is de bedoeling dat er slechts één aanroep naar de BuySignal() en SellSignal() functies zal worden gebruikt in het OnCalculate() blok van de indicatorcode.

Deze indicator is oorspronkelijk geschreven in MQL4 en voor het eerst gepubliceerd in de Code Base op 14.06.2016.

Fig. 1. Harami_Alert indicator op de grafiek

Fig. 1. Harami_Alert indicator op de grafiek


Fig. 2. Harami_Alert. Genereren van meldingen

Fig. 2. Harami_Alert. Genereren van meldingen

Gerelateerde berichten

Reactie (0)