Debugging: Eliminar errores en MQL

A priori la única forma de depurar un programa es utilizar el sistema de backtesting de MetaTrader e ir deteniendo el código con el botón de pausa, es un método básico y bastante rudimentario. Pero existe una forma de meter BreakPoints en el código MQL, los BreakPoints detienen la ejecución del programa exactamente en la línea de código elegida para que puedas observar el estado. La idea original aparece en este artículo, nosotros explicaremos aquí la versión propia que utilizamos diariamente.
Vamos a añadir a un EA cualquiera el sistema de debugging. Primero introduciremos esta función:
// DEBUG void BreakPoint(bool Condicion = true) { if(DEBUG) { if(!IsVisualMode() || !Condicion) return(0); keybd_event(19,0,0,0); Sleep(100); keybd_event(19,0,2,0); } }
Y añadimos en la cabecera del programa un par de líneas:
#include <WinUser32.mqh> bool DEBUG = true;
La primera añade una librería que necesita nuestra función y la segunda es el interruptor global del sistema de debugging, si ponemos la variable DEBUG a false nuestro EA no se detendrá nunca cuando hagamos el backtesting.
Ahora sólo nos queda colocar la linea
BreakPoint();
en cualquier parte del código para que este se detenga al llegar. Fijándonos en el único parámetro que recibe la función BreakPoint() vemos que podemos llamarla también de la forma
BreakPoint(false);
y así la anulamos. ¿Para qué sirve esto? Pues es un interruptor que desactiva en concreto ese BreakPoint. Así que resumiendo tenemos dos interruptores: uno general que desactiva todo el sistema de depurado y luego uno que desactiva cada BreakPoint en particular. De esta forma podríamos añadir BreakPoints al momento en el que se abre una operación de compra, otro al momento en el que se abre una venta y otro al cierre de cualquier operación y activar cualquiera de los tres, su combinaciones, desactivarlos todos, etc.
En el Expert Advisor basado en MACD y RSI del que hablamos el otro día he colocado el sistema de debugging para que podáis comprobar cómo funciona utilizando el backtesting. Este EA se detiene en backtesting cada vez que abre una operación de compra o de venta.
El código para descargar: macdrsi_debug




