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

 
 

En este capítulo, aprenderemos cómo identificar y corregir errores en el código MQL5, utilizar las herramientas de depuración del MetaEditor y documentar adecuadamente nuestro trabajo. Estas habilidades son fundamentales para garantizar que tus Expert Advisors (EAs) e indicadores funcionen correctamente y sean fáciles de mantener.


Los errores en MQL5 pueden ser sintácticos, lógicos o relacionados con el entorno de ejecución. A continuación, exploraremos los tipos más comunes de errores y cómo abordarlos.

Son errores causados por violaciones de las reglas del lenguaje MQL5. Por ejemplo:

Solución: El compilador detectará este error y mostrará un mensaje como:

Corrige el error asegurándote de cerrar correctamente los paréntesis.

Son errores que no impiden la ejecución del programa pero producen resultados incorrectos. Por ejemplo:

Solución: Usa herramientas de depuración (ver sección 17.2) para identificar que el bucle excede el tamaño del array. Corrígelo ajustando el límite del bucle:

Son errores que ocurren durante la ejecución del EA, como divisiones por cero o llamadas a funciones con parámetros incorrectos. Por ejemplo:

Solución: Agrega validaciones para evitar casos excepcionales:


El MetaEditor incluye un potente depurador que permite ejecutar tu código paso a paso, inspeccionar variables y detectar errores.

Pasos para Usar el Depurador

  1. Configuración del Depurador:
    • Abre tu proyecto en MetaEditor.
    • Haz clic en Depurar > Iniciar Depuración o presiona F5.
  2. Puntos de Interrupción:
    • Coloca puntos de interrupción haciendo clic en el margen izquierdo de una línea de código o presionando F9.
    • El programa se detendrá en ese punto, permitiéndote inspeccionar variables y flujo de ejecución.
  3. Inspección de Variables:
    • Durante la depuración, usa la ventana Inspector de Variables para ver los valores actuales de las variables.
  4. Ejecución Paso a Paso:
    • Usa F10 para avanzar línea por línea sin entrar en funciones.
    • Usa F11 para entrar en funciones y analizar su comportamiento interno.

Ejemplo Práctico: Depuración de un EA

Supongamos que tienes un EA que calcula el promedio móvil simple (SMA) y abre posiciones basadas en cruces de medias móviles.

Proceso de Depuración:

  1. Coloca un punto de interrupción en la línea donde se calcula fastMA.
  2. Ejecuta el EA en modo de depuración (F5).
  3. Inspecciona los valores de fastMA y slowMA para verificar que sean correctos.
  4. Si hay un error, revisa los cálculos y corrige el código.

La documentación es esencial para facilitar el mantenimiento y la colaboración. Aquí te mostramos cómo documentar tu código de manera efectiva.

Comentarios en el Código

Usa comentarios claros y concisos para explicar el propósito de cada función y bloque de código.

Documentación Externa

Crea un archivo README o un documento aparte que explique:

  • Propósito del EA o indicador.
  • Parámetros de entrada y su significado.
  • Ejemplos de uso.
  • Limitaciones y casos especiales.

Herramientas de Documentación

Usa herramientas como Doxygen para generar documentación automáticamente a partir de comentarios en el código.


Interactividad: Ejercicios Prácticos

Ver solución:

Explicación del Código

  1. Error Original:
    • El problema principal está en la condición del bucle for:
    • La función ArraySize(numbers) devuelve el tamaño del array (3 en este caso).
    • Al usar <=, el bucle intenta acceder al índice 3, que está fuera de los límites del array (los índices válidos son 0, 1 y 2).
  1. Corrección Aplicada:
    • Se cambió la condición del bucle a <:
    • Esto asegura que el bucle itere solo sobre los índices válidos del array (0, 1 y 2).
  1. Resultado Esperado:
    • Con la corrección, el programa imprimirá correctamente los elementos del array:
  1. Mejoras Adicionales:
    • Se añadió un mensaje más descriptivo en la función Print() para facilitar la comprensión de la salida.

Interpretación del Cambio

Este ejercicio ilustra un error común en la programación: el acceso a índices fuera de los límites de un array. Este tipo de error puede causar fallos en tiempo de ejecución o comportamientos inesperados. La corrección asegura que el bucle respete los límites del array, evitando problemas relacionados con índices inválidos.


Casos Prácticos

Este ejemplo puede ser utilizado para:

  • Enseñar a identificar errores de índice en arrays.
  • Mostrar la importancia de validar los límites de los bucles.
  • Practicar técnicas básicas de depuración y corrección de errores en MQL5.

¡Espero que este ejemplo te ayude a entender cómo identificar y corregir errores comunes en MQL5!


Ver solución:

A continuación, te proporciono una solución detallada para identificar y corregir un error en un EA que no abre posiciones correctamente utilizando el depurador de MetaEditor . Este ejercicio incluye un ejemplo práctico con código, explicaciones paso a paso y cómo usar las herramientas de depuración.


Código del EA (Versión con Error)

Supongamos que tienes el siguiente EA que intenta abrir posiciones de compra o venta basadas en cruces de medias móviles:


Problema Detectado

El EA parece no abrir posiciones correctamente, aunque los cruces de medias móviles ocurren. Necesitamos identificar qué está fallando.


Pasos para Usar el Depurador de MetaEditor

  1. Configuración del Depurador:
    • Abre el proyecto en MetaEditor.
    • Asegúrate de que el EA esté vinculado a un gráfico en MetaTrader 5 con datos históricos cargados.
    • Haz clic en Depurar > Iniciar Depuración o presiona F5.
  2. Colocación de Puntos de Interrupción:
    • Coloca puntos de interrupción en las siguientes líneas:
      • Donde se calculan las medias móviles (fastMA y slowMA).
      • Dentro de las funciones OpenBuyPosition() y OpenSellPosition().
  3. Ejecución Paso a Paso:
    • Ejecuta el EA en modo de depuración.
    • Observa los valores de fastMA y slowMA en la ventana Inspector de Variables .
    • Verifica si la condición fastMA > slowMA o fastMA < slowMA se cumple correctamente.
  4. Inspección de Errores:
    • Si las posiciones no se abren, revisa el valor devuelto por OrderSend() y el código de error (GetLastError()).
    • Comprueba si los parámetros de OrderSend() son válidos:
      • El precio de apertura (Ask o Bid) debe ser correcto.
      • Los niveles de stop loss y take profit deben estar dentro de los límites permitidos por el bróker.

Identificación del Error

Al usar el depurador, podrías descubrir uno o varios problemas comunes:

  1. Errores en OrderSend():
    • Si OrderSend() devuelve false, verifica el código de error usando GetLastError().
    • Un error común es ERR_INVALID_STOPS (código 130), que ocurre cuando los niveles de stop loss o take profit están demasiado cerca del precio de mercado.
  2. Precios Incorrectos:
    • Asegúrate de que Ask y Bid sean los precios correctos para abrir posiciones.
    • Para operaciones de compra, usa Ask. Para operaciones de venta, usa Bid.
  3. Normalización de Precios:
    • Los precios deben normalizarse según los dígitos del símbolo (_Digits). Si no se hace correctamente, puede causar errores.

Código Corregido

Aquí está la versión corregida del EA:


Explicación de las Correcciones

  1. Uso Correcto de Ask y Bid:
    • Para operaciones de compra, los niveles de stop loss y take profit deben calcularse a partir de Ask.
    • Para operaciones de venta, los niveles deben calcularse a partir de Bid.
  2. Normalización de Precios:
    • Se asegura que todos los precios estén normalizados usando NormalizeDouble() con _Digits.
  3. Verificación de Errores:
    • Si OrderSend() falla, se imprime el código de error para facilitar la depuración.

Resultado Esperado

Con las correcciones aplicadas, el EA ahora debería abrir posiciones correctamente cuando se cumplan las condiciones de cruce de medias móviles. La salida en la ventana de resultados será similar a:

Si aún hay errores, el código imprimirá el mensaje correspondiente con el código de error para su análisis.


Interpretación del Cambio

Este ejercicio muestra cómo usar el depurador de MetaEditor para identificar y corregir errores en un EA. Las principales lecciones aprendidas son:

  • La importancia de verificar los valores de variables clave durante la ejecución.
  • Cómo interpretar mensajes de error y ajustar el código en consecuencia.
  • La necesidad de seguir las reglas del bróker (como la distancia mínima para stop loss y take profit).

Casos Prácticos

Este ejemplo puede ser utilizado para:

  • Practicar el uso del depurador de MetaEditor.
  • Identificar errores comunes en funciones como OrderSend().
  • Mejorar la comprensión de cómo funcionan las operaciones de trading en MQL5.

¡Espero que esta solución te ayude a dominar el uso del depurador y mejorar tus habilidades en MQL5!

Ver solución:

A continuación, te proporciono un ejemplo completo de cómo documentar un script que obtiene datos de una API externa. La documentación incluye una explicación del propósito del script, sus parámetros, funcionamiento y ejemplos de uso. Además, he añadido comentarios claros en el código para facilitar su comprensión.


Documentación del Script

Propósito

Este script está diseñado para interactuar con una API externa y obtener datos relevantes para el trading o el análisis económico. Los datos pueden incluir precios alternativos, noticias, calendarios económicos u otros indicadores financieros. La información obtenida se imprime en la ventana de resultados para su revisión.


Parámetros de Entrada

  1. ApiKey :
    • Descripción : Clave de autenticación requerida por la API para autorizar las solicitudes.
    • Tipo : string.
    • Ejemplo : "YOUR_API_KEY".
    • Nota : Reemplaza este valor con tu clave real proporcionada por el proveedor de la API.
  2. Url :
    • Descripción : Dirección de la API que proporciona los datos.
    • Tipo : string.
    • Ejemplo : "https://api.example.com/data".
    • Nota : Asegúrate de que la URL sea válida y esté configurada para devolver los datos deseados.
  3. Timeout :
    • Descripción : Tiempo máximo de espera para recibir una respuesta de la API (en milisegundos).
    • Tipo : int.
    • Valor predeterminado : 5000 (5 segundos).
    • Nota : Si la API tarda más tiempo en responder, la solicitud fallará.

Funcionamiento

  1. Configuración de la Solicitud HTTP :
    • El script utiliza la función WebRequest() para realizar una solicitud GET a la API.
    • Las cabeceras HTTP incluyen la clave de autenticación (Authorization: Bearer <ApiKey>).
  2. Manejo de la Respuesta :
    • La respuesta de la API se almacena en un buffer (responseBuffer) y luego se convierte a una cadena legible usando CharArrayToString().
    • Si la solicitud falla, se imprime un mensaje de error con el código correspondiente.
  3. Impresión de Resultados :
    • La respuesta de la API se imprime en la ventana de resultados para su análisis.
    • Dependiendo del formato de la respuesta (por ejemplo, JSON), puedes procesarla adicionalmente para extraer información específica.

Ejemplo de Uso

Supongamos que deseas obtener datos de un calendario económico desde una API externa. Configura los parámetros del script de la siguiente manera:

  • ApiKey : "12345abcdef67890".
  • Url : "https://api.economic-calendar.com/events?date=today".
  • Timeout : 5000.

Al ejecutar el script, obtendrás una salida similar a esta en la ventana de resultados:


Casos Prácticos

Este script puede ser utilizado para:

  1. Obtener Precios Alternativos :
    • Compara los precios de tu bróker con fuentes externas para detectar discrepancias.
  2. Integrar Noticias Económicas :
    • Usa la API para recibir alertas sobre eventos importantes que puedan afectar al mercado.
  3. Acceder a Calendarios Económicos :
    • Recibe datos sobre indicadores económicos clave y ajusta tus estrategias en consecuencia.

Mejoras Futuras

  1. Procesamiento de Respuestas JSON :
    • Implementa funciones para analizar respuestas JSON y extraer valores específicos (por ejemplo, títulos de eventos o precios).
  2. Manejo de Errores Avanzado :
    • Agrega validaciones adicionales para manejar errores como conexiones fallidas o respuestas vacías.
  3. Automatización :
    • Integra el script en un EA para tomar decisiones basadas en los datos obtenidos.

Interpretación del Cambio

La documentación de un script es esencial para garantizar que otros desarrolladores (o tú mismo en el futuro) puedan entender y utilizar el código correctamente. En este caso, hemos explicado claramente el propósito del script, sus parámetros, funcionamiento y ejemplos de uso. Esto facilita su mantenimiento y extensión.


Conclusión

Este ejercicio muestra cómo documentar un script MQL5 de manera profesional. Al seguir este enfoque, puedes:

  • Facilitar la colaboración con otros traders o desarrolladores.
  • Mejorar la calidad y fiabilidad de tus proyectos.
  • Ahorrar tiempo al mantener o actualizar el código en el futuro.

¡Espero que esta solución te ayude a mejorar tus habilidades en la documentación de scripts en MQL5!


En el próximo capítulo, exploraremos cómo optimizar el rendimiento de tus EAs para maximizar su eficiencia.

¡Sigue practicando y perfeccionando tus habilidades en MQL5!

 
 


Deja una respuesta