Home Technische indicator Bericht

PPO_SignAlert: De Indicator voor MetaTrader 5 met Waarschuwingen

Bijlage
16108.zip (22.04 KB, Downloaden 0 keer)

Als je actief handelt met MetaTrader 5, dan is het belangrijk om goede signalen te ontvangen. De PPO_SignAlert is een seintje gebaseerd op de relatieve gesmeerde prijsverandering, en biedt handige meldingen via e-mail en push-notificaties op je mobiele apparaat.

Hieronder vind je de belangrijkste wijzigingen die zijn aangebracht in de code van de indicator om deze waarschuwingen te implementeren:

  1. Nieuwe invoerparameters zijn toegevoegd:
    input uint NumberofBar=1;//Aantal bars voor het signaal
    input bool SoundON=true; //Waarschuwingen inschakelen
    input uint NumberofAlerts=2;//Aantal waarschuwingen
    input bool EMailON=false; //E-mail notificatie inschakelen
    input bool PushON=false; //Push notificatie inschakelen
    
  2. Drie nieuwe functies zijn toegevoegd aan het einde van de code: BuySignal(), SellSignal() en GetStringTimeframe().
    //+------------------------------------------------------------------+
    //| Koop signaal functie                                               |
    //+------------------------------------------------------------------+
    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("KOOP signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KOOP signaal waarschuwing","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);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Verkoop signaal functie                                          |
    //+------------------------------------------------------------------+
    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 currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKOOP signaal waarschuwing","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//---
      }
    //+------------------------------------------------------------------+
    //| Tijdframe ophalen als string                                     |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Er zijn een paar aanroepen toegevoegd aan de functies BuySignal() en SellSignal() na de indicatorberekeningen in de OnCalculate() blok:
    u//---     
       BuySignal("PPO_Sign",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("PPO_Sign",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---   
    

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 nul of EMPTY_VALUE zijn.

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

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 PPO_SignAlert indicator op de grafiek

Fig.1. De PPO_SignAlert indicator op de grafiek

Fig.2. De PPO_SignAlert indicator. Genereren van waarschuwingen.

Fig.2. De PPO_SignAlert indicator. Genereren van waarschuwingen.

Gerelateerde berichten

Reactie (0)