Home Technische indicator Bericht

ColorXdinMA_Alert: Een krachtige indicator voor MetaTrader 5

Bijlage
17111.zip (22.91 KB, Downloaden 0 keer)

Originele Auteur: dimeon

De ColorXdinMA is een trend moving average indicator met meldingen die e-mails en push-notificaties naar je mobiele apparaten verstuurt.

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

  1. Een enumeratie voor de opties van signalen is gedefinieerd op globaal niveau voordat de invoervariabelen worden geïntroduceerd.
    //+----------------------------------------------------+
    //| Enumeratie voor signalen generatie opties   |
    //+----------------------------------------------------+
    enum ENUM_SIGNAL_MODE
      {
       MODE_SIGNAL,  // Doorbraak signalen
       MODE_TREND    // Doorbraak en trend signalen
      };
  2. Nieuwe invoerparameters zijn toegevoegd
    //---- Invoer variabelen voor meldingen
    input ENUM_SIGNAL_MODE SignMode=MODE_SIGNAL; // Modus voor signalen generatie
    input uint NumberofBar=1;                    // Aantal bars om een signaal te genereren
    input bool SoundON=true;                     // Meldingen inschakelen
    input uint NumberofAlerts=2;                 // Aantal meldingen
    input bool EMailON=false;                    // E-mailen van het signaal inschakelen
    input bool PushON=false;                     // Verzenden van het signaal naar mobiele apparaten inschakelen
  3. Drie nieuwe functies zijn aan het einde van de indicatorcode toegevoegd: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Functie voor koop signaal                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// tekst van de indicatornaam voor e-mail en push-berichten
                   double &ColorArray[],// kleur index buffer
                   int ColorIndex,// kleur index in de kleur index buffer om een signaal te genereren
                   const int Rates_total,     // het huidige aantal bars
                   const int Prev_calculated, // het aantal bars 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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(SignMode==MODE_SIGNAL)
         {
          if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) BuySignal=true;
         }
       else
         {
          if(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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
            {
             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 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);
            }
          else
            {
             if(SoundON) Alert("Opwaarts Trend signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": Opwaarts Trend signaal melding","KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": Opwaarts Trend 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 push-berichten
                    double &ColorArray[],       // kleur index buffer
                    int ColorIndex,             // kleur index in de kleur index buffer om een signaal te genereren
                    const int Rates_total,     // het huidige aantal bars
                   const int Prev_calculated, // het aantal bars 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(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }

       if(SignMode==MODE_SIGNAL)
         {
          if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) SellSignal=true;
         }
       else
         {
          if(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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
            {
             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 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);
            }
          else
            {
             if(SoundON) Alert("Neerwaarts trend signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": Neerwaarts trend signaal melding","VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": Neerwaarts trend signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
            }
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkrijgen van de tijdseenheid als een string |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  4. Enkele aanroepen naar de functies BuySignal() en SellSignal() zijn toegevoegd na de indicatorberekeningen in het OnCalculate() blok
    //---    
       BuySignal("ColorXdinMA_Alert",ColorXdinMA,1,rates_total,prev_calculated,close,spread);
       SellSignal("ColorXdinMA_Alert",ColorXdinMA,2,rates_total,prev_calculated,close,spread);
    //--- 

Hierbij is ColorXdinMA de naam van de kleur index buffer voor het opslaan van indicator kleuren. Waarden 1 en 2 zijn de nummers van kleuren in deze buffer, waarbij het voortschrijdend gemiddelde respectievelijk stijgt of daalt.

Er wordt aangenomen dat er slechts één oproep naar de functies BuySignal() en SellSignal() 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 "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

Fig1. De ColorXdinMA_Alert indicator op de grafiek

Fig1. De ColorXdinMA_Alert indicator op de grafiek

Fig.2. De ColorXdinMA_Alert indicator. Genereren van melding voor doorbraak signaal

Fig.2. De ColorXdinMA_Alert indicator. Genereren van melding voor doorbraak signaal

Fig.3. De ColorXdinMA_Alert indicator. Genereren van melding voor trend signaal

Fig.3. De ColorXdinMA_Alert indicator. Genereren van melding voor trend signaal

Gerelateerde berichten

Reactie (0)