Auteur Réel :
Rafael Jimenez Tocino
Indicateur RJTX_Matches_Smoothed avec alertes, notifications par email et push pour smartphones.
Des modifications ont été apportées au code de l'indicateur pour permettre l'implémentation d'alertes, de messages par email et de notifications push :
- De nouvelles variables d'entrée ont été ajoutées aux paramètres de l'indicateur :
input uint NumberofBar=1; // Numéro de la barre pour activer le signal input bool SoundON=true; // Activer les alertes input uint NumberofAlerts=2; // Nombre d'alertes input bool EMailON=false; // Activer l'envoi d'email pour le signal input bool PushON=false; // Activer l'envoi du signal sur mobile
- Trois nouvelles fonctions ont été ajoutées à la fin de l'indicateur : BuySignal(), SellSignal(), et GetStringTimeframe()
//+------------------------------------------------------------------+ //| Fonction d'alerte d'achat | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texte du nom de l'indicateur pour les messages email et push double &BuyArrow[], // tampon de l'indicateur avec les signaux d'achat const int Rates_total, // nombre actuel de barres const int Prev_calculated, // nombre de barres à la tick précédente const double &Close[], // prix de clôture const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool BuySignal=false; bool SeriesTest=ArrayGetAsSeries(BuyArrow); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!BuyArrow[index1] && BuyArrow[index]) BuySignal=true; if(BuySignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SIGNAL D'ACHAT Ask=",Ask," Bid=",Bid," currtime=",text," Symbole=",Symbol()," Période=",sPeriod); if(EMailON) SendMail(SignalSirname+": Alerte de signal d'achat","Signal d'achat à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod); if(PushON) SendNotification(SignalSirname+": SIGNAL D'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Fonction de signal de vente | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // texte du nom de l'indicateur pour les messages email et push double &SellArrow[], // tampon de l'indicateur avec les signaux de vente const int Rates_total, // nombre actuel de barres const int Prev_calculated, // nombre de bar à la tick précédente const double &Close[], // prix de clôture const int &Spread[]) // spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!SellArrow[index1] && SellArrow[index]) SellSignal=true; if(SellSignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SIGNAL DE VENTE Ask=",Ask," Bid=",Bid," currtime=",text," Symbole=",Symbol()," Période=",sPeriod); if(EMailON) SendMail(SignalSirname+": Alerte de signal de vente","Signal de vente à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod); if(PushON) SendNotification(SignalSirname+": SIGNAL DE VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbole="+Symbol()+" Période="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Récupération de la période sous forme de chaîne | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Quelques appels aux fonctions BuySignal() et SellSignal() ont été ajoutés après les cycles de calcul de l'indicateur dans le bloc OnCalculate()
//--- BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("RJTX_Matches_Smoothed_Alert",SellBuffer,rates_total,prev_calculated,close,spread); //---
Les tampons BuyBuffer et SellBuffer portent les noms des tampons de l'indicateur pour stocker les signaux d'achat et de vente. Des zéros ou EMPTY_VALUE doivent être ajoutés aux tampons de l'indicateur en tant que valeurs vides.
On suppose qu'un seul appel à chacune des fonctions BuySignal() et SellSignal() est utilisé dans le code de l'indicateur dans le bloc OnCalculate().
L'indicateur utilise les classes de la bibliothèque SmoothAlgorithms.mqh (à copier dans le dossier <terminal_data_directory>\MQL5\Include). L'utilisation des classes a été décrite en détail dans l'article Moyennage des séries de prix pour des calculs intermédiaires sans utiliser de tampons supplémentaires.
Cet indicateur a été initialement implémenté en MQL4 et publié dans la Base de Code le 23 décembre 2015.

Fig.1. Indicateur RJTX_Matches_Smoothed_Alert sur le graphique
Fig. 2. Indicateur RJTX_Matches_Smoothed_Alert. Alertes
Articles connexes
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5
- Découvrez le 3XMA_Ichimoku : Un Indicateur Incontournable pour MetaTrader 5
- Découvrez l'Indicateur Donchian Ultimate pour MT5 : Un Outil Indispensable pour les Traders
- Découvrez l'indicateur Ultra Spearman Rank Correlation pour MetaTrader 5
