Home Indicatore tecnico Post

BeginnerAlert: L’Indicatore di Trend per MetaTrader 5

Allegato
16448.zip (3.75 KB, Scarica 0 volte)

Autore reale:

EarnForex

Il BeginnerAlert è un indicatore utile per visualizzare gli estremi di trend (massimi e minimi), che possono essere utilizzati come punti di supporto e resistenza. È particolarmente vantaggioso per determinare il canale del trend attuale. Tra le sue caratteristiche, troviamo la possibilità di impostare avvisi che inviano email e notifiche push sui dispositivi mobili.

Si tratta di un indicatore semplice che utilizza un periodo specifico per identificare i massimi e i minimi, segnalandoli con dei punti.

Per implementare gli avvisi, i messaggi email e le notifiche push, sono state apportate le seguenti modifiche al codice dell’indicatore:

  1. Introduzione di nuovi parametri di input:
    input uint NumberofBar=1;//Numero di barre per il segnale
    input bool SoundON=true; //Abilita avvisi
    input uint NumberofAlerts=2;//Numero di avvisi
    input bool EMailON=false; //Abilita invio email del segnale
    input bool PushON=false; //Abilita invio segnale ai dispositivi mobili
    
  2. Aggiunta di tre nuove funzioni alla fine del codice dell’indicatore: BuySignal(), SellSignal() e GetStringTimeframe():
    //+------------------------------------------------------------------+
    //| Funzione di segnale di acquisto                                      |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// nome del segnale per email e notifiche push
          double &BuyArrow[],// buffer dell’indicatore con segnali di acquisto
          const int Rates_total,// numero attuale di barre
          const int Prev_calculated,// numero di barre sul tick precedente
          const double &Close[],// prezzo di chiusura
          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);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Funzione di segnale di vendita                                    |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,// nome del segnale per email e notifiche push
          double &SellArrow[],// buffer dell’indicatore con segnali di vendita
          const int Rates_total,// numero attuale di barre
          const int Prev_calculated,// numero di barre sul tick precedente
          const double &Close[],// prezzo di chiusura
          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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Ottenere il timeframe come stringa                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Aggiunta di alcune chiamate alle funzioni BuySignal() e SellSignal() dopo i cicli di calcolo dell’indicatore nel blocco OnCalculate():
    //---     
       BuySignal("BeginnerAlert",BuyBuffer,rates_total,prev_calculated,Close,spread);
       SellSignal("BeginnerAlert",SellBuffer,rates_total,prev_calculated,Close,spread);
    //--- 
    

    In questo caso, BuyBuffer e SellBuffer sono i nomi dei buffer dell’indicatore utilizzati per memorizzare i segnali di acquisto e vendita. È fondamentale impostare i valori vuoti nei buffer dell’indicatore come zeri o EMPTY_VALUE.

    Si presume che venga utilizzata una sola chiamata alle funzioni BuySignal() e SellSignal() nel blocco OnCalculate() del codice dell’indicatore.

    In origine, questo indicatore è stato scritto in MQL4 ed è stato pubblicato per la prima volta nella Code Base il 03.09.2008.

    Fig1. L'indicatore BeginnerAlert sul grafico

    Fig1. L'indicatore BeginnerAlert sul grafico

    Fig.2. L'indicatore BeginnerAlert Genera avvisi.

    Fig.2. L'indicatore BeginnerAlert Genera avvisi.

    Post correlati

Commento (0)