Home Indicatore tecnico Post

ColorX2MA_Alert: L'Indicatore con Allerta per MetaTrader 5

Allegato
16477.zip (22.84 KB, Scarica 0 volte)

Hai mai sentito parlare dell'indicatore ColorX2MA? Questo strumento è davvero utile per i trader, poiché include allerta, invio di email e notifiche push direttamente sui dispositivi mobili.

Recentemente, sono stati apportati alcuni aggiornamenti al codice dell'indicatore per migliorare le sue funzionalità di allerta, email e notifiche push:

  1. Introdotti nuovi parametri di input:
    //---- Variabili di input per le allerta 
    input uint NumeroBarre=1;                    //Numero di barre per il segnale
    input bool SuonoON=true;                     //Abilita le allerta
    input uint NumeroAllerta=2;                 //Numero di allerta
    input bool EmailON=false;                    //Abilita l'invio di email per il segnale
    input bool PushON=false;                     //Abilita l'invio del segnale ai dispositivi mobili
    
  2. Aggiunte tre nuove funzioni alla fine del codice dell'indicatore: BuySignal(), SellSignal() e GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Funzione Buy signal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NomeSegnale,// testo del nome dell'indicatore per email e messaggi push
                   double &ColorArray[],// buffer dell'indice colore
                   int IndiceColore,// indice colore nel buffer per generare un segnale
                   const int TotaleBarre,     // numero attuale di barre
                   const int PrecedenteCalcolato, // numero di barre sul tick precedente
                   const double &Close[],     // prezzo di chiusura
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotaleBarre!=PrecedenteCalcolato) counter=0;
    
       bool BuySignal=false;
       bool SerieTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SerieTest)
         {
          index=int(NumeroBarre);
          index1=index+1;
         }
       else
         {
          index=TotaleBarre-int(NumeroBarre)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=IndiceColore && ColorArray[index]==IndiceColore) BuySignal=true;
       if(BuySignal && counter<=NumeroAllerta)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SerieTest=ArrayGetAsSeries(Close);
          if(SerieTest) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SuonoON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EmailON) SendMail(NomeSegnale+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(NomeSegnale+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Funzione Sell signal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomeSegnale,      // testo del nome dell'indicatore per email e messaggi push
                    double &ColorArray[],       // buffer dell'indice colore
                    int IndiceColore,             // indice colore nel buffer per generare un segnale
                    const int TotaleBarre,     // numero attuale di barre
                    const int PrecedenteCalcolato, // numero di barre sul tick precedente
                    const double &Close[],     // prezzo di chiusura
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotaleBarre!=PrecedenteCalcolato) counter=0;
    
       bool SellSignal=false;
       bool SerieTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SerieTest)
         {
          index=int(NumeroBarre);
          index1=index+1;
         }
       else
         {
          index=TotaleBarre-int(NumeroBarre)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=IndiceColore && ColorArray[index]==IndiceColore) SellSignal=true;
       if(SellSignal && counter<=NumeroAllerta)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SerieTest=ArrayGetAsSeries(Close);
          if(SerieTest) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SerieTest=ArrayGetAsSeries(Spread);
          if(SerieTest) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SuonoON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EmailON) SendMail(NomeSegnale+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(NomeSegnale+": 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. Aggiunti alcuni richiami alle funzioni BuySignal() e SellSignal() dopo i cicli di calcolo dell'indicatore nel blocco OnCalculate()
    //---     
       BuySignal("X2MA_Alert",ColorX2MA,1,totale_barre,precedente_calcolato,close,spread);
       SellSignal("X2MA_Alert",ColorX2MA,2,totale_barre,precedente_calcolato,close,spread);
    //--- 
    

    In questo contesto, ColorX2MA rappresenta il nome del buffer dell'indice colore utilizzato per memorizzare il colore della linea sotto forma di indice.

    Si presume che venga utilizzato un solo richiamo alle funzioni BuySignal() e SellSignal() nel blocco OnCalculate() del codice dell'indicatore.

    L'indicatore utilizza le classi della libreria SmoothAlgorithms.mqh (copia la libreria nella cartella \\MQL5\Include). L'uso delle classi è stato descritto in dettaglio nell'articolo "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

    Fig1. Indicatore ColorX2MA_Alert sul grafico

    Fig1. Indicatore ColorX2MA_Alert sul grafico

    Fig.2 Indicatore ColorX2MA_Alert. Generazione di allerta.

    Fig.2 Indicatore ColorX2MA_Alert. Generazione di allerta.

    Post correlati

Commento (0)