ColorJFatl_Digit_Alert: De Indicator voor MetaTrader 5 met Meldingen

Mike 2017.01.18 18:32 13 0 0
Bijlage

De ColorJFatl_Digit indicator is een must-have voor traders die meldingen willen ontvangen. Deze indicator kan e-mails verzenden en push-notificaties naar je mobiele apparaten sturen.

Om de meldingen te implementeren zijn er verschillende aanpassingen in de indicatorcode gedaan:

  1. Er zijn nieuwe invoerparameters toegevoegd:
    //---- Invoervariabelen voor meldingen 
    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 meldingen inschakelen
    input bool PushON=false;                     //Push meldingen naar mobiele apparaten inschakelen
    
  2. Drie nieuwe functies zijn 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 &ColorArray[],// kleurindexbuffer
                   int ColorIndex,// kleurindex in de kleurindexbuffer voor het genereren van een signaal
                   const int Rates_total,     // het actuele aantal bars
                   const int Prev_calculated, // het 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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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("BUY signaal \n Ask=",Ask,"\n Bid=",Bid,"\n huidige tijd=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signaal alert","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 &ColorArray[],       // kleurindexbuffer
                    int ColorIndex,             // kleurindex in de kleurindexbuffer voor het genereren van een signaal
                    const int Rates_total,     // het actuele aantal bars
                    const int Prev_calculated, // het 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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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("SELL signaal \n Ask=",Ask,"\n Bid=",Bid,"\n huidige tijd=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signaal alert","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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Verkrijg de tijdseenheid als een string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Er zijn enkele aanroepen naar de BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in het OnCalculate() blok
    //---     
       BuySignal("ColorJFatl_Digit_Alert",ColorExtLineBuffer,2,rates_total,prev_calculated,close,spread);
       SellSignal("ColorJFatl_Digit_Alert",ColorExtLineBuffer,0,rates_total,prev_calculated,close,spread);
    //--- 
    

ColorExtLineBuffer is de naam van de kleurindexbuffer voor het opslaan van de lijnkleur in de vorm van een index.

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

De indicator maakt gebruik van de klassen van de SmoothAlgorithms.mqh bibliotheek (kopieer deze naar <terminal_data_folder>\MQL5\Include). Het gebruik van de klassen is uitvoerig beschreven in het artikel "Gemiddelde Prijsseries voor Tussentijdse Berekeningen Zonder Extra Buffers Te Gebruiken".

Fig1. De ColorJFatl_Digit_Alert indicator op de grafiek

Fig1. De ColorJFatl_Digit_Alert indicator op de grafiek

Fig.2. De ColorJFatl_Digit_Alert indicator genereert meldingen.

Fig.2. De ColorJFatl_Digit_Alert indicator genereert meldingen.

Lijst
Reactie 0