Programación en MQL5 (V)

Trading Meetings  » Tutoriales »  Programación en MQL5 (V)
Programación en MQL5 - Mejoras y Herramientas Adicionales
0 Comments 20:11

 
 

¡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, aprenderemos a utilizar bibliotecas estándar, crear scripts auxiliares y aprovechar funciones avanzadas como ArraySort() en MQL5. Estas herramientas son esenciales para organizar tu código, reutilizar funciones y optimizar el rendimiento de tus Expert Advisors (EAs) e indicadores.


La directiva #include permite importar bibliotecas estándar o personalizadas en tu código. Esto es útil para reutilizar funciones comunes sin tener que escribirlas desde cero cada vez.

Ejemplo Práctico: Importación de una Biblioteca Personalizada

Supongamos que queremos crear una biblioteca con funciones matemáticas útiles y luego usarla en un EA.

Paso 1: Crear la Biblioteca

Guarda el siguiente código en un archivo llamado MathLibrary.mqh:

Paso 2: Usar la Biblioteca en un EA

Ahora, usaremos esta biblioteca en un EA para calcular el promedio y el máximo de un array de precios.


Explicación del Código

  1. Creación de la Biblioteca:
    • La biblioteca MathLibrary.mqh contiene dos funciones:
      • CalculateAverage: Calcula el promedio de un array.
      • FindMaximum: Encuentra el valor máximo de un array.
  2. Importación de la Biblioteca:
    • La directiva #include <MathLibrary.mqh> importa las funciones de la biblioteca en el EA.
  3. Uso de las Funciones:
    • El EA utiliza las funciones de la biblioteca para calcular el promedio y el máximo de un array de precios.

Los scripts son programas que se ejecutan una sola vez y son útiles para realizar tareas específicas, como limpiar objetos gráficos o exportar datos.

Ejemplo Práctico: Script para Exportar Datos Históricos a un Archivo CSV


Explicación del Código

  1. Exportación de Datos:
    • El script exporta los últimos 100 datos históricos (timestamp, apertura, máximo, mínimo y cierre) a un archivo CSV.
  2. Escritura en Archivo:
    • Usa FileWrite() para escribir los datos en formato CSV.
  3. Resultados:
    • El archivo generado (HistoricalData.csv) puede ser abierto en Excel o cualquier herramienta de análisis de datos.

La función ArraySort() permite ordenar arrays en orden ascendente o descendente. Esto es útil para encontrar valores máximos, mínimos o medias.

Ejemplo Práctico: Ordenar Precios y Encontrar el Medio


Explicación del Código

  1. Ordenación del Array:
    • La función ArraySort() ordena el array prices en orden ascendente.
  2. Cálculo del Precio Medio:
    • El índice medio se calcula dividiendo el tamaño del array entre 2.
  3. Resultados:
    • Los precios ordenados y el precio medio se imprimen en la ventana de resultados.

Interactividad: Ejercicios Prácticos

Ver solución:

Guarda el siguiente código en un archivo llamado ArrayUtils.mqh:


Explicación del Código

  1. Función FindMinimum:
    • Recibe un array como parámetro y devuelve el valor mínimo.
    • Si el array está vacío, imprime un mensaje de error y devuelve 0.
    • Itera sobre el array para encontrar el valor más pequeño.
  2. Función CalculateRange:
    • Recibe un array como parámetro y devuelve el rango (diferencia entre el máximo y el mínimo).
    • Si el array está vacío, imprime un mensaje de error y devuelve 0.
    • Calcula tanto el máximo como el mínimo en un solo bucle y luego calcula el rango como la diferencia entre ambos.
  3. Uso de Referencias (&array[]):
    • Las funciones reciben el array por referencia (&array[]) para evitar copiar los datos y mejorar la eficiencia.

Ejemplo de Uso en un EA

Ahora, usaremos esta biblioteca en un EA para calcular el mínimo y el rango de un array de precios.


Resultado Esperado

Cuando ejecutes este EA, verás lo siguiente en la ventana de resultados:


Interpretación del Cambio

Este ejercicio implementa una biblioteca personalizada con funciones reutilizables para calcular el mínimo y el rango de un array. Esto es útil porque:

  • Centraliza las funciones comunes en una biblioteca, lo que facilita su reutilización en múltiples proyectos.
  • Mejora la organización del código al separar las funciones auxiliares del código principal.
  • Permite realizar cálculos complejos de manera eficiente y clara.

Casos Prácticos

Esta biblioteca puede ser utilizada para:

  • Analizar rangos de precios históricos para identificar volatilidad.
  • Encontrar valores mínimos o máximos en indicadores técnicos, como el RSI o el MACD.
  • Implementar estrategias basadas en umbrales dinámicos, como stop loss o take profit basados en el rango.

¡Espero que este ejemplo te ayude a entender cómo crear y usar bibliotecas personalizadas en MQL5!


Ver solución:

Explicación del Código

  1. Obtención del Número Total de Objetos:
    • La función ObjectsTotal(0) devuelve el número total de objetos gráficos en el gráfico actual (0 indica el gráfico principal).
  2. Iteración Sobre los Objetos:
    • Se utiliza un bucle for que itera desde el último objeto hasta el primero (i = totalObjects - 1 hasta i >= 0).
    • Esto es importante porque al eliminar un objeto, el índice de los objetos restantes puede cambiar. Iterar en orden inverso evita problemas de índice.
  3. Eliminación de Objetos:
    • La función ObjectName(0, i) obtiene el nombre del objeto en el índice i.
    • La función ObjectDelete(0, objectName) intenta eliminar el objeto con el nombre especificado.
    • Si la eliminación falla, se imprime un mensaje de error con el código de error usando GetLastError().
  4. Resultados:
    • Cada vez que un objeto se elimina correctamente, se imprime su nombre en la ventana de resultados.
    • Al finalizar, se imprime un mensaje indicando que todos los objetos han sido eliminados.

Resultado Esperado

Cuando ejecutes este script en un gráfico con objetos gráficos (como líneas, flechas o etiquetas), verás lo siguiente en la ventana de resultados:

Si algún objeto no se puede eliminar, verás un mensaje de error como este:


Interpretación del Cambio

Este ejercicio implementa un script que limpia completamente un gráfico eliminando todos los objetos gráficos. Esto es útil porque:

  • Permite mantener el gráfico limpio y organizado, especialmente después de pruebas o análisis complejos.
  • Evita confusiones causadas por objetos gráficos antiguos o innecesarios.
  • Facilita la reutilización del gráfico para nuevas estrategias o análisis.

Casos Prácticos

Este script puede ser utilizado para:

  • Limpiar un gráfico antes de aplicar una nueva estrategia o indicador.
  • Eliminar objetos temporales creados durante la depuración de un EA o indicador.
  • Automatizar la limpieza de gráficos en múltiples ventanas o símbolos.

¡Espero que este ejemplo te ayude a entender cómo eliminar objetos gráficos en MQL5!


Ver solución:

Explicación del Código

  1. Declaración del Array:
    • El array profits[] contiene valores de ganancias (positivos) y pérdidas (negativos).
    • Estos valores representan resultados hipotéticos de operaciones.
  2. Ordenación del Array:
    • La función ArraySort() ordena el array en orden ascendente (MODE_ASCEND).
    • Esto es necesario para calcular percentiles, ya que requiere que los datos estén ordenados.
  3. Cálculo del Índice del Percentil 75:
    • El índice del percentil 75 se calcula como (arraySize - 1) * 0.75.
    • Este cálculo determina la posición en el array donde se encuentra el percentil 75.
  4. Interpolación para Valores No Enteros:
    • Si el índice no es un número entero, se interpola entre los dos valores más cercanos.
    • Por ejemplo, si el índice es 6.75, se interpola entre el valor en el índice 6 y el índice 7.
  5. Resultado Final:
    • El valor del percentil 75 se imprime en la ventana de resultados.

Resultado Esperado

Cuando ejecutes este script, verás lo siguiente en la ventana de resultados:


Interpretación del Cambio

Este ejercicio implementa un script que calcula el percentil 75 de un array de ganancias/pérdidas utilizando ArraySort() y una interpolación para índices no enteros. Esto es útil porque:

  • El percentil 75 es una medida estadística que indica el valor por debajo del cual se encuentra el 75% de los datos.
  • Permite evaluar el rendimiento de un sistema de trading al identificar umbrales clave, como el nivel de ganancia que supera el 75% de las operaciones.

Casos Prácticos

Este script puede ser utilizado para:

  • Analizar el rendimiento de un EA o estrategia de trading.
  • Identificar umbrales de ganancia o pérdida para ajustar stop loss o take profit.
  • Comparar diferentes sistemas de trading basándose en métricas como el percentil 75.

¡Espero que este ejemplo te ayude a entender cómo calcular percentiles en MQL5!


En el próximo capítulo, exploraremos cómo integrar APIs externas para ampliar las capacidades de tus EAs.

 
 


Deja una respuesta