Home Technische indicator Bericht

BrainTrend1Sig_Alert: De Ultieme Indicator voor MetaTrader 5 met Alerts

Bijlage
16629.zip (4.08 KB, Downloaden 0 keer)

BrainTrend1Sig_Alert is een krachtige semafoor-signaalindicator die je waarschuwt met alerts, e-mails en pushnotificaties.

Om de alerts, e-mailberichten en pushnotificaties te implementeren, zijn er enkele wijzigingen aangebracht in de indicatorcode:

  1. Nieuwe invoerparameters zijn toegevoegd:
    input uint NumberofBar=1;// Bar nummer voor het signaal
    input bool SoundON=true; // Activeer alerts
    input uint NumberofAlerts=2;// Aantal alerts
    input bool EMailON=false; // Activeer e-mailen van het signaal
    input bool PushON=false; // Activeer verzenden van het signaal naar mobiele apparaten
    
  2. Er zijn drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe().
    //+------------------------------------------------------------------+
    //| Buy signaal functie                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // tekst van de indicatornaam voor e-mail en pushberichten
                   double &BuyArrow[],        // indicatorbuffer met koop-signalen
                   const int Rates_total,     // het huidige aantal bars
                   const int Prev_calculated, // het aantal bars bij 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;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) 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 currtime=",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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkoop signaal functie                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // tekst van de indicatornaam voor e-mail en pushberichten
                    double &SellArrow[],       // indicatorbuffer met verkoop-signalen
                    const int Rates_total,     // het huidige aantal bars
                    const int Prev_calculated, // het aantal bars bij 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;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) 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 currtime=",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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Verkrijgen van de tijdsperiode als een string                     |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Er zijn een paar aanroepen van de BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in de OnCalculate() blok:
    //---
    BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend1Sig_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. Lege waarden moeten worden ingesteld in de indicatorbuffers als nullen of EMPTY_VALUE.

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

Fig.1. BrainTrend1Sig_Alert indicator op de grafiek

Fig.1. BrainTrend1Sig_Alert indicator op de grafiek

Fig.2. BrainTrend1Sig_Alert indicator. Alerts genereren

Fig.2. BrainTrend1Sig_Alert indicator. Alerts genereren

Gerelateerde berichten

Reactie (0)