Réalisé par :
Paul Stringer
L'indicateur Harami Alert identifie les patterns Harami et propose des alertes, des notifications par email et des notifications push pour vous tenir informé.
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 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 du signal par email input bool PushON=false; // Activer l'envoi du 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 &FlècheAchat[], // tampon de l'indicateur avec les signaux d'achat const int TotalDesBars, // nombre actuel de barres const int Précédent_calculé,// nombre de barres sur le tick précédent const double &Fermeture[], // prix de clôture const int &Spread[]) // spread { //--- static uint compteur=0; if(TotalDesBars!=Précédent_calculé) compteur=0; bool SignalAchat=false; bool TestDeSérie=ArrayGetAsSeries(FlècheAchat); int index; if(TestDeSérie) index=int(NombreDeBar); else index=TotalDesBars-int(NombreDeBar)-1; if(NormalizeDouble(FlècheAchat[index],_Digits) && FlècheAchat[index]!=EMPTY_VALUE) SignalAchat=true; if(SignalAchat && compteur<=NombreDAlerts) { compteur++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string texte=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TestDeSérie=ArrayGetAsSeries(Fermeture); if(TestDeSérie) index=int(NombreDeBar); else index=TotalDesBars-int(NombreDeBar)-1; double Demande=Fermeture[index]; double Offre=Fermeture[index]; TestDeSérie=ArrayGetAsSeries(Spread); if(TestDeSérie) index=int(NombreDeBar); else index=TotalDesBars-int(NombreDeBar)-1; Offre+=Spread[index]*_Point; string sDemande=DoubleToString(Demande,_Digits); string sOffre=DoubleToString(Offre,_Digits); string sPériode=GetStringTimeframe(ChartPeriod()); if(SonON) Alert("Signal ACHAT Demande=",Demande," Offre=",Offre," heure courante=",texte," Symbole=",Symbol()," Période=",sPériode); if(EMailON) SendMail(NomDuSignal+": Alerte signal ACHAT","Signal ACHAT à Demande="+sDemande+", Offre="+sOffre+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode); if(PushON) SendNotification(NomDuSignal+": Signal ACHAT à Demande="+sDemande+", Offre="+sOffre+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode); } //--- } //+------------------------------------------------------------------+ //| Fonction de signal de vente | //+------------------------------------------------------------------+ void SellSignal(string NomDuSignal, // texte du nom de l'indicateur pour les messages email et push double &FlècheVente[], // tampon de l'indicateur avec les signaux de vente const int TotalDesBars, // nombre actuel de barres const int Précédent_calculé, // nombre de barres sur le tick précédent const double &Fermeture[], // prix de clôture const int &Spread[]) // spread { //--- static uint compteur=0; if(TotalDesBars!=Précédent_calculé) compteur=0; bool SignalVente=false; bool TestDeSérie=ArrayGetAsSeries(FlècheVente); int index; if(TestDeSérie) index=int(NombreDeBar); else index=TotalDesBars-int(NombreDeBar)-1; if(NormalizeDouble(FlècheVente[index],_Digits) && FlècheVente[index]!=EMPTY_VALUE) SignalVente=true; if(SignalVente && compteur<=NombreDAlerts) { compteur++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string texte=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TestDeSérie=ArrayGetAsSeries(Fermeture); if(TestDeSérie) index=int(NombreDeBar); else index=TotalDesBars-int(NombreDeBar)-1; double Demande=Fermeture[index]; double Offre=Fermeture[index]; TestDeSérie=ArrayGetAsSeries(Spread); if(TestDeSérie) index=int(NombreDeBar); else index=TotalDesBars-int(NombreDeBar)-1; Offre+=Spread[index]*_Point; string sDemande=DoubleToString(Demande,_Digits); string sOffre=DoubleToString(Offre,_Digits); string sPériode=GetStringTimeframe(ChartPeriod()); if(SonON) Alert("Signal VENTE Demande=",Demande," Offre=",Offre," heure courante=",texte," Symbole=",Symbol()," Période=",sPériode); if(EMailON) SendMail(NomDuSignal+": Alerte signal VENTE","Signal VENTE à Demande="+sDemande+", Offre="+sOffre+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode); if(PushON) SendNotification(NomDuSignal+": Signal VENTE à Demande="+sDemande+", Offre="+sOffre+", Date="+texte+" Symbole="+Symbol()+" Période="+sPériode); } //--- } //+------------------------------------------------------------------+ //| Récupérer 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("Harami_Alert",FlècheAchat,total_des_bars,précédent_calculé,fermeture,spread); SellSignal("Harami_Alert",FlècheVente,total_des_bars,précédent_calculé,fermeture,spread); //---
Où FlècheAchat et FlècheVente sont les noms des tampons de l'indicateur pour stocker les signaux d'achat et de vente. Les valeurs vides dans les tampons de l'indicateur doivent être définies sur zéro ou EMPTY_VALUE.
On suppose qu'un seul appel aux fonctions BuySignal() et SellSignal() sera utilisé dans le bloc OnCalculate() du code de l'indicateur.
À l'origine, cet indicateur a été écrit en MQL4 et a été publié pour la première fois dans la Base de Code le 14.06.2016.

Fig. 1. Indicateur Harami_Alert sur le graphique
Fig. 2. Harami_Alert. Génération d'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 Ultra Spearman Rank Correlation pour MetaTrader 5
