Home Technische indicator Bericht

BrainTrend2SigAlert: De Indicator voor MetaTrader 5 met Waarschuwingen

Bijlage
16695.zip (4.09 KB, Downloaden 0 keer)

BrainTrend2Sig is een handige semaphore signaalindicator die nu ook waarschuwingen, e-mails en push-notificaties ondersteunt.

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

  1. Nieuwe invoerparameters zijn toegevoegd:
    input uint AantalBars=1;//Aantal bars voor het signaal
    input bool GeluidAan=true; //Waarschuwingen inschakelen
    input uint AantalWaarschuwingen=2;//Aantal waarschuwingen
    input bool EmailAan=false; //E-mail waarschuwings inschakelen
    input bool PushAan=false; //Push-notificaties inschakelen
    
  2. Drie nieuwe functies zijn toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Functie voor koop signaal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignaalNaam,      // naam van de indicator voor e-mail en push berichten
                   double &KoopPijl[],        // buffer van de indicator met koop signalen
                   const int TotaleBars,     // het huidige aantal bars
                   const int Vorige_berekening, // het aantal bars op de vorige tick
                   const double &Sluit[],     // sluitprijs
                   const int &Spread[])       // spread
      {
    //---
       static uint teller=0;
       if(TotaleBars!=Vorige_berekening) teller=0;
    
       bool KoopSignaal=false;
       bool SerieTest=ArrayGetAsSeries(KoopPijl);
       int index;
       if(SerieTest) index=int(AantalBars);
       else index=TotaleBars-int(AantalBars)-1;
       if(NormalizeDouble(KoopPijl[index],_Digits) && KoopPijl[index]!=EMPTY_VALUE) 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(Sluit);
          if(SerieTest) index=int(AantalBars);
          else index=TotaleBars-int(AantalBars)-1;
          double Vraag=Sluit[index];
          double Bod=Sluit[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(AantalBars);
          else index=TotaleBars-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 huidig tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode);
          if(EmailAan) SendMail(SignaalNaam+": KOOP signaal waarschuwing","KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
          if(PushAan) SendNotification(SignaalNaam+": KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Functie voor verkoop signaal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignaalNaam,      // naam van de indicator voor e-mail en push berichten
                    double &VerkoopPijl[],       // buffer van de indicator met verkoop signalen
                    const int TotaleBars,     // het huidige aantal bars
                    const int Vorige_berekening, // het aantal bars op de vorige tick
                    const double &Sluit[],     // sluitprijs
                    const int &Spread[])       // spread
      {
    //---
       static uint teller=0;
       if(TotaleBars!=Vorige_berekening) teller=0;
    
       bool VerkoopSignaal=false;
       bool SerieTest=ArrayGetAsSeries(VerkoopPijl);
       int index;
       if(SerieTest) index=int(AantalBars);
       else index=TotaleBars-int(AantalBars)-1;
       if(NormalizeDouble(VerkoopPijl[index],_Digits) && VerkoopPijl[index]!=EMPTY_VALUE) 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(Sluit);
          if(SerieTest) index=int(AantalBars);
          else index=TotaleBars-int(AantalBars)-1;
          double Vraag=Sluit[index];
          double Bod=Sluit[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(AantalBars);
          else index=TotaleBars-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 huidig tijd=",tekst,"\n Symbool=",Symbol()," Periode=",sPeriode);
          if(EmailAan) SendMail(SignaalNaam+": VERKOOP signaal waarschuwing","VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
          if(PushAan) SendNotification(SignaalNaam+": VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Verkrijgen van de tijdsframe als string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES tijdsframe)
      {
    //----
       return(StringSubstr(EnumToString(tijdsframe),7,-1));
    //----
      }
    
  3. Een paar aanroepen van BuySignal() en SellSignal() functies zijn toegevoegd na de berekeningscycli van de indicator in het OnCalculate() blok
    //---
    BuySignal("BrainTrend2SigAlert",KoopBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend2SigAlert",VerkoopBuffer,rates_total,prev_calculated,close,spread);
    //---

Hierbij zijn KoopBuffer en VerkoopBuffer de namen van de indicatorbuffers voor het opslaan van de koop- en verkoop signalen. De indicatorbuffers moeten ofwel nullen of EMPTY_VALUE bevatten als lege waarden.

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

Fig.1. BrainTrend2SigAlert indicator op de grafiek

Fig.1. BrainTrend2SigAlert indicator op de grafiek

Fig.2. BrainTrend2SigAlert indicator. Waarschuwingen genereren

Fig.2. BrainTrend2SigAlert indicator. Waarschuwingen genereren

Gerelateerde berichten

Reactie (0)