El Indicador de Niveles es una herramienta esencial para los traders que utilizan MetaTrader 5. Este indicador te permite establecer un nivel específico, conocido como trigLv, que al ser cruzado dentro de un deviation determinado, activa una notificación en tu dispositivo móvil, siempre y cuando tengas habilitada la opción de notificación. Además, si activas la opción de alert, se reproducirá una alerta sonora. Los niveles de trigLv y los límites de deviation se destacan con líneas horizontales personalizables en cuanto a estilo, color y grosor desde la configuración del indicador. Esto te permite agregar múltiples copias del indicador en el gráfico, cada una con diferentes configuraciones, para recibir señales de sus intersecciones.
Es importante destacar que el nivel trigLv solo se activa una vez por cada barra. La reactivación solo es posible tras la apertura de la siguiente barra, lo que ayuda a evitar activaciones excesivas en cada tick.

//+------------------------------------------------------------------+ //| Indicador de Niveles.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; // usar alerta input bool notification = true; // usar notificaciones push input double trigLv = 0.0; // nivel de activación input int deviation = 30; // desviación desde trigLv en puntos input int lineWidth = 1; // ancho de línea input ENUM_LINE_STYLE lineStyle = STYLE_SOLID; // estilo de línea input color lineColor = clrMediumSpringGreen; // color de línea input color inactivityColor = clrLightGray; // color de inactividad CChartObjectHLine lv, dvH, dvL; bool equal(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+ //| Función de inicialización del indicador personalizado | //+------------------------------------------------------------------+ 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("Indicador de Niveles. Nivel ", lv.Price(0), " está inactivo!"); if (trigLv == 0.0) Alert("Indicador de Niveles. ¡Configura el parámetro \"trigLv\" al valor deseado!"); 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("Indicador de Niveles. Nivel ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " activado!"); if (notification) SendNotification("Indicador de Niveles. Nivel " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " activado!"); } triggered = true; } else triggered = false; return rates_total; } //+------------------------------------------------------------------+
Publicaciones relacionadas
- MetaCOT 2 CFTC ToolBox: Herramientas Esenciales para Análisis en MT4
- Mejora tu Análisis con Líneas de Cuadrícula Horizontal en Gráficos
- Líneas Verticales: Potencia tu Análisis en MetaTrader 4
- Volatilidad Estocástica: Indicador en Gráficos para MetaTrader 5
- Niveles Históricos Fuertes: Herramienta Clave para Traders de MetaTrader 5