Watch how to download trading robots for free
Find us on Twitter!
Join our fan page
Interesting script?
So post a link to it -
let others appraise it
You liked the script? Try it in the MetaTrader 5 terminal
Indicators

BrainTrend1Sig_Alert - indicator for MetaTrader 5

Views:
6087
Rating:
(18)
Published:
2017.01.19 16:40
MQL5 Freelance Need a robot or indicator based on this code? Order it on Freelance Go to Freelance

BrainTrend1Sig_Alert semaphore signal indicator features alerts, emails and push notifications.

The following changes have been made to the indicator code in order to implement the alerts, email messages and push notifications:

  1. Introduced new input parameters
    input uint NumberofBar=1;//Bar number for the signal
    input bool SoundON=true; //Enable alerts
    input uint NumberofAlerts=2;//Number of alerts
    input bool EMailON=false; //Enable mailing the signal
    input bool PushON=false; //Enable sending the signal to mobile devices
    
  2. Added three new functions to the end of the indicator code: BuySignal(), SellSignal() and GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Buy signal function                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // text of the indicator name for email and push messages
                   double &BuyArrow[],        // indicator buffer with buy signals
                   const int Rates_total,     // the current number of bars
                   const int Prev_calculated, // the number of bars on the previous tick
                   const double &Close[],     // close price
                   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 signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Sell signal function                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // text of the indicator name for email and push messages
                    double &SellArrow[],       // indicator buffer with sell signals
                    const int Rates_total,     // the current number of bars
                    const int Prev_calculated, // the number of bars on the previous tick
                    const double &Close[],     // close price
                    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 signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Getting the timeframe as a string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Added a couple of calls to BuySignal() and SellSignal() functions after the indicator calculation cycles in the OnCalculate() block
    //---
    BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend1Sig_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

Where BuyBuffer and SellBuffer are the names of the indicator buffers for storing the buy and sell signals. Either zeros or EMPTY_VALUE should be set in the indicator buffers as the empty values.

It is assumed that the only one call to the BuySignal() and SellSignal() functions will be used in the OnCalculate() block of the indicator code.

Fig.1. BrainTrend1Sig_Alert indicator on the chart

Fig.1. BrainTrend1Sig_Alert indicator on the chart

Fig.2. BrainTrend1Sig_Alert indicator. Generating alerts

Fig.2. BrainTrend1Sig_Alert indicator. Generating alerts

Translated from Russian by MetaQuotes Ltd.
Original code: https://www.mql5.com/ru/code/16629

XMACandles XMACandles

XMA indicator in the form of candles.

MACDCandleTrend MACDCandleTrend

This is a semaphore signal indicator using the colors of the MACDCandle indicator candles as trading signals.

ZigZag_NK_Color_Price ZigZag_NK_Color_Price

ZigZag indicator with price labels of the ZigZag peak values.

Zigzag2_R_Arrows Zigzag2_R_Arrows

Zigzag2_R with its values displayed as fractal labels.