Home Technische indicator Bericht

Ontdek de ColorX2MA_Alert Indicator voor MetaTrader 5

Bijlage
16477.zip (22.84 KB, Downloaden 0 keer)

De ColorX2MA indicator is een handige tool die je waarschuwt met e-mails en push-notificaties op je mobiele apparaten. Dit maakt het makkelijker om op de hoogte te blijven van belangrijke signalen in de markt.

Om de meldingen te implementeren, zijn er een aantal wijzigingen aangebracht in de code van de indicator:

  1. Nieuwe invoerparameters zijn toegevoegd:
    //---- Invoervariabelen voor waarschuwingen 
    input uint AantalBars=1;                    //Bar nummer voor het signaal
    input bool GeluidAan=true;                     //Waarschuwingen inschakelen
    input uint AantalWaarschuwingen=2;                 //Aantal waarschuwingen
    input bool EMailAan=false;                    //E-mail voor het signaal inschakelen
    input bool PushAan=false;                     //Verstuur het signaal naar mobiele apparaten
    
  2. Drie nieuwe functies zijn toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Koop signaal functie                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalNaam,// tekst van de indicatornaam voor email en pushberichten
                   double &KleurArray[],// kleurindex buffer
                   int KleurIndex,// kleurindex in de kleurindex buffer om een signaal te genereren
                   const int TotaalBars,     // het huidige aantal bars
                   const int Vorige_berekening,// het aantal bars op de vorige tick
                   const double &Sluiten[],     // sluitprijs
                   const int &Spread[])       // spread
      {
    //---
       static uint teller=0;
       if(TotaalBars!=Vorige_berekening) teller=0;
    
       bool KoopSignaal=false;
       bool SerieTest=ArrayGetAsSeries(KleurArray);
       int index,index1;
       if(SerieTest)
         {
          index=int(AantalBars);
          index1=index+1;
         }
       else
         {
          index=TotaalBars-int(AantalBars)-1;
          index1=index-1;
         }
       if(KleurArray[index1]!=KleurIndex && KleurArray[index]==KleurIndex) KoopSignaal=true;
       if(KoopSignaal && teller<=AantalWaarschuwingen)
         {
          teller++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SerieTest=ArrayGetAsSeries(Sluiten);
          if(SerieTest) index=int(AantalBars);
          else index=TotaalBars-int(AantalBars)-1;
          double Vraag=Sluiten[index];
          double Bod=Sluiten[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(AantalBars);
          else index=TotaalBars-int(AantalBars)-1;
          Bod+=Spread[index];
          string sVraag=DoubleToString(Vraag,_Digits);
          string sBod=DoubleToString(Bod,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(GeluidAan) Alert("KOOP signaal \n Vraag=",Vraag,"\n Bod=",Bod,"\n huidige tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode);
          if(EMailAan) SendMail(SignalNaam+": KOOP signaal waarschuwing","KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
          if(PushAan) SendNotification(SignalNaam+": KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkopen signaal functie                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalNaam,      // tekst van de indicatornaam voor email en pushberichten
                    double &KleurArray[],       // kleurindex buffer
                    int KleurIndex,             // kleurindex in de kleurindex buffer om een signaal te genereren
                    const int TotaalBars,     // het huidige aantal bars
                    const int Vorige_berekening, // het aantal bars op de vorige tick
                    const double &Sluiten[],     // sluitprijs
                    const int &Spread[])       // spread
      {
    //---
       static uint teller=0;
       if(TotaalBars!=Vorige_berekening) teller=0;
    
       bool VerkoopSignaal=false;
       bool SerieTest=ArrayGetAsSeries(KleurArray);
       int index,index1;
       if(SerieTest)
         {
          index=int(AantalBars);
          index1=index+1;
         }
       else
         {
          index=TotaalBars-int(AantalBars)-1;
          index1=index-1;
         }
       if(KleurArray[index1]!=KleurIndex && KleurArray[index]==KleurIndex) VerkoopSignaal=true;
       if(VerkoopSignaal && teller<=AantalWaarschuwingen)
         {
          teller++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SerieTest=ArrayGetAsSeries(Sluiten);
          if(SerieTest) index=int(AantalBars);
          else index=TotaalBars-int(AantalBars)-1;
          double Vraag=Sluiten[index];
          double Bod=Sluiten[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(AantalBars);
          else index=TotaalBars-int(AantalBars)-1;
          Bod+=Spread[index];
          string sVraag=DoubleToString(Vraag,_Digits);
          string sBod=DoubleToString(Bod,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(GeluidAan) Alert("VERKOOP signaal \n Vraag=",Vraag,"\n Bod=",Bod,"\n huidige tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode);
          if(EMailAan) SendMail(SignalNaam+": VERKOOP signaal waarschuwing","VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
          if(PushAan) SendNotification(SignalNaam+": VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Verkrijg de tijdsperiode als een string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES tijdsperiode)
      {
    //----
       return(StringSubstr(EnumToString(tijdsperiode),7,-1));
    //----
      }
    
  3. Er zijn een paar aanroepen aan de BuySignal() en SellSignal() functies toegevoegd na de berekeningscycli van de indicator in het OnCalculate() blok
    //---     
       BuySignal("X2MA_Alert",KleurX2MA,1,totaal_bars,vorige_berekening,sluiten,spread);
       SellSignal("X2MA_Alert",KleurX2MA,2,totaal_bars,vorige_berekening,sluiten,spread);
    //--- 
    

Hierbij is ColorX2MA de naam van de kleurindex buffer voor het opslaan van de lijnkleur in de vorm van een index.

Het is de bedoeling dat er slechts één aanroep naar de BuySignal() en SellSignal() functies wordt 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 ColorX2MA_Alert indicator op de grafiek

Fig1. De ColorX2MA_Alert indicator op de grafiek

Fig.2. De ColorX2MA_Alert indicator. Waarschuwingen genereren.

Fig.2. De ColorX2MA_Alert indicator. Waarschuwingen genereren.

Gerelateerde berichten

Reactie (0)