Autore reale:
Ramdass - Solo conversione
Il BykovTrend è un indicatore a semaforo che offre avvisi, inviando email e notifiche push ai dispositivi mobili.
Di seguito, vediamo le modifiche apportate al codice dell'indicatore per implementare avvisi, messaggi email e notifiche push:
- Introduzione di nuovi parametri di input:
input uint NumeroBar=1;// Numero di barre per il segnale input bool SuonoON=true; // Abilita avvisi input uint NumeroAvvisi=2;// Numero di avvisi input bool EmailON=false; // Abilita invio email del segnale input bool PushON=false; // Abilita invio del segnale a dispositivi mobili
- Aggiunte tre nuove funzioni alla fine del codice dell'indicatore: BuySignal(), SellSignal() e GetStringTimeframe():
//+------------------------------------------------------------------+ //| Funzione segnale di acquisto | //+------------------------------------------------------------------+ void BuySignal(string NomeSegnale, // testo del nome dell'indicatore per email e messaggi push double &FrecciaAcquisto[], // buffer dell'indicatore con segnali di acquisto const int TotaleBarre, // numero attuale di barre const int Prev_calcolato, // numero di barre al tick precedente const double &Chiusura[], // prezzo di chiusura const int &Spread[]) // spread { //--- static uint contatore=0; if(TotaleBarre!=Prev_calcolato) contatore=0; bool SegnaleAcquisto=false; bool TestSerie=ArrayGetAsSeries(FrecciaAcquisto); int indice; if(TestSerie) indice=int(NumeroBar); else indice=TotaleBarre-int(NumeroBar)-1; if(NormalizeDouble(FrecciaAcquisto[indice],_Digits) && FrecciaAcquisto[indice]!=EMPTY_VALUE) SegnaleAcquisto=true; if(SegnaleAcquisto && contatore<=NumeroAvvisi) { contatore++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string testo=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TestSerie=ArrayGetAsSeries(Chiusura); if(TestSerie) indice=int(NumeroBar); else indice=TotaleBarre-int(NumeroBar)-1; double Ask=Chiusura[indice]; double Bid=Chiusura[indice]; TestSerie=ArrayGetAsSeries(Spread); if(TestSerie) indice=int(NumeroBar); else indice=TotaleBarre-int(NumeroBar)-1; Bid+=Spread[indice]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriodo=GetStringTimeframe(ChartPeriod()); if(SuonoON) Alert("segnale BUY \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",testo,"\n Symbol=",Symbol()," Period=",sPeriodo); if(EmailON) SendMail(NomeSegnale+": avviso segnale BUY","segnale BUY a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Symbol="+Symbol()+" Period="+sPeriodo); if(PushON) SendNotification(NomeSegnale+": segnale BUY a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Symbol="+Symbol()+" Period="+sPeriodo); } //--- } //+------------------------------------------------------------------+ //| Funzione segnale di vendita | //+------------------------------------------------------------------+ void SellSignal(string NomeSegnale, // testo del nome dell'indicatore per email e messaggi push double &FrecciaVendita[], // buffer dell'indicatore con segnali di vendita const int TotaleBarre, // numero attuale di barre const int Prev_calcolato, // numero di barre al tick precedente const double &Chiusura[], // prezzo di chiusura const int &Spread[]) // spread { //--- static uint contatore=0; if(TotaleBarre!=Prev_calcolato) contatore=0; bool SegnaleVendita=false; bool TestSerie=ArrayGetAsSeries(FrecciaVendita); int indice; if(TestSerie) indice=int(NumeroBar); else indice=TotaleBarre-int(NumeroBar)-1; if(NormalizeDouble(FrecciaVendita[indice],_Digits) && FrecciaVendita[indice]!=EMPTY_VALUE) SegnaleVendita=true; if(SegnaleVendita && contatore<=NumeroAvvisi) { contatore++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string testo=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TestSerie=ArrayGetAsSeries(Chiusura); if(TestSerie) indice=int(NumeroBar); else indice=TotaleBarre-int(NumeroBar)-1; double Ask=Chiusura[indice]; double Bid=Chiusura[indice]; TestSerie=ArrayGetAsSeries(Spread); if(TestSerie) indice=int(NumeroBar); else indice=TotaleBarre-int(NumeroBar)-1; Bid+=Spread[indice]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriodo=GetStringTimeframe(ChartPeriod()); if(SuonoON) Alert("segnale SELL \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",testo,"\n Symbol=",Symbol()," Period=",sPeriodo); if(EmailON) SendMail(NomeSegnale+": avviso segnale SELL","segnale SELL a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Symbol="+Symbol()+" Period="+sPeriodo); if(PushON) SendNotification(NomeSegnale+": segnale SELL a Ask="+sAsk+", Bid="+sBid+", Data="+testo+" Symbol="+Symbol()+" Period="+sPeriodo); } //--- } //+------------------------------------------------------------------+ //| Ottenere il timeframe come stringa | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Aggiunti un paio di chiamate a BuySignal() e SellSignal() dopo i cicli di calcolo dell'indicatore nel blocco OnCalculate():
//--- BuySignal("BykovTrendAlert",FrecciaAcquisto,rates_total,prev_calculated,close,spread); SellSignal("BykovTrendAlert",FrecciaVendita,rates_total,prev_calculated,close,spread); //---
Le variabili FrecciaAcquisto e FrecciaVendita sono i nomi dei buffer dell'indicatore per memorizzare i segnali di acquisto e vendita. I valori vuoti nei buffer dell'indicatore devono essere impostati su zero o su EMPTY_VALUE.
Si presume che ci sarà una sola chiamata alle funzioni BuySignal() e SellSignal() nel blocco OnCalculate() del codice dell'indicatore.
Questo indicatore è stato implementato per la prima volta in MQL4 ed è stato pubblicato nel Code Base il 28.09.2007.

Fig1. L'indicatore BykovTrendAlert sul grafico
Fig.2. L'indicatore BykovTrendAlert genera avvisi.
Post correlati
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indice di Vigorità Relativa (RVI): Guida all'Utilizzo su MetaTrader 5
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5
- Indicatore di Equità e Bilancio per MetaTrader 5: Monitoraggio della Tua Performance di Trading
