Programación en MQL5 (IV)

Trading Meetings  » Tutoriales »  Programación en MQL5 (IV)
Programación en MQL5 - 4. Temas Intermedios
0 Comments 20:26

 
 

En este capítulo, aprenderemos a implementar notificaciones, registros de eventos y alertas visuales en MQL5. Estas herramientas son esenciales para monitorear el rendimiento de tus Expert Advisors (EAs), depurar errores y recibir actualizaciones en tiempo real sobre el estado de tus operaciones.


MQL5 permite enviar notificaciones automáticas a través de correo electrónico o SMS utilizando las funciones SendMail() y SendNotification(). Esto es útil para recibir alertas importantes, como la apertura o cierre de posiciones.

Ejemplo Práctico: Envío de Notificaciones


Explicación del Código

  1. Envío de Correo Electrónico:
    • La función SendMail() envía un correo electrónico con un asunto y un cuerpo personalizados.
    • Antes de usar esta función, asegúrate de configurar tu servidor SMTP en MetaTrader 5 (Herramientas > Opciones > Correo).
  2. Envío de Notificaciones Push:
    • La función SendNotification() envía una notificación push a tu dispositivo móvil vinculado a MetaTrader 5.
    • Para usar esta función, asegúrate de habilitar las notificaciones en la aplicación móvil de MetaTrader.
  3. Personalización de Mensajes:
    • Puedes incluir información dinámica, como el número de posiciones abiertas o el saldo actual, en los mensajes de notificación.

El registro de eventos es crucial para depurar y analizar el comportamiento de tus EAs. MQL5 ofrece varias formas de registrar eventos, como Print() para la consola y FileWrite() para archivos de texto.

Ejemplo Práctico: Registro de Eventos


Explicación del Código

  1. Registro en la Consola:
    • La función Print() muestra mensajes en la ventana de resultados de MetaTrader 5.
    • Es útil para depurar rápidamente problemas durante el desarrollo.
  2. Registro en Archivos de Texto:
    • La función FileWriteLog() escribe mensajes en un archivo de texto, lo que permite almacenar un historial detallado de eventos.
    • El archivo se guarda en la carpeta Files de MetaTrader 5.
  3. Formato del Registro:
    • Los mensajes incluyen una marca de tiempo (TimeCurrent()) para facilitar el seguimiento de eventos.

Las alertas visuales son una forma efectiva de destacar eventos importantes directamente en el gráfico. Puedes usar la función Alert() para mostrar mensajes emergentes o dibujar objetos gráficos con ObjectCreate().

Ejemplo Práctico: Alertas Visuales


Explicación del Código

  1. Alertas Emergentes:
    • La función Alert() muestra un mensaje emergente cuando se cumple una condición específica.
    • Es útil para captar la atención del trader inmediatamente.
  2. Objetos Gráficos:
    • La función ObjectCreate() dibuja un objeto gráfico en el gráfico, como una línea horizontal (OBJ_HLINE).
    • Puedes personalizar el color, estilo y tooltip del objeto para mejorar su visibilidad.
  3. Condiciones de Activación:
    • Las alertas visuales se activan cuando el precio cruza un nivel clave, lo que puede ser útil para identificar puntos de entrada o salida.

Interactividad: Ejercicios Prácticos

Ver solución:

Explicación del Código

  1. Obtención del Saldo de la Cuenta:
    • Usamos la función AccountInfoDouble(ACCOUNT_BALANCE) para obtener el saldo actual de la cuenta.
    • También usamos AccountCurrency() para incluir la moneda de la cuenta en el mensaje.
  2. Personalización del Mensaje de Correo Electrónico:
    • El mensaje de correo electrónico (emailBody) incluye:
      • El número de posiciones abiertas (PositionsTotal()).
      • El saldo actual de la cuenta (accountBalance), formateado con dos decimales usando DoubleToString.
      • La moneda de la cuenta (AccountCurrency()).
  3. Envío del Correo Electrónico:
    • La función SendMail() envía el correo electrónico con un asunto (emailSubject) y un cuerpo personalizado (emailBody).
  4. Notificación Push:
    • La función SendNotification() envía una notificación push al dispositivo móvil vinculado a MetaTrader 5.

Resultado Esperado

Cuando ejecutes este EA, recibirás un correo electrónico similar al siguiente:

Asunto: Estado de Posiciones
Cuerpo:

Además, recibirás una notificación push en tu dispositivo móvil con el mensaje configurado en NotificationMessage.


Interpretación del Cambio

Este ejercicio mejora el sistema de notificaciones al incluir información relevante sobre el estado de la cuenta, como el saldo actual. Esto es útil porque:

  • Proporciona una visión clara del estado financiero de la cuenta en tiempo real.
  • Facilita la toma de decisiones basadas en el saldo disponible.
  • Personaliza los mensajes de notificación para que sean más informativos y útiles.

Casos Prácticos

Esta implementación puede ser utilizada para:

  • Monitorear el saldo de la cuenta después de abrir o cerrar posiciones.
  • Recibir alertas cuando el saldo caiga por debajo de un umbral crítico.
  • Integrar información financiera en informes automáticos enviados por correo electrónico.

¡Espero que este ejemplo te ayude a entender cómo personalizar mensajes de notificación en MQL5!


Ver solución:

Explicación del Código

  1. Registro de Operaciones Abiertas:
    • La función LogOpenPositions itera sobre todas las posiciones abiertas usando PositionsTotal() y PositionGetTicket.
    • Para cada posición, obtiene detalles como el símbolo, volumen, precio de apertura y tipo de operación (compra o venta).
    • Los datos se formatean en una línea CSV con campos separados por comas.
  2. Registro de Operaciones Cerradas:
    • La función LogClosedPositions itera sobre todas las operaciones cerradas usando HistoryDealsTotal() y HistoryDealGetTicket.
    • Para cada operación cerrada, obtiene detalles como el símbolo, volumen, precio, tipo de operación y ganancia/pérdida.
    • Los datos también se formatean en una línea CSV.
  3. Escritura en Archivo CSV:
    • La función WriteToCSV maneja la escritura en el archivo CSV.
    • Si el archivo está vacío (FileSize(fileHandle) == 0), escribe un encabezado con los nombres de las columnas.
    • Luego, escribe cada línea de registro en el archivo.
  4. Formato del Archivo CSV:
    • El archivo incluye las siguientes columnas:
      • Timestamp: Marca de tiempo de la operación.
      • Ticket: Número de ticket de la operación.
      • Symbol: Símbolo del instrumento financiero.
      • Type: Tipo de operación (compra o venta).
      • Volume: Volumen de la operación.
      • Price: Precio de apertura o cierre.
      • Profit: Ganancia o pérdida (solo para operaciones cerradas).
      • Status: Estado de la operación (abierta o cerrada).

Resultado Esperado

Cuando ejecutes este EA, se generará un archivo CSV llamado TradingHistory.csv en la carpeta Files de MetaTrader 5. El archivo tendrá un formato similar al siguiente:


Interpretación del Cambio

Este ejercicio implementa un sistema de registro que guarda el historial de operaciones en un archivo CSV. Esto es útil porque:

  • Proporciona un registro estructurado y fácil de analizar de todas las operaciones realizadas.
  • Facilita la auditoría y el análisis posterior del rendimiento del EA.
  • Permite exportar los datos a herramientas externas (como Excel o Python) para realizar análisis avanzados.

Casos Prácticos

Este sistema puede ser utilizado para:

  • Monitorear el desempeño de tus EAs en tiempo real.
  • Identificar patrones en las operaciones abiertas y cerradas.
  • Generar informes automáticos para evaluar la efectividad de tus estrategias.

¡Espero que este ejemplo te ayude a entender cómo implementar un sistema de registro en MQL5!


Ver solución:

Explicación del Código

  1. Parámetros de Entrada:
    • MaxSpreadPips: Define el umbral máximo permitido para el spread en pips. Si el spread supera este valor, se mostrará una alerta.
  2. Cálculo del Spread Actual:
    • El spread se calcula como la diferencia entre el precio de compra (SYMBOL_ASK) y el precio de venta (SYMBOL_BID), convertida a pips dividiendo por Point().
  3. Verificación del Umbral:
    • Si el spread supera el umbral (MaxSpreadPips), se muestra una alerta visual usando la función Alert().
    • Para evitar múltiples alertas consecutivas, se usa una variable booleana (alertShown) para controlar si la alerta ya se ha mostrado.
  4. Dibujo de la Línea de Alerta:
    • La función DrawSpreadAlertLine dibuja una línea horizontal (OBJ_HLINE) en el gráfico para destacar visualmente el nivel del spread.
    • La línea tiene un color rojo, un estilo discontinuo y un tooltip informativo.
  5. Restablecimiento de la Alerta:
    • Si el spread vuelve a estar dentro del umbral, se elimina la línea de alerta del gráfico usando ObjectDelete() y se restablece la bandera alertShown.

Resultado Esperado

Cuando ejecutes este EA, verás lo siguiente:

  1. Si el spread supera el umbral (por ejemplo, 2 pips):
    • Aparecerá una ventana emergente con el mensaje:
  • Se dibujará una línea roja discontinua en el gráfico con un tooltip que indica el valor del spread.
  1. Si el spread vuelve a estar dentro del umbral:
    • La línea de alerta desaparecerá del gráfico.

Interpretación del Cambio

Este ejercicio implementa un sistema de alertas visuales para monitorear el spread en tiempo real. Esto es útil porque:

  • Ayuda a identificar condiciones de mercado adversas (como spreads altos durante noticias o volatilidad extrema).
  • Proporciona una advertencia clara y visible directamente en el gráfico.
  • Permite tomar decisiones informadas sobre cuándo operar o evitar abrir posiciones.

Casos Prácticos

Este EA puede ser utilizado para:

  • Evitar operaciones en momentos de alta volatilidad o liquidez reducida.
  • Monitorear el spread en símbolos exóticos o menos líquidos.
  • Integrar alertas visuales en estrategias automatizadas para mejorar la toma de decisiones.

¡Espero que este ejemplo te ayude a entender cómo implementar alertas visuales en MQL5!


En el próximo capítulo, exploraremos cómo trabajar con arrays y matrices multidimensionales en MQL5.

¡Sigue practicando y perfeccionando tus habilidades en MQL5!

 
 


Deja una respuesta