Home Technische indicator Bericht

wlxBW5ZoneAlert: De Beste Indicator voor MetaTrader 5

Bijlage
16121.zip (3.5 KB, Downloaden 0 keer)

Oorspronkelijke auteur:

Wellx

De wlxBW5ZoneAlert is een semaphore signaalindicator die gebruik maakt van de waarden van de Accelerator Oscillator en de Awesome Oscillator, ontwikkeld door Bill Williams. Deze indicator biedt handige meldingen, inclusief e-mail en push-notificaties naar je mobiele apparaten.

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

  1. Nieuwe invoerparameters geïntroduceerd:
    input uint NumberofBar=1;//Aantal bars voor het signaal
    input bool SoundON=true; //Meldingen inschakelen
    input uint NumberofAlerts=2;//Aantal meldingen
    input bool EMailON=false; //E-mail voor het signaal inschakelen
    input bool PushON=false; //Stuur het signaal naar mobiele apparaten
    
  2. Drie nieuwe functies toegevoegd aan de indicatorcode: 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,     // het huidige aantal bars
                   const int Prev_calculated, // het aantal bars op de vorige tick
                   const double &Close[],     // slotprijs
                   const int &Spread[])       // spread
      {
    u//---
       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("KOOPOPTIE signaal \n Ask=",Ask,"\n Bid=",Bid,"\n huidige tijd=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KOOPOPTIE signaal alert","KOOPOPTIE signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KOOPOPTIE signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| 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,     // het huidige aantal bars
                    const int Prev_calculated, // het aantal bars op de vorige tick
                    const double &Close[],     // slotprijs
                    const int &Spread[])       // spread
      {
    u//---
       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 alert","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);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //|  De tijdsperiode als string verkrijgen                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Een paar aanroepen van BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in het OnCalculate() blok
    u//---     
       BuySignal("wlxBW5ZoneAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("wlxBW5ZoneAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---
    

Hierbij zijn BuyBuffer en SellBuffer de namen van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. De lege waarden in de indicatorbuffers moeten ofwel nul of EMPTY_VALUE zijn.

Er wordt aangenomen dat er maar één aanroep naar de BuySignal() en SellSignal() functies in het OnCalculate() blok van de indicatorcode zal worden gebruikt.

De indicator maakt gebruik van de SmoothAlgorithms.mqh bibliotheekklassen (kopieer deze naar <terminal_data_folder>\MQL5\Include). Het gebruik van de klassen is uitvoerig beschreven in het artikel "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

Oorspronkelijk is deze indicator geschreven in MQL4 en voor het eerst gepubliceerd in de Code Base op 08.03.2008.

Fig.1. De wlxBW5ZoneAlert indicator op de grafiek

Fig.1. De wlxBW5ZoneAlert indicator op de grafiek

Fig.2. De wlxBW5ZoneAlert indicator. Het genereren van meldingen.

Fig.2. De wlxBW5ZoneAlert indicator. Het genereren van meldingen.

Gerelateerde berichten

Reactie (0)