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:
- 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
- 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)); //---- }
- 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
Fig.2 Indicatore ColorX2MA_Alert. Generazione di allerta.
Post correlati
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- ColorXdinMA_Alert: Il Nuovo Indicatore per MetaTrader 5 con Notifiche
- Utilità per le Informazioni su Barre e Tassi per MetaTrader 5
