MQL es un lenguaje de script muy simple. Depuración MQL, desafortunadamente, no es fácil en absoluto. El compilador MetaEditor que MetaQuotes suministra simplemente no contiene las herramientas sofisticadas que la mayoría de los programadores están acostumbrados a usar.
Depurar problemas MQL
Otros IDE Visual Studio y sofisticados (entornos de desarrollo integrados) contener una serie de características que hacen que sea fácil para depurar código, mientras que el programador lo escribe. El mayor ejemplo de esto son puntos de quiebre. Un punto de quiebre es un punto en el código donde el compilador dice a la computadora a cesar la ejecución del programa cuando se llega a una cierta línea de código.
Considere el ejemplo en el que un trailing stop incorrectamente establece la nueva parada. El instinto natural para la mayoría de los programadores sería correr el asesor de expertos en lo visual pruebas de espalda, a continuación, insertar puntos de quiebre en las líneas de código poco después de los cálculos trailing stop. Puntos de quiebre detener el código, permitiendo que el programador to peer dentro de los cerebros del software para ver lo que pensaba en el momento de tomar una decisión. La ventaja clave en Visual Studio es que los valores de todas las variables son claramente visibles. Es posible caminar a través del programa paso a paso. Cada vez que uno de los pasos no sigue las reglas deseadas, el cambio requerido suele ser obvio. MetaQuotes afortunadamente incluye puntos de quiebre en MQL5. No están disponibles en MQL4.
La falta de apoyo IntelliSense completo afecta mi velocidad de programación más que nada. Intellisense detecta el uso de palabras reservadas como OrderSelect() o ObjectGet(). El MetaEditor incluye un intellisense rudimentaria, pero carece de los finos detalles que la hacen muy conveniente en Visual Studio.
Estoy acostumbrado a la programación en C # en el que puedo escribir las primeras letras de una variable o clase, entonces el IDE rellena el resto. Cuando escribo “Mi” en C # y pulsar la barra espaciadora, Sé que aparecerá la opción de mensaje (suponiendo que declaré el espacio de nombre adecuado). El MetaEditor ofrece una lista de candidatos para las palabras reservadas. El programador debe a continuación, seleccione la opción con el ratón o pulse Intro.
Sé que parece trivial para exigir pulsando Entrar en vez de la barra espaciadora, pero pensar en cuántas veces código resuses las mismas palabras o variables reservados. Las pulsaciones de teclas adicionales realmente se suman a una gran cantidad de movimientos de mecanografía innecesarios. That’s doubly true for a thirty year old that already wears a wrist brace for carpal tunnel pain.
The MetaEditor’s biggest weakness is that it does not detect variable names. A menudo escribimos asesores expertos que contienen varios miles de líneas de código. Seguimiento de los nombres de decenas de variables plantea sus propios retos. Cuando los tipos de codificador en el mismo conjunto de nombres de variable repetidamente, sería bueno simplemente escribir las tres primeras letras y seguir adelante. Copia y pega podría proporcionar una alternativa decente. El problema es que las variables generalmente agrupar. No se puede mantener 5 diferentes elementos de copiar y pegar fácilmente disponibles.
El MetaEditor permite funciones para volver tipos válidos. Las funciones declaradas como doble puede devolver cadenas, enteros o nada en absoluto. El compilador MQL4 no hace un seguimiento de si éstas son o no válidos. Se deja en manos del programador para descubrir el tipo no válido durante la prueba en tiempo real. Este descuido es una pesadilla para el programador involuntario que devuelve erróneamente el tipo incorrecto.
Esto es doblemente cierto cuando una doble función es devuelto por error a una variable entera. MQL4 no impide doble ilegal a int moldes. Aún peor, el asesor de expertos sigue funcionando con un 0 valor para el número entero en vez de lanzar un mensaje de excepción o error. I cannot count how many hours that I’ve wasted tracking down variables that look perfect, sólo para darse cuenta de que yo declaré el tipo de datos incorrecto. This usually happens when I’m on autopilot, aporrear código. Lo que parece eficaz en el momento por lo general cuesta varias horas de pelo tirando frustración.
Técnicas de depuración MQL
La Programadores MQL el personal de aquí suele recurrir a cualquiera de las siguientes técnicas. Usted puede encontrar que su uso en combinaciones ayuda a mejorar el proceso de depuración aún más.
Error del compilador de depuración
Éste puede ser la más frustrante. El MetaEditor intenta insinuar que línea de código hace que el error de compilación. Digo intentos porque se equivoca más a menudo de lo que lo hace bien. There’s nothing more irritating than looking at a perfectly legitimate line of code that the compiler flags as problematic.
Yo casi siempre recurro a comentando cada vez más grandes secciones de código hasta que desaparezca el error. Empiezo con comentando una sola línea de código. If that doesn’t work, luego comento hacia fuera diez líneas. If that doesn’t work, Podría comentar funciones enteras o secciones de código. Cuando el compilador finalmente se ejecuta correctamente, usted sabe que la última sección del código comentado contiene el error.
Siguiente, que dar marcha atrás. Empieza a hacer sección comentada el infractor más y más pequeño hasta que vuelve a aparecer el error. Ahora, que finalmente han apuntado directamente a la fuente real del problema.
Depuración en tiempo real o en el backtester
Mi método preferido de depuración es comentar la mayor parte de la información correspondiente decisión sobre la pantalla, que se realiza mediante el comentario() función. Entonces ejecuto el backtester visual, viendo cómo los datos se comporta en relación con la información visual.
En la pantalla de comentarios son esencialmente puntos de quiebre improvisadas. Controlar cómo y cuándo aparecerá permite al programador recorrer el código para descubrir el tema. La única diferencia es que los comentarios no fuerza impiden que el código se ejecute. El texto que aparece es muy pequeña. Aparte de eso, I really like that fact that it’s so robust. La función de comentario siempre funciona sin problemas, making it the best friend of a programmer that’s debugging code.
Tomar capturas de pantalla lleva esto al siguiente nivel. Siempre que los clientes hacen preguntas acerca de por qué un asesor experto comportó de una manera determinada, las respuestas más fáciles vienen con capturas de pantalla. Comentando los puntos de quiebre de imitación suelen proporcionar antibalas respuestas – el programador y los clientes pueden ver literalmente lo que pensara la EA en el momento de tomar una decisión. MQL4 ofrece la WindowScreenShot() función para hacer esto.
Los AEs que programemos siempre realizar capturas de pantalla durante acciones críticas, como entrar en un comercio o ajustar una condición de salida. El objetivo es proporcionar un registro visual de todas las decisiones con miras a responder preguntas futuras sobre el comportamiento.
Nuestra plantilla predeterminada incluye una verdadera variables / falso llamados WriteScreenshots. Los operadores controlan si quieren molestarse con esta característica de depuración o no. La única desventaja es que cada acción registrada representar en torno a 50 kb de espacio en disco duro.
Archivos de registro representar a la última opción de depuración. El mayor inconveniente es que son tan feo y difícil de leer. Yo casi siempre prefiero las capturas por este motivo.
No obstante, los archivos de registro tienen su lugar. La principal forma de usarlos es como recogedores de error. Cuando un proceso sale mal debido a un problema con la propia MetaTrader o con una transacción broker, el archivo de registro es el lugar más fácil para atraparlo.
Depuración de archivos MQL es una habilidad que toma un tiempo para aprender. The tools at the programmer’s disposal are much different from those available to higher level languages. Una vez que te acostumbras a trabajar con las herramientas más simples en la MetaEditor y MetaTrader, el proceso de compensación de errores por lo general se hace mucho más fácil.
battlmonstr dice
There’s a library which brings Soporte de C# para MT4.
Soporta depurar tu código de script en Visual Studio, así.