Vous cherchez un moyen efficace d'optimiser vos signaux de trading ? L'indicateur iWPRSignAlert est basé sur l'oscillateur classique Williams’ Percent Range, qui détecte les zones de surachat et de survente. Il inclut également des alertes, envoi d'emails et notifications push sur les appareils mobiles, idéal pour rester à jour même en déplacement !
Voici les modifications apportées au code de l'indicateur pour intégrer les alertes, les messages email et les notifications push :
- Ajout 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'email pour le signal input bool PushON=false; // Activer l'envoi du signal sur appareils mobiles
- Ajout de trois nouvelles fonctions à la fin du code de l'indicateur : BuySignal(), SellSignal() et GetStringTimeframe().
//+------------------------------------------------------------------+ //| Fonction d'achat signal | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texte du nom de l'indicateur pour les messages email et push double &BuyArrow[], // buffer de l'indicateur avec les signaux d'achat const int Rates_total, // le nombre actuel de barres const int Prev_calculated, // le nombre de barres sur le 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("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } }
- 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 buffers de l'indicateur pour stocker les signaux d'achat et de vente. Il est important de s'assurer que les valeurs vides dans les buffers de l'indicateur soient soit des zéros, soit EMPTY_VALUE.
On suppose que chaque appel à BuySignal() et SellSignal() sera utilisé une seule fois dans le bloc OnCalculate() du code de l'indicateur.

Fig.1. L'indicateur iWPRSignAlert sur le graphique

Fig.2. L'indicateur iWPRSignAlert générant des 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 l'Indicateur Donchian Ultimate pour MT5 : Un Outil Indispensable pour les Traders
- Découvrez le 3XMA_Ichimoku : Un Indicateur Incontournable pour MetaTrader 5
- Découvrez l'indicateur UltraWPR_HTF_Signal_BG pour MetaTrader 5