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:
- 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
- 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));
//----
} - 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.2. Indicatore JBrainTrend1Stop_Alert. Generazione avvisi
Post correlati
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indicatore di Equità e Bilancio per MetaTrader 5: Monitoraggio della Tua Performance di Trading
- Notis: L'Indicatore per Misurare la Volatilità su MetaTrader 5
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5
- Utilità per le Informazioni su Barre e Tassi per MetaTrader 5