Quando il livello trigLv specificato nelle impostazioni viene superato all'interno della deviazione, l'indicatore invia una notifica push al dispositivo mobile se il parametro di input notification è attivato, e suona un avviso se il parametro alert è attivato. Il livello di attivazione trigLv e i limiti di deviazione sono evidenziati con linee orizzontali, il cui stile, colore e spessore possono essere impostati nelle impostazioni dell'indicatore. Questo design consente di aggiungere più copie dell'indicatore con livelli diversi al grafico e ricevere segnali in base alle loro intersezioni.
Il livello trigLv funziona solo una volta per ogni barra. L'attivazione è possibile solo dopo l'apertura della barra successiva. Così facendo, si evitano attivazioni troppo frequenti a ogni tick.

//+------------------------------------------------------------------+ //| Indicatore di Livello.mq5 | //| 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 indicator_chart_window #property indicator_plots 0 #include <ChartObjects\ChartObjectsLines.mqh> input bool alert = true; // usa avviso input bool notification = true; // usa notifiche push input double trigLv = 0.0; // livello di attivazione input int deviation = 30; // deviazione da trigLv in punti input int lineWidth = 1; // spessore della linea input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // stile della linea input color lineColor = clrMediumSpringGreen; // colore della linea input color inactivityColor = clrLightGray; // colore di inattività CChartObjectHLine lv, dvH, dvL; bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+ //| Funzione di inizializzazione dell'indicatore personalizzato | //+------------------------------------------------------------------+ 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("Indicatore di Livello. Livello ", lv.Price(0), " è inattivo!"); if (trigLv == 0.0) Alert("Indicatore di Livello. Imposta il parametro \"trigLv\" sul valore desiderato!"); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { //lv.Delete(); //dvH.Delete(); //dvL.Delete(); } 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[rates_total - 1], deviation * SymbolInfoDouble(NULL, SYMBOL_POINT))) { if (time_ != time[rates_total - 1]) time_ = time[rates_total - 1]; else return rates_total; if (!triggered) { if (alert) Alert("Indicatore di Livello. Livello ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " attivato!"); if (notification) SendNotification("Indicatore di Livello. Livello " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " attivato!"); } triggered = true; } else triggered = false; return rates_total; } //+------------------------------------------------------------------+
Post correlati
- Indicatori ZigZag Potenziati: Scopri le Nuove Funzionalità per MetaTrader 4
- Indice di Vigorità Relativa (RVI): Guida all'Utilizzo su MetaTrader 5
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- HP Extrapolator: Scopri Come Ottimizzare le Previsioni con il Filtro Hodrick-Prescott
- Indicatore Donchian Ultimate per MT4: Scopri tutte le Funzionalità