Programación en MQL5 (II)

Trading Meetings  » Tutoriales »  Programación en MQL5 (II)
Programación en MQL5 - 2. Fundamentos de programación
0 Comments 13:43

 
 

¡Bienvenido al Tutorial de MQL5!
Este material está diseñado para traders y desarrolladores que ya tienen nociones básicas de programación (variables, bucles, condicionales, etc.). Aunque repasaremos los comandos y estructuras principales de MQL5, el enfoque está en aplicar conceptos prácticos para desarrollar Expert Advisors (EAs), indicadores y scripts.

Si eres completamente nuevo en programación, te recomendamos:

  1. Consultar la documentación oficial de MQL5 para comprender los fundamentos del lenguaje.
  2. Practicar con los 60+ ejercicios y ejemplos resueltos de este tutorial, que van desde lo básico hasta lo avanzado.
  3. Empezar con proyectos simples (como indicadores básicos o scripts de alertas) antes de abordar EAs complejos.

Este tutorial no solo te enseñará a codificar, sino que también te guiará en la implementación de estrategias reales, gestión de riesgos y optimización. ¡Manos a la obra!

¡Esperamos que disfrutes este tutorial y que te conviertas en un experto en MQL5! 🚀

Sumario:

 
   
 

En este capítulo, exploraremos la estructura básica de un script en MQL5 y cómo funcionan las funciones principales que definen el ciclo de vida de un programa: OnInit(), OnDeinit() y OnTick(). Estas funciones son esenciales para cualquier tipo de aplicación en MQL5, ya sea un script, un indicador personalizado o un Expert Advisor.


La función OnInit() se ejecuta una sola vez cuando el script, indicador o EA se inicia. Es ideal para realizar tareas de configuración inicial, como cargar datos, verificar condiciones o inicializar variables.

Ciclo de Vida:

  • Se llama automáticamente al iniciar el programa.
  • Si ocurre un error durante la inicialización, el programa no continuará su ejecución.

Ejemplo práctico: Verificamos si el símbolo actual está disponible antes de continuar.

Explicación del Código:

  • Usamos SymbolExists() para verificar si el símbolo está disponible.
  • Si no está disponible, devolvemos INIT_FAILED para detener la ejecución.
  • En caso contrario, mostramos un mensaje de éxito y retornamos INIT_SUCCEEDED.

La función OnDeinit() se ejecuta cuando el programa termina su ejecución. Es útil para liberar recursos, cerrar archivos o guardar datos antes de finalizar.

Ciclo de Vida:

  • Se llama automáticamente al cerrar el programa.
  • Puede ser utilizado para limpiar recursos o realizar acciones finales.

Ejemplo práctico: Guardamos un registro de cuándo se cerró el programa.

Explicación del Código:

  • Usamos EnumToString() para convertir el motivo de la desinicialización (reason) en una cadena legible.
  • Creamos un archivo de texto llamado log.txt y registramos la hora de cierre del programa.

La función OnTick() se ejecuta cada vez que llega un nuevo tick de precio para el símbolo seleccionado. Esta es la función principal en los Expert Advisors y scripts que requieren procesar datos en tiempo real.

Ciclo de Vida:

  • Se llama automáticamente cada vez que hay un cambio en los precios.
  • Ideal para implementar lógicas de trading basadas en señales de mercado.

Ejemplo práctico: Implementamos un EA simple que abre una posición larga si el precio supera un nivel clave.

Explicación del Código:

  • Obtenemos el precio actual usando SymbolInfoDouble().
  • Comparamos el precio con un nivel clave predefinido.
  • Si se cumple la condición, intentamos abrir una posición larga utilizando OrderSend().
  • Mostramos mensajes informativos en caso de éxito o error.

A continuación, te presentamos un resumen del ciclo de vida de un script en MQL5:

  1. Inicio (OnInit()): Se ejecuta al iniciar el programa. Aquí realizamos tareas de configuración.
  2. Procesamiento (OnTick()): Se ejecuta cada vez que llega un nuevo tick de precio. Aquí implementamos la lógica principal del programa.
  3. Finalización (OnDeinit()): Se ejecuta al cerrar el programa. Aquí limpiamos recursos o realizamos acciones finales.

Interactividad: Ejercicios Prácticos

Ver solución:

Explicación del Código

  1. Variable Global (lastPrice):
    • Se utiliza para almacenar el precio del último tick procesado. Esta variable permite comparar el precio actual con el anterior.
  2. Función OnInit():
    • Se ejecuta una vez al iniciar el script.
    • Verifica si el símbolo actual (_Symbol) está disponible en el mercado.
    • Inicializa la variable lastPrice con el precio actual del Ask (SYMBOL_ASK).
  3. Función OnTick():
    • Se ejecuta cada vez que llega un nuevo tick de precio.
    • Obtiene el precio actual del Ask usando SymbolInfoDouble().
    • Calcula el porcentaje de cambio entre el precio actual y el último precio almacenado.
    • Si el cambio supera el 0.1%, muestra un mensaje en la ventana de resultados con los detalles del cambio.
    • Actualiza la variable lastPrice con el precio actual para futuras comparaciones.
  4. Función OnDeinit():
    • Se ejecuta cuando el script termina su ejecución.
    • Muestra un mensaje indicando la razón de la finalización (por ejemplo, si el usuario cerró manualmente el script o si ocurrió un error).

Cómo Funciona el Script

  • El script monitorea continuamente los precios del símbolo seleccionado.
  • En cada tick, calcula el porcentaje de cambio entre el precio actual y el último precio registrado.
  • Si el cambio supera el 0.1%, muestra un mensaje informativo con el porcentaje exacto de cambio y los valores de los precios involucrados.
  • Al finalizar, guarda un registro de la razón de la desinicialización.

Este tipo de script puede ser útil para detectar movimientos significativos en el mercado y tomar decisiones comerciales basadas en esos eventos.

¡Espero que este ejemplo te sea útil para practicar y entender mejor cómo funcionan las funciones principales en MQL5!

Ver solución:

Explicación del Código

  1. Niveles Clave (nivelClaveCompra y nivelClaveVenta):
    • Se definen dos niveles clave: uno para abrir una posición larga (nivelClaveCompra) y otro para abrir una posición corta (nivelClaveVenta).
  2. Función OnTick():
    • Se ejecuta cada vez que llega un nuevo tick de precio.
    • Obtiene el precio actual del Ask (SYMBOL_ASK) para verificar si debe abrirse una posición larga y el precio del Bid (SYMBOL_BID) para verificar si debe abrirse una posición corta.
  3. Verificación de Posiciones Abiertas (PositionsTotal()):
    • Antes de tomar cualquier acción, verifica si ya hay posiciones abiertas para evitar múltiples órdenes simultáneas.
  4. Condición para Posición Larga:
    • Si el precio actual del Ask supera el nivel clave de compra (nivelClaveCompra), intenta abrir una posición larga utilizando OrderSend() con el tipo de orden OP_BUY.
  5. Condición para Posición Corta:
    • Si el precio actual del Bid cae por debajo del nivel clave de venta (nivelClaveVenta), intenta abrir una posición corta utilizando OrderSend() con el tipo de orden OP_SELL.
  6. Manejo de Errores:
    • Si ocurre un error al enviar la orden, se muestra el código de error utilizando GetLastError().

Cómo Funciona el Script

  • El script monitorea continuamente los precios del símbolo seleccionado.
  • En cada tick, verifica si el precio actual supera el nivel clave de compra o cae por debajo del nivel clave de venta.
  • Si se cumplen las condiciones y no hay posiciones abiertas, abre una posición larga o corta según corresponda.
  • Muestra mensajes informativos en la ventana de resultados para confirmar las acciones tomadas o reportar errores.

Este tipo de lógica es fundamental en la creación de Expert Advisors básicos y puede ser ampliada con más funcionalidades, como stop loss, take profit y gestión de riesgos.

¡Espero que este ejemplo te sea útil para entender cómo implementar estrategias simples de trading en MQL5!

Ver solución:

Explicación del Código

  1. Variable Global (tickCounter):
    • Se utiliza para llevar la cuenta del número total de ticks procesados durante la ejecución del script.
  2. Función OnTick():
    • Se ejecuta cada vez que llega un nuevo tick de precio.
    • Incrementa el contador tickCounter en 1 para registrar que se ha procesado un tick.
  3. Función OnDeinit():
    • Se ejecuta cuando el script termina su ejecución.
    • Muestra un mensaje informativo con la razón de la finalización y el número total de ticks procesados.
    • Intenta crear o abrir un archivo llamado tick_counter.txt utilizando la clase CFileText.
    • Si el archivo se abre correctamente, escribe el número total de ticks procesados en una línea dentro del archivo y luego lo cierra.
    • Si ocurre un error al abrir o escribir en el archivo, muestra un mensaje de error en la ventana de resultados.

Cómo Funciona el Script

  • Durante la ejecución del script, cada vez que llega un tick, el contador tickCounter se incrementa en 1.
  • Cuando el script termina su ejecución (ya sea porque el usuario lo cierra manualmente o debido a otra razón), la función OnDeinit() guarda el valor del contador en un archivo de texto llamado tick_counter.txt.
  • El archivo se crea o sobrescribe si ya existe, y el número total de ticks procesados se guarda como una cadena de texto.
  • Si hay algún problema al trabajar con el archivo (por ejemplo, permisos insuficientes), se muestra un mensaje de error.

Resultado Esperado

Al ejecutar este script y luego cerrarlo, encontrarás un archivo llamado tick_counter.txt en la carpeta donde se almacenan los archivos del terminal MetaTrader 5 (generalmente en MQL5/Files). Este archivo contendrá una línea similar a la siguiente:

Este tipo de funcionalidad es útil para depuración, análisis posterior o simplemente para mantener registros de la actividad del script.

¡Espero que este ejemplo te sea útil para entender cómo trabajar con archivos en MQL5 y guardar datos importantes al finalizar la ejecución de un programa!


Consejos Adicionales

  • Optimiza tus Scripts: Evita realizar operaciones costosas dentro de OnTick() para mejorar el rendimiento.
  • Usa Logs: Registra eventos importantes en archivos de texto para facilitar el depurado y análisis posterior.
  • Prueba en Backtesting: Antes de usar tus scripts en vivo, prueba su comportamiento en el entorno de backtesting.

En el próximo capítulo, profundizaremos en cómo trabajar con datos del mercado y gestionar órdenes de forma eficiente.

¡Sigue practicando y perfeccionando tus habilidades en MQL5!

 
 


Deja una respuesta