Vous cherchez un indicateur qui vous aide à naviguer dans les zones de surachat et de survente sur MetaTrader 5 ? Ne cherchez pas plus loin ! L'iMFISignAlert est un indicateur basé sur l'oscillateur classique de l'indice de flux monétaire. Il vous alerte avec des notifications par e-mail et des push sur vos appareils mobiles.
Pour intégrer ces alertes, plusieurs modifications ont été apportées au code de l'indicateur :
- Introduction de nouveaux paramètres d'entrée :
input uint NumberofBar=1;// Nombre de barres pour le signal input bool SoundON=true; // Activer les alertes input uint NumberofAlerts=2;// Nombre d'alertes input bool EMailON=false; // Activer l'envoi d'e-mails pour le signal input bool PushON=false; // Activer l'envoi de notifications push
- Ajout de trois nouvelles fonctions à la fin du code : BuySignal(), SellSignal() et GetStringTimeframe()
//+------------------------------------------------------------------+ //| Fonction de signal d'achat | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texte du nom de l'indicateur pour les e-mails et notifications double &BuyArrow[], // tampon d'indicateur avec des signaux d'achat const int Rates_total, // le nombre actuel de barres const int Prev_calculated, // le nombre de barres lors du tick précédent 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; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) 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]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("Signal d'ACHAT Ask=",Ask," Bid=",Bid," heure actuelle=",text," Symbole=",Symbol()," Période=",sPeriod); if(EMailON) SendMail(SignalSirname+": Alerte 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 e-mails et notifications double &SellArrow[], // tampon d'indicateur avec des signaux de vente const int Rates_total, // le nombre actuel de barres const int Prev_calculated, // le nombre de barres lors du tick précédent 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; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) 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]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("Signal de VENTE Ask=",Ask," Bid=",Bid," heure actuelle=",text," Symbole=",Symbol()," Période=",sPeriod); if(EMailON) SendMail(SignalSirname+": Alerte 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); } //--- } //+------------------------------------------------------------------+ //| Obtenir la période sous forme de chaîne | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Ajout d'appels aux fonctions BuySignal() et SellSignal() après les cycles de calcul de l'indicateur dans le bloc OnCalculate()
BuySignal("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
Où BuyBuffer et SellBuffer sont les noms des tampons d'indicateur pour stocker les signaux d'achat et de vente. Les valeurs vides dans les tampons d'indicateur doivent être soit des zéros, soit EMPTY_VALUE.
Il est supposé qu'un seul appel aux fonctions BuySignal() et SellSignal() sera utilisé dans le bloc OnCalculate() du code de l'indicateur.

Fig.1. L'indicateur iMFISignAlert sur le graphique

Fig.2. L'indicateur iMFISignAlert. Génération d'alertes.
Articles connexes
- Découvrez l'indicateur Tymen STARC Bands MTF pour MetaTrader 5
- Découvrez le 3ème Génération XMA : L'indicateur essentiel pour MetaTrader 5
- Découvrez l'indicateur 3 en 1 Stochastic pour MetaTrader 5
- Découvrez l'Indicateur Donchian Ultimate pour MT5 : Un Outil Indispensable pour les Traders
- Découvrez le 3XMA_Ichimoku : Un Indicateur Incontournable pour MetaTrader 5