Cuando el nivel trigLv especificado en la configuración es cruzado dentro de la deviación, el indicador envía una notificación a tu dispositivo móvil si el parámetro de entrada notificación está habilitado, y también reproduce una alerta si el parámetro de entrada alerta está activado. El nivel de activación trigLv, así como los límites de deviación, están marcados con líneas horizontales, cuyo estilo, color y grosor también se pueden configurar en los ajustes del indicador. Este diseño permite agregar varias copias del indicador con diferentes niveles al gráfico y recibir señales como resultado de sus intersecciones.
El nivel trigLv se activa solo una vez por cada barra. La reactivación solo es posible después de la apertura de la siguiente barra. De esta manera, se elimina la posibilidad de activaciones demasiado frecuentes en cada tick.

//+------------------------------------------------------------------+ //| IndicadorNivel.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 alerta = true; // activar alerta input bool notificacion = true; // usar notificaciones push input double trigLv = 0.0; // nivel de activación input int desviacion = 30; // desviación de trigLv en puntos input int anchoLinea = 1; // ancho de línea input ENUM_LINE_STYLE estiloLinea = STYLE_SOLID; // estilo de línea input color colorLinea = clrMediumSpringGreen; // color de línea input color colorInactividad = clrLightGray; // color de inactividad CChartObjectHLine lv, dvH, dvL; bool igual(double _v1, double _v2, double _epsilon) { return fabs(_v1 - _v2) <= fabs(_epsilon); } //+------------------------------------------------------------------+ //| Función de inicialización del indicador personalizado | //+------------------------------------------------------------------+ int OnInit() { string nombre; double dv; color color_; nombre = "alert.lv-"; dv = desviacion * SymbolInfoDouble(NULL, SYMBOL_POINT); color_ = (alerta || notificacion) ? colorLinea : colorInactividad; for (int n = 0; n <= INT_MAX && !IsStopped(); n++) { if (ObjectFind(0, nombre + (string)n) != 0) { if (!lv.Create(0, nombre + (string)n, 0, trigLv)) return INIT_FAILED; lv.Width(anchoLinea); lv.Style(estiloLinea); 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 (!alerta && !notificacion) Print("Indicador de Nivel. Nivel ", lv.Price(0), " está inactivo!"); if (trigLv == 0.0) Alert("Indicador de Nivel. Ajusta el parámetro 'trigLv' al valor deseado!"); return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { //lv.Delete(); //dvH.Delete(); //dvL.Delete(); } //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------+ 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 activado = false; static datetime time_ = 0; if (!alerta && !notificacion) return rates_total; if (igual(lv.Price(0), close[0], desviacion * SymbolInfoDouble(NULL, SYMBOL_POINT))) { if (time_ != time[0]) time_ = time[0]; else return rates_total; if (!activado) { if (alerta) Alert("Indicador de Nivel. Nivel ", NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)), " activado!"); if (notificacion) SendNotification("Indicador de Nivel. Nivel " + (string)NormalizeDouble(lv.Price(0), (int)SymbolInfoInteger(NULL, SYMBOL_DIGITS)) + " activado!"); } activado = true; } else activado = 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
- Alertas de Señales con el Indicador Iin_MA para MetaTrader 5
- iStochKomposterAlert: El Indicador de Señales para MetaTrader 5 con Alertas
- Líneas Verticales: Potencia tu Análisis en MetaTrader 4