BeginnerAlert: De ultieme indicator voor MetaTrader 5

Mike 2017.01.18 18:36 25 0 0
Bijlage

Oorspronkelijke auteur: EarnForex

De BeginnerAlert indicator is een handige tool voor traders die de trendextremen (maxima en minima) in de gaten willen houden. Deze extremen kunnen dienen als steun- en weerstandsniveaus, wat essentieel is voor het bepalen van de huidige trendkanalen. Bovendien biedt de indicator notificaties via e-mail en pushmeldingen op mobiele apparaten, zodat je altijd op de hoogte blijft van belangrijke signalen.

Deze eenvoudige indicator maakt gebruik van een specifieke periode om de minima en maxima te vinden, die vervolgens met stippen worden gemarkeerd op de grafiek.

Om de notificatiefuncties te integreren, zijn er enkele wijzigingen doorgevoerd in de code van de indicator:

  1. Er zijn nieuwe invoerparameters toegevoegd:
    input uint NumberofBar=1;//Aantal staven voor het signaal
    input bool SoundON=true;//Meldingen inschakelen
    input uint NumberofAlerts=2;//Aantal meldingen
    input bool EMailON=false;//E-mail melding inschakelen
    input bool PushON=false;//Pushmelding inschakelen
    
  2. Drie nieuwe functies zijn toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Functie voor koop signaal |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// naam van de indicator voor e-mail en pushmeldingen
          double &BuyArrow[],// buffer voor koop signalen
          const int Rates_total,// huidig aantal staven
          const int Prev_calculated,// aantal staven op de vorige tick
          const double &Close[],// sluitprijs
          const int &Spread[])// spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) 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("KOOP signaal \n Ask=",Ask,"\n Bid=",Bid,"\n huidige tijd=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KOOP signaal melding","KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Functie voor verkoop signaal |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,// naam van de indicator voor e-mail en pushmeldingen
          double &SellArrow[],// buffer voor verkoop signalen
          const int Rates_total,// huidig aantal staven
          const int Prev_calculated,// aantal staven op de vorige tick
          const double &Close[],// sluitprijs
          const int &Spread[])// spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) 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("VERKOOP signaal \n Ask=",Ask,"\n Bid=",Bid,"\n huidige tijd=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKOOP signaal melding","VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Tijdframe als string ophalen |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Er zijn een aantal aanroepen van de BuySignal() en SellSignal() functies toegevoegd na de berekeningen in de OnCalculate() blok:
    //--- 
       BuySignal("BeginnerAlert",BuyBuffer,rates_total,prev_calculated,Close,spread);
       SellSignal("BeginnerAlert",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. De lege waarden in de indicatorbuffers moeten ofwel nullen of EMPTY_VALUE zijn.

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

Fig1. De BeginnerAlert indicator op de grafiek

Fig1. De BeginnerAlert indicator op de grafiek

Fig.2. De BeginnerAlert indicator genereert meldingen.

Fig.2. De BeginnerAlert indicator genereert meldingen.

Lijst
Reactie 0