JBrainTrend1Stop_Alert: De Trendindicator voor MetaTrader 5 met Waarschuwingen

Mike 2017.01.20 02:09 32 0 0
Bijlage

JBrainTrend1Stop is een krachtige trendindicator die je voorziet van waarschuwingen, e-mails en push-notificaties.

In de nieuwste update van de indicator zijn enkele wijzigingen aangebracht in de code om de waarschuwingen, e-mailberichten en push-notificaties te implementeren:

  1. Nieuwe invoerparameters toegevoegd:
    input uint NumberofBar=1;//Aantal bars voor het signaal
    input bool SoundON=true; //Waarschuwingen inschakelen
    input uint NumberofAlerts=2;//Aantal waarschuwingen
    input bool EMailON=false; //E-mail voor signalen inschakelen
    input bool PushON=false; //Push-notificaties inschakelen
    
  2. Drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Functie voor koop signaal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Tekst van de indicatornaam voor e-mail en pushberichten
                   double &BuyArrow[],        // Indicatorbuffer met signalen voor een opwaartse trend
                   double &SellArrow[],       // Indicatorbuffer met signalen voor een neerwaartse trend
                   const int Rates_total,     // Huidig aantal bars
                   const int Prev_calculated, // 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(BuyArrow);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(SellArrow[index1] && SellArrow[index1]!=EMPTY_VALUE && BuyArrow[index] && 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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          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 waarschuwing","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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Functie voor verkoop signaal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Tekst van de indicatornaam voor e-mail en pushberichten
                    double &SellArrow[],       // Indicatorbuffer met signalen voor een neerwaartse trend
                    double &BuyArrow[],        // Indicatorbuffer met signalen voor een opwaartse trend
                    const int Rates_total,     // Huidig aantal bars
                    const int Prev_calculated, // 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(SellArrow);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(BuyArrow[index1] && BuyArrow[index1]!=EMPTY_VALUE && SellArrow[index] && 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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          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 waarschuwing","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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  De tijdseenheid als string krijgen                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Een paar aanroepen van de BuySignal() en SellSignal() functies toegevoegd na de indicatorberekeningen in het OnCalculate() blok:
    //---    
       BuySignal("JBrainTrend1Stop_Alert",BuyStopBuffer,SellStopBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("JBrainTrend1Stop_Alert",SellStopBuffer,BuyStopBuffer,rates_total,prev_calculated,close,spread);
    //---  

Hierbij zijn BuyStopBuffer en SellStopBuffer de namen van de indicatorbuffers voor het opslaan van opwaartse en neerwaartse trendsignalen (stoplijnen voor longs en shorts). Een waarde van nul of EMPTY_VALUE moet aanwezig zijn in de indicatorbuffers als er geen geschikte trend is.

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

Plaats het gecompileerde bestand van de indicator JMA.mq5 in de map MQL5\Indicators.


Fig.1. JBrainTrend1Stop_Alert indicator op de grafiek

Fig.1. JBrainTrend1Stop_Alert indicator op de grafiek

Fig.2. JBrainTrend1Stop_Alert indicator. Waarschuwingen genereren

Fig.2. JBrainTrend1Stop_Alert indicator. Waarschuwingen genereren

Lijst
Reactie 0