Home Indicatore tecnico Post

JBrainTrend1Stop_Alert: Il Nuovo Indicatore per MetaTrader 5 con Segnali e Notifiche

Allegato
16895.zip (11.35 KB, Scarica 0 volte)

JBrainTrend1Stop è un indicatore di tendenza che ora include avvisi, email e notifiche push per tenerti sempre aggiornato sulle opportunità di trading.

Di seguito sono riportate le modifiche apportate al codice dell'indicatore per implementare avvisi, messaggi email e notifiche push:

  1. Introduzione di nuovi parametri di input:
    input uint NumeroBarre=1;//Numero di barre per il segnale
    input bool SuonoAttivo=true;//Abilita avvisi
    input uint NumeroAvvisi=2;//Numero di avvisi
    input bool EmailAttiva=false;//Abilita l'invio dell'email per il segnale
    input bool NotificaPushAttiva=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 per il segnale di acquisto                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NomeSegnale,      // testo del nome dell'indicatore per email e messaggi push
                   double &FrecciaAcquisto[],        // buffer dell'indicatore con segnali per una tendenza al rialzo
                   double &FrecciaVendita[],       // buffer dell'indicatore con segnali per una tendenza al ribasso
                   const int TotaleBarre,     // numero attuale di barre
                   const int PrecedentementeCalcolato, // numero di barre al tick precedente
                   const double &Chiusura[],     // prezzo di chiusura
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotaleBarre!=PrecedentementeCalcolato) counter=0;

       bool SegnaleAcquisto=false;
       bool TestSerie=ArrayGetAsSeries(FrecciaAcquisto);
       int index,index1;
       if(TestSerie)
         {
          index=int(NumeroBarre);
          index1=index+1;
         }
       else
         {
          index=TotaleBarre-int(NumeroBarre)-1;
          index1=index-1;
         }
       if(FrecciaVendita[index1] && FrecciaVendita[index1]!=EMPTY_VALUE && FrecciaAcquisto[index] && FrecciaAcquisto[index]!=EMPTY_VALUE) SegnaleAcquisto=true;
       if(SegnaleAcquisto && counter<=NumeroAvvisi)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string testo=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          TestSerie=ArrayGetAsSeries(Chiusura);
          if(TestSerie) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          double Ask=Chiusura[index];
          double Bid=Chiusura[index];
          TestSerie=ArrayGetAsSeries(Spread);
          if(TestSerie) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          Bid+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SuonoAttivo) Alert("Segnale di ACQUISTO \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",testo,"\n Simbolo=",Symbol()," Period=",sPeriodo);
          if(EmailAttiva) SendMail(NomeSegnale+": avviso segnale ACQUISTO","Segnale di ACQUISTO a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Simbolo="+Symbol()+" Period="+sPeriodo);
          if(NotificaPushAttiva) SendNotification(NomeSegnale+": Segnale di ACQUISTO a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Simbolo="+Symbol()+" Period="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| Funzione per il segnale di vendita                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomeSegnale,      // testo del nome dell'indicatore per email e messaggi push
                    double &FrecciaVendita[],       // buffer dell'indicatore con segnali per una tendenza al ribasso
                    double &FrecciaAcquisto[],        // buffer dell'indicatore con segnali per una tendenza al rialzo
                    const int TotaleBarre,     // numero attuale di barre
                    const int PrecedentementeCalcolato, // numero di barre al tick precedente
                    const double &Chiusura[],     // prezzo di chiusura
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(TotaleBarre!=PrecedentementeCalcolato) counter=0;

       bool SegnaleVendita=false;
       bool TestSerie=ArrayGetAsSeries(FrecciaVendita);
       int index,index1;
       if(TestSerie)
         {
          index=int(NumeroBarre);
          index1=index+1;
         }
       else
         {
          index=TotaleBarre-int(NumeroBarre)-1;
          index1=index-1;
         }
       if(FrecciaAcquisto[index1] && FrecciaAcquisto[index1]!=EMPTY_VALUE && FrecciaVendita[index] && FrecciaVendita[index]!=EMPTY_VALUE) SegnaleVendita=true;
       if(SegnaleVendita && counter<=NumeroAvvisi)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string testo=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          TestSerie=ArrayGetAsSeries(Chiusura);
          if(TestSerie) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          double Ask=Chiusura[index];
          double Bid=Chiusura[index];
          TestSerie=ArrayGetAsSeries(Spread);
          if(TestSerie) index=int(NumeroBarre);
          else index=TotaleBarre-int(NumeroBarre)-1;
          Bid+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriodo=GetStringTimeframe(ChartPeriod());
          if(SuonoAttivo) Alert("Segnale di VENDITA \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",testo,"\n Simbolo=",Symbol()," Period=",sPeriodo);
          if(EmailAttiva) SendMail(NomeSegnale+": avviso segnale VENDITA","Segnale di VENDITA a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Simbolo="+Symbol()+" Period="+sPeriodo);
          if(NotificaPushAttiva) SendNotification(NomeSegnale+": Segnale di VENDITA a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Simbolo="+Symbol()+" Period="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Ottenere il timeframe come stringa                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Aggiunte alcune chiamate alle funzioni BuySignal() e SellSignal() dopo i cicli di calcolo dell'indicatore nel blocco OnCalculate():
    //---    
       BuySignal("JBrainTrend1Stop_Alert",FrecciaStopAcquisto,FrecciaStopVendita,totale_barre,precedentemente_calcolato,chuisura,spread);
       SellSignal("JBrainTrend1Stop_Alert",FrecciaStopVendita,FrecciaStopAcquisto,totale_barre,precedentemente_calcolato,chuisura,spread);
    //---  

Le variabili FrecciaStopAcquisto e FrecciaStopVendita sono i nomi dei buffer dell'indicatore per memorizzare i segnali di tendenza al rialzo e al ribasso (linee di stop per long e short). Un valore zero o EMPTY_VALUE dovrebbe essere presente nei buffer dell'indicatore se non c'è una tendenza appropriata.

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

Posiziona il file compilato JMA.mq5 nella cartella MQL5\Indicators.


Fig.1. Indicatore JBrainTrend1Stop_Alert sul grafico

Fig.1. Indicatore JBrainTrend1Stop_Alert sul grafico

Fig.2. Indicatore JBrainTrend1Stop_Alert. Generazione avvisi

Fig.2. Indicatore JBrainTrend1Stop_Alert. Generazione avvisi

Post correlati

Commento (0)