L'indicateur ColorJFatl_Digit est un outil incontournable pour tous les traders utilisant MetaTrader 5. Avec ses alertes intégrées, il envoie des notifications par email et des push sur vos appareils mobiles, vous permettant de rester informé où que vous soyez.
Voici les modifications apportées au code de l'indicateur pour activer ces fonctionnalités :
- Ajout de nouveaux paramètres d'entrée pour les alertes :
//---- Variables d'entrée pour les alertes input uint NombreDeBar=1; // Nombre de bar pour le signal input bool SonON=true; // Activer les alertes input uint NombreDAlerts=2; // Nombre d'alertes input bool EMailON=false; // Activer l'envoi d'email pour le signal input bool PushON=false; // Activer l'envoi de signal sur mobile
- Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe()
//+------------------------------------------------------------------+ //| Fonction de signal d'achat | //+------------------------------------------------------------------+ void BuySignal(string NomDuSignal,// texte du nom de l'indicateur pour les messages email et push double &TableauCouleur[],// tampon d'index de couleur int IndexCouleur,// index de couleur dans le tampon d'index de couleur pour générer un signal const int TotalDeBars, // le nombre actuel de bars const int Précédent_calculé, // nombre de bars au dernier tick const double &Close[], // prix de clôture const int &Spread[]) // spread { //--- static uint compteur=0; if(TotalDeBars!=Précédent_calculé) compteur=0; bool SignalAchat=false; bool TestSérie=ArrayGetAsSeries(TableauCouleur); int index,index1; if(TestSérie) { index=int(NombreDeBar); index1=index+1; } else { index=TotalDeBars-int(NombreDeBar)-1; index1=index-1; } if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) SignalAchat=true; if(SignalAchat && compteur<=NombreDAlerts) { compteur++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string texte=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TestSérie=ArrayGetAsSeries(Close); if(TestSérie) index=int(NombreDeBar); else index=TotalDeBars-int(NombreDeBar)-1; double Ask=Close[index]; double Bid=Close[index]; TestSérie=ArrayGetAsSeries(Spread); if(TestSérie) index=int(NombreDeBar); else index=TotalDeBars-int(NombreDeBar)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(SonON) Alert("Signal d'ACHAT \n Ask=",Ask,"\n Bid=",Bid,"\n temps courant=",texte,"\n Symbole=",Symbol()," Période=",sPeriode); if(EMailON) SendMail(NomDuSignal+": ALERTE signal d'ACHAT","Signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode); if(PushON) SendNotification(NomDuSignal+": ALERTE signal d'ACHAT à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Fonction de signal de vente | //+------------------------------------------------------------------+ void SellSignal(string NomDuSignal, // texte du nom de l'indicateur pour les messages email et push double &TableauCouleur[], // tampon d'index de couleur int IndexCouleur, // index de couleur dans le tampon d'index de couleur pour générer un signal const int TotalDeBars, // le nombre actuel de bars const int Précédent_calculé, // nombre de bars au dernier tick const double &Close[], // prix de clôture const int &Spread[]) // spread { //--- static uint compteur=0; if(TotalDeBars!=Précédent_calculé) compteur=0; bool SignalVente=false; bool TestSérie=ArrayGetAsSeries(TableauCouleur); int index,index1; if(TestSérie) { index=int(NombreDeBar); index1=index+1; } else { index=TotalDeBars-int(NombreDeBar)-1; index1=index-1; } if(TableauCouleur[index1]!=IndexCouleur && TableauCouleur[index]==IndexCouleur) SignalVente=true; if(SignalVente && compteur<=NombreDAlerts) { compteur++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string texte=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TestSérie=ArrayGetAsSeries(Close); if(TestSérie) index=int(NombreDeBar); else index=TotalDeBars-int(NombreDeBar)-1; double Ask=Close[index]; double Bid=Close[index]; TestSérie=ArrayGetAsSeries(Spread); if(TestSérie) index=int(NombreDeBar); else index=TotalDeBars-int(NombreDeBar)-1; Bid+=Spread[index]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(SonON) Alert("Signal de VENTE \n Ask=",Ask,"\n Bid=",Bid,"\n temps courant=",texte,"\n Symbole=",Symbol()," Période=",sPeriode); if(EMailON) SendMail(NomDuSignal+": ALERTE signal de VENTE","Signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode); if(PushON) SendNotification(NomDuSignal+": ALERTE signal de VENTE à Ask="+sAsk+", Bid="+sBid+", Date="+texte+" Symbole="+Symbol()+" Période="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Obtenir la période sous forme de chaîne | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Ajout de quelques appels aux fonctions BuySignal() et SellSignal() après les cycles de calcul de l'indicateur dans le bloc OnCalculate() :
//--- BuySignal("ColorJFatl_Digit_Alert",TableauCouleurExtLine,2,total_de_bars,précédent_calculé,close,spread); SellSignal("ColorJFatl_Digit_Alert",TableauCouleurExtLine,0,total_de_bars,précédent_calculé,close,spread); //---
Notez que TableauCouleurExtLine est le nom du tampon d'index de couleur pour stocker la couleur de la ligne sous forme d'un index.
Il est prévu que les appels aux fonctions BuySignal() et SellSignal() ne soient utilisés qu'une seule fois dans le bloc OnCalculate() du code de l'indicateur.
L'indicateur utilise les classes de la bibliothèque SmoothAlgorithms.mqh (copiez-la dans <dossier_données_terminal>\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".

Fig1. L'indicateur ColorJFatl_Digit_Alert sur le graphique
Fig.2. L'indicateur ColorJFatl_Digit_Alert générant des alertes.
Articles connexes
- iMAX3 : Détecteur de Tendances Rapides pour Traders
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Améliorez vos graphiques avec ClearView : Indicateurs et modèles pour MetaTrader 5
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5
- Affichez la tendance actuelle sur tous les délais avec un indicateur pour MetaTrader 4
