Lorsque le niveau trigLv défini dans les paramètres est franchi dans la déviation, l'indicateur envoie une notification push sur votre appareil mobile si le paramètre d'entrée notification est activé. De plus, il déclenche une alerte si le paramètre d'entrée alert est activé. Le niveau de déclenchement trigLv, ainsi que les limites de déviation, sont mis en évidence par des lignes horizontales, dont le style, la couleur et l'épaisseur peuvent également être configurés dans les paramètres de l'indicateur. Cette conception vous permet d'ajouter plusieurs copies de l'indicateur avec différents niveaux sur le graphique et de recevoir des signaux en conséquence lors de leurs intersections.
Le niveau trigLv ne fonctionne qu'une seule fois par barre. La réactivation est possible uniquement après l'ouverture de la barre suivante. Cela permet d'éviter des déclenchements trop fréquents à chaque tick.

//+------------------------------------------------------------------+ //| LevelIndicator.mq4 | //| Copyright 2022, © Cyberdev | //| https://www.mql5.com/en/users/cyberdev/seller | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, © Cyberdev" #property link "https://www.mql5.com/en/users/cyberdev/seller" #property version "1.00" #property strict #property indicator_chart_window #property indicator_plots 0 #include <ChartObjects\ChartObjectsLines.mqh> input bool alert = true; // utiliser l'alerte input bool notification = true; // utiliser les notifications push input double trigLv = 0.0; // niveau d'activation input int deviation = 30; // déviation par rapport à trigLv en points input int lineWidth = 1; // épaisseur de la ligne input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // style de ligne input color lineColor = clrMediumSpringGreen; // couleur de la ligne input color inactivityColor = clrLightGray; // couleur d'inactivité CChartObjectHLine lv, dvH, dvL; bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+ //| Fonction d'initialisation de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnInit() { string name; double dv; color color_; name = "alert.lv-"; dv = deviation * SymbolInfoDouble(NULL, SYMBOL_POINT); color_ = (alert || notification) ? lineColor : inactivityColor; for (int n = 0; n <= INT_MAX && !IsStopped(); n++) { if (ObjectFind(0, name + (string)n) != 0) { if (!lv.Create(0, name + (string)n, 0, trigLv)) return INIT_FAILED; lv.Width(lineWidth); lv.Style(lineStyle); lv.Color(color_); dvH.Create(0, "alert.dvH-" + (string)n, 0, trigLv + dv); dvH.Width(1); dvH.Style(STYLE_DOT); dvH.Color(color_); dvL.Create(0, "alert.dvL-" + (string)n, 0, trigLv - dv); dvL.Width(1); dvL.Style(STYLE_DOT); dvL.Color(color_); break; } } if (!alert && !notification) Print("Indicateur de Niveau. Niveau ", lv.Price(0), " est inactif!"); if (trigLv == 0.0) Alert("Indicateur de Niveau. Réglez le paramètre \"trigLv\" sur la valeur souhaitée!"); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { //lv.Delete(); //dvH.Delete(); //dvL.Delete(); } //+------------------------------------------------------------------+ //| Fonction d'itération de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[] ) { static bool triggered = false; static datetime time_ = 0; if (!alert && !notification) return rates_total; if (equal(lv.Price(0), close[0], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { if (time_ != time[0]) time_ = time[0]; else return rates_total; if (!triggered) { if (alert) Alert("Indicateur de Niveau. Niveau ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " déclenché!"); if (notification) SendNotification("Indicateur de Niveau. Niveau " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " déclenché!"); } triggered = true; } else triggered = false; return(rates_total); } //+------------------------------------------------------------------+
Articles connexes
- iMAX3 : Détecteur de Tendances Rapides pour Traders
- Découvrez l'indicateur Tymen STARC Bands MTF 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
- Améliorez vos graphiques avec ClearView : Indicateurs et modèles pour MetaTrader 5