Discusión sobre el artículo "Dominando los registros (Parte 9): Implementación del patrón Builder y adición de configuraciones predeterminadas"
¿Has pensado en añadir el registro de paradas en tiempo de ejecución? Por supuesto, lo normal es que el desarrollador se encargue de esto en la versión de evaluación.
TerminalInfoString(TERMINAL_LANGUAGE);
El idioma predeterminado de los mensajes de error del registro se puede ajustar al idioma de la terminal del usuario siguiendo este código
Me pregunto si quiero mostrar solo los mensajes de depuración y de error. Y tengo todos los mensajes de información, alerta, etc., integrados en el EA. ¿Quizás podríamos establecer un valor booleano para cada tipo en «enum ENUM_LOG_LEVEL» para mostrar lo que queramos?
En el código de producción, si desactivamos algunos de los registros, estos no deberían compilarse en el archivo ex5 final.
Para ello, puedes utilizar una variable o incluso una dirección IP en el EA que almacene el valor de nivel deseado y simplemente lo pase al controlador. Aquí tienes un ejemplo.
//+------------------------------------------------------------------+ //| Importar | //+------------------------------------------------------------------+ #include <Logify/Logify.mqh> CLogify Logify; //+------------------------------------------------------------------+ //| Entradas | //+------------------------------------------------------------------+ input ENUM_LOG_LEVEL InpLogLevel = LOG_LEVEL_INFO; // Nivel de registro //+------------------------------------------------------------------+ //| Función de inicialización del experto | //+------------------------------------------------------------------+ int OnInit() { Logify.EnsureDefaultHandler(); Logify.GetHandler(0).SetLevel(InpLogLevel); Logify.Debug("RSI indicator value calculated: 72.56", "Indicators", "Period: 14"); Logify.Info("Buy order sent successfully", "Order Management", "Symbol: EURUSD, Volume: 0.1"); Logify.Error("Failed to send sell order", 10016,"Order Management"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+
Esto mostrará únicamente los mensajes con un nivel de gravedad mayor o igual al definido en el controlador.
El idioma predeterminado de los mensajes de error del registro se puede ajustar al idioma de la terminal del usuario siguiendo este código
La parte 10 de este artículo está pendiente de publicación. En ella se explica cómo suprimir los registros idénticos y también cómo configurar el idioma predeterminado de la terminal. ¡Gracias por la sugerencia!
Para ello, puedes utilizar una variable o incluso una dirección IP en el experto que almacene el valor de nivel deseado y simplemente lo pase al controlador. Aquí tienes un ejemplo.
Esto mostrará únicamente los mensajes con un nivel de gravedad mayor o igual al definido en el controlador.
El autor muestra cómo cambiar el nivel en tiempo de ejecución sin modificar el código.
Creo que solo quiere mostrar un nivel de registro. Tiene que modificar el código como se indica a continuación:
//--- P. ej. void CLogifyHandlerComment::Emit(MqlLogifyModel &data) { //--- Comprobar si el nivel de registro está permitido if(data.level != this.GetLevel()) // cambia «<» por «!=» { return; } //--- Registros de turnos para mantener el historial for(int i = m_config.size-1; i > 0; i--) { m_cache[i] = m_cache[i-1]; } m_cache[0] = data; //--- Generar el comentario completo string comment = BuildHeader(); comment += FormatLogLines(); comment += BuildFooter(); //--- Mostrar en el gráfico Comment(comment); }
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Dominando los registros (Parte 9): Implementación del patrón Builder y adición de configuraciones predeterminadas:
Desde que comencé a usar Logify en varios proyectos personales y profesionales, rápidamente me di cuenta de que el mayor desafío no radicaba en la robustez o la funcionalidad de la biblioteca en sí, sino en su configuración. Logify es una potente herramienta para gestionar registros en Asesores Expertos, que ofrece múltiples manejadores, niveles de registro, formatos personalizados, compatibilidad con varios idiomas y mucho más. Sin embargo, todo esto requería que el usuario configurara manualmente cada controlador, formateador y parámetro, lo que puede funcionar bien para proyectos pequeños, pero que rápidamente se convierte en una tarea repetitiva, tediosa y propensa a errores a medida que aumenta el número de asesores expertos (EAs) y proyectos.
Imagínese tener que replicar, para cada EA, el mismo conjunto complejo de configuraciones: crear manejadores específicos para comentarios en el gráfico, consola, archivos y bases de datos; establecer niveles mínimos para cada manejador; definir formatos específicos para mensajes de error, depuración, alertas, etc. Cada uno de estos pasos, aunque necesario, genera un código largo, detallado y poco intuitivo, rompiendo el flujo de trabajo del desarrollo. Esta complejidad inicial se convierte en una barrera, una fricción que puede desalentar la adopción de Logify, incluso si ofrece una gestión de registros impecable en tiempo de ejecución.
Esta reflexión me motivó a pensar: ¿cómo puedo simplificar esta configuración, facilitando la vida del usuario, sin renunciar a la flexibilidad y la personalización? Fue en ese momento cuando surgió la idea de crear un constructor para Logify, una clase que permite armar toda la configuración de forma fluida y encadenada, con métodos intuitivos que crean controladores con patrones lógicos y permiten realizar ajustes rápidos y puntuales. El objetivo es transformar docenas de líneas de configuración en unas pocas llamadas a métodos, casi como si estuviéramos escribiendo un resumen claro de lo que queremos, en lugar de todo el ensamblaje manual.
En este artículo, les mostraré cómo he implementado estas mejoras. Presentaré el builder, explicando su diseño y funcionamiento. A continuación, les mostraré cómo se puede configurar Logify con ejemplos prácticos.
Autor: joaopedrodev