Home Technische indicator Bericht

RJTX_Matches_Smoothed_Alert: De Nieuwe Indicator voor MetaTrader 5

Bijlage
22712.zip (22.92 KB, Downloaden 0 keer)

Originele auteur:

Rafael Jimenez Tocino

Indicator RJTX_Matches_Smoothed met meldingen, e-mails en pushnotificaties voor smartphones.

Er zijn verschillende wijzigingen aangebracht in de code van de indicator om meldingen, e-mailberichten en pushnotificaties te implementeren:

  1. Nieuwe invoervariabelen zijn toegevoegd aan de inputs van de indicator:
    input uint NumberofBar=1;                 // Bar nummer om het signaal te activeren
    input bool SoundON=true;           // Meldingen inschakelen
    input uint NumberofAlerts=2;       // Aantal meldingen
    input bool EMailON=false;          // E-mail verzending inschakelen
    input bool PushON=false;           // Pushmeldingen naar mobiele apparaten inschakelen
    


  2. Drie nieuwe functies zijn toegevoegd aan het einde van de indicator: 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,     // huidig aantal bars
                   const int Prev_calculated, // aantal bars op de vorige tick
                   const double &Close[],     // slotprijs
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!BuyArrow[index1] && BuyArrow[index]) 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]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("BUY signaal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signaal melding","BUY signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": BUY signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| 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,     // huidig aantal bars
                    const int Prev_calculated, // aantal bars op de vorige tick
                    const double &Close[],     // slotprijs
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index,index1;
       if(SeriesTest)
        {
         index=int(NumberofBar);
         index1=index+1;
        }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(!SellArrow[index1] && SellArrow[index]) 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]*_Point;
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SELL signaal 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signaal melding","SELL signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SELL signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  De tijdsperiode als string verkrijgen                             |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    


  3. Een paar aanroepen naar de functies BuySignal() en SellSignal() zijn toegevoegd na de berekeningen van de indicator in het blok OnCalculate()
    //---     
       BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("RJTX_Matches_Smoothed_Alert",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. Ofwel nullen of EMPTY_VALUE moeten aan de indicatorbuffers worden toegevoegd als lege waarden.

Er wordt aangenomen dat slechts één aanroep naar elke van de functies BuySignal() en SellSignal() wordt gebruikt in de indicatorcode in het blok OnCalculate().

De indicator maakt gebruik van de klassen van de bibliotheek SmoothAlgorithms.mqh (die gekopieerd moet worden naar de <terminal_data_directory>\MQL5\Include map). Het gebruik van de klassen is uitvoerig beschreven in het artikel Averaging Price Series for Intermediate Calculations Without Using Additional Buffers.

Deze indicator werd voor het eerst geïmplementeerd in MQL4 en gepubliceerd in de Code Base op 23 december 2015.


Fig.1. Indicator RJTX_Matches_Smoothed_Alert op de grafiek

Fig.1. RJTX_Matches_Smoothed_Alert indicator op de grafiek


Fig. 2. Indicator RJTX_Matches_Smoothed_Alert. Meldingen

Fig. 2. Indicator RJTX_Matches_Smoothed_Alert. Meldingen

Gerelateerde berichten

Reactie (0)