Una rápida inmersión en MQL5

MetaQuotes | 11 diciembre, 2013

¿Por qué necesita MQL5?

Puede haber muchas razones para decidirse a estudiar el lenguaje de programación de estrategias de trading MQL5 y ¡damos la bienvenida a su decisión! Los usuarios avanzados pueden acceder fácilmente a la documentación del lenguaje, así como a los distintos artículos y servicios que aquí se encuentran disponibles. Pero si acaba de descubrir el terminal de cliente de Meta Trader 5, puede que muchas cosas le parezcan poco habituales y confusas en un primer momento.

Entonces ¿cuáles son los beneficios que proporciona conocer MQL5? Quizás haya decidido estudiar un lenguaje de POO (programación orientada a objeto). Tras estudiar MQL5 podrá dominar fácilmente otros lenguajes de alto nivel como C++, C#, Java, etc. Por supuesto, eso no significa que todos ellos sean similares, aunque sus fundamentos son muy parecidos.

O puede que ya conozca alguno de esos lenguajes y haya pensado desarrollar su propio robot de trading o sistema de información analítica para operar en los mercados financieros. En este caso podrá dominar fácilmente el lenguaje especializado MQL5 creado precisamente para dicho propósito.

O quizás ¿conoce ya MQL4, utilizado ampliamente para realizar robots de trading e indicadores para la popular plataforma de trading Meta Trader 4? Entonces solo tendrá que hacer un pequeño esfuerzo para descubrir todo el poder del nuevo lenguaje MQL5 y todos los beneficios del nuevo entorno de desarrollo de MetaEditor 5.

Puede haber muchas razones para estudiar MQL5, y queremos darle algunos consejos sobre por dónde comenzar y a qué prestar atención. Así que, empecemos.

Una rápida inmersión en MQL5

Características y posibilidades del lenguaje

MetaQuotes Language 5 (MQL5) ha sido desarrollado por MetaQuotes Software Corp. a partir de su extensa experiencia en la creación de plataformas de trading online para varias generaciones. A continuación se describen las principales ventajas del lenguaje.

Para los iniciados en la programación

Si no tiene experiencia programando en lenguajes de alto nivel, puede usar cualquier manual de C++ como ejemplo al estudiar los fundamentos del lenguaje MQL5 (sintaxis, tipos de datos, variables, operadores, funciones, POO, etc.). Los desarrolladores de MQL5 han procurado conseguir la máxima compatibilidad de sus características con las del popular lenguaje C++.

La experiencia a mostrado que es posible aprender MQL5 desde cero en un par de meses, mientras que con menos de un año algunos usuarios pueden llegar a descubrir todas sus posibilidades. Vea oportunidades ilimitadas con Meta Trader 5 y MQL5 y quizás le inspire para crear algo realmente genial.

Para usuarios de MQL4

En un principio puede encontrar algo incómodo el nuevo enfoque para crear indicadores. Pueden sorprenderle un montón de nuevas funciones para la gestión de eventos, mientras que la sintaxis similar a la de C y los nuevos tipos de datos pueden parecerle, en principio, algo inusuales.

Sin embargo, al poco apreciará todas las ventajas que presenta MQL5 frente a MQL4. Y ¿cómo prefiere las innumerables posibilidades de trabajar con diagramas y objetos gráficos y la capacidad para dibujar cualquier imagen como si lo hiciera en un lienzo? Será capaz de probar todo esto cuando se familiarice con MQL5.

Para programadores profesionales

Si escribe código en cualquiera de los lenguajes de hoy en día, le será muy fácil dominar rápidamente MQL5. Ya conoce la POO y el modelo de evento. Ahora solo tiene que aprender las siguientes funciones desarrolladas específicamente para el trading algorítmico.

Hay también algunas diferencias en la sintaxis del lenguaje que fueron implementadas por razones de seguridad en la escritura del código y de optimización del tiempo de operación de la aplicación.

Si no ha realizado operaciones de trading antes, pueden surgirle algunas preguntas sobre la terminología del trading y el probador de estrategias al escribir su robot de trading. La sección de artículos contiene publicaciones útiles que le ayudarán con ello, entre las que se incluyen las siguientes.

Por tanto, el lenguaje MQL5 no presenta mayores problemas para un programador profesional. Lo más importante es familiarizarse con el trading y sus conceptos.


Instalación del terminal de Meta Trader 5

El instalador del terminal de Meta Trader 5 puede ser descargado desde el sitio oficial a través del vínculo https://download.mql5.com/cdn/web/metaquotes.software.corp/mt5/mt5setup.exe La instalación del terminal de Meta Trader 5 es muy fácil. Todo se hace en pocos clics. Sin embargo, le recomendamos instalar el terminal en cualquier dispositivo excepto en el que tenga instalado el sistema operativo Windows. La razón es que Microsoft ha implementado el nuevo sistema para el control de las acciones del usuario a partir de Windows Vista, UAC.

De esta forma, si no tiene experiencia en la administración de sistemas o no le gusta trabajar navegando a través de muchas carpetas ocultas, especifique la instalación del terminal en un lugar fuera de la carpeta "Archivos de Programa" para permitir que el terminal de datos se almacene en el mismo directorio que el terminal de Meta Trader 5. Por ejemplo, instale el terminal en la unidad D:\ si el sistema operativo está instalado en la unidad C:\

Puede encontrar más información sobre las diferencias en la forma de operar de Meta Trader 5 en función de la ruta de instalación en comenzar → terminal de inicio, en la guía de usuario.


Indicadores, scripts y asesores expertos

El lenguaje MQL5 permite utilizar tres tipos de programas. Cada uno de ellos se adapta mejor a la realización de cada tipo concreto de tareas, tales como las siguientes.

Ejemplos del indicador de Meta Trader 5

Lo mejor sería comenzar el aprendizaje de los fundamentos de MQL5 escribiendo scripts, usando ejemplos de la documentación de MQL5 o de la base de código. De esta forma, puede empezar a trabajar con funciones objeto y experimentar con transacciones en una cuenta de prueba.

La siguiente etapa es escribir sus propios indicadores personalizados y analizar ejemplos de código y artículos . Cuando domine los indicadores estará preparado para aprender funciones de gestión de eventos.

El objetivo final es la creación de asesores expertos sencillos y usarlos con los datos históricos mediante el probador de estrategias en el terminal de Meta Trader 5. Hay muchos artículos en expertos, probador y sistemas de trading dedicados a esta materia.

Y, por supuesto, debemos mencionar la característica más apasionante en relación a la programación con MQL5: el desarrollo de módulos personalizados con asesores expertos a través del MQL5 Wizard. Puede encontrar muchos artículos sobre esta materia y la base de código contiene multitud de módulos del MQL5 Wizard ya diseñados.


Modelo de evento

Un programa MQL5 solo funciona cuando ocurren algunos eventos. Estos pueden ser la descarga e inicialización de un programa MQL5, la llegada de un nuevo tick (cambio del precio del símbolo), cambio de las propiedades del gráfico, cambio de un símbolo o período de tiempo en un gráfico, activación de una orden pendiente y demás eventos.

Por tanto, el modelo de evento nos permite escribir programas interactivos de forma simple. Son muchas las posibilidades que nos ofrece para escribir un panel gráfico personalizado y crear la interfaz de usuario adecuada a nuestras necesidades. Las funciones incorporadas para el trabajo con gráficos permiten la creación de aplicaciones con múltiples capacidades y mejorado diseño.

Un ejemplo simple de la gestión de eventos en un programa MQL5


La capacidad para generar eventos personalizados usando la función EventChartCustom() para cualquier gráfico activo en Meta Trader 5 permite la creación de sistemas interactivos complejos. La intercepción y gestión de eventos es realizada por la función OnChartEvent(). Las características mencionadas se muestran en el jugador de trading a partir del historial de transacciones y la función de ejemplo EventChartCustom().


Depurando una guía de usuario

El terminal de Meta Trader 5 y MetaEditor 5 contiene guías de usuario con amplia información que pueden consultarse presionando la tecla F1. Toda la documentación se actualiza automáticamente mediante LiveUpdate. Además, esta guía de usuario está disponible online en varios idiomas en el sitio oficial de la plataforma de trading de Meta Trader 5.

La fuente de información más importante para aprender es la documentación de MQL5, disponible no solo online en https://www.mql5.com/es/docs, sino también mediante la descarga en formato CHM y PDF en múltiples idiomas.

El terminal de cliente y MetaEditor 5 se encuentran muy integrados el uno con el otro. Siempre puede cambiar a otra aplicación presionando la tecla F4. Esta es una característica muy aconsejable cuando se edita el código, especialmente cuando se trabaja con varios terminales simultáneamente.

Cualquier programa MQL5 puede ser depurado en el terminal directamente desde el editor presionando F5. El gráfico se abrirá automáticamente y su programa (un script, un indicador o un asesor experto) se iniciará en él. Cuando se depuran scripts puede suponer también que son cargados por sí mismos una vez que termina la operación OnStart(). Por tanto, el proceso de depuración se completa automáticamente en esa etapa y se cierra el gráfico de "depurado" sin guardar todos los objetos gráficos realizados por el script. Por tanto, ponga un punto de interrupción o sleep() con un valor muy grande antes del operador return() al final de un script.

El modo de depuración es necesario tanto para detectar errores en su programa como para estudiar y aprender MQL5. Además de usar puntos de interrupción en su código, hay una función especial, DebugBreak(), que funciona solo si un programa está en modo de depuración.

Y, por supuesto, debemos mencionar el poderoso motor de búsqueda integrado en Meta Trader 5, que permite la búsqueda de cualquier dato necesario, no solo en un archivo fuente o carpeta, sino también en el sitio web de la comunidad MQL5 (artículos, foro y base de código).

Estableciendo los parámetros de búsqueda en MetaEditor 5

Los resultados obtenidos se pueden filtrar por categorías según se requiera. Por tanto, el entorno de desarrollo dispone, no solo de la guía de usuario incorporada en el editor y en MQL5, sino también de la capacidad para encontrar material de utilidad en el sitio web mql5.com.


Perfilado del código

El entorno de desarrollo de MetaEditor 5 proporciona a los programadores una gran cantidad de características útiles para simplificar la escritura del código y la depuración. ¿Qué más necesitan los programadores a parte de la depuración del código? El perfilado del código, por supuesto. El perfilado consiste en recopilar todas las características de la aplicación, como el tiempo de ejecución de cada fragmento individual (funciones, líneas), de forma apropiada.

El perfilado le permite detectar rápidamente las partes que consumen más tiempo en la aplicación. Puede evaluar los cambios implementados en términos de velocidad de operación para elegir los algoritmos más eficientes. Los programadores profesionales conocen bien las posibilidades que ofrece esta característica, mientras que los más inexpertos pueden examinar sus programas desde una nueva perspectiva. 

Perfilando el código en Meta Trader 5

La captura de pantalla anterior muestra el perfilado del código que aparece en el foro (https://www.mql5.com/en/forum/7134). Pruebe a realizar un perfilado del código descargándose el código desde el hilo del foro citado.


Almacenamiento en MQL5: almacene y gestione su trabajo de forma eficiente

Otra interesante característica de la programación en MQL5 es su almacenamiento de códigos fuente de MQL5 personal. Gracias a él, tendrá siempre acceso directo a sus archivos a través de MetaEditor 5 desde cualquier parte del mundo. Puede almacenar no solo programas en MQL5, sino también archivos de C++ (cpp, h), así como archivos BMP y WAV.

Añadiendo archivos al almacenamiento de MQL5

Puede añadir y extraer su código, deshacer cambios y, en definitiva, cualquier operación que los modernos sistemas SVN puedan ofrecer. Además de trabajar con el almacenamiento de MQL5 directamente desde MetaEditor 5, puede usar cualquier cliente externo que sea compatible con Subversion 1.7, como por ejemplo Tortoise SVN.


La vida de los indicadores, diagramas y objetos gráficos

Todas las experiencias anteriores han sido tenidas en cuenta en el desarrollo de Meta Trader 5. Por tanto, algunas características pueden parecer poco habituales a primera vista. Por ejemplo, para el cálculo del indicador —un indicador representa una parte del cálculo, se usa el modelo eficiente. Muchos asesores expertos, scripts y otros indicadores pueden usar los resultados de otro indicador. Esto también quiere decir que si un indicador se utiliza en varios gráficos con el mismo símbolo y período de tiempo, el cálculo se realizará en una sola entidad de cálculo. Este enfoque ahorra tanto tiempo como memoria.

Además, los valores de un indicador pueden calcularse usando los valores de otro indicador, o bien, utilizando los valores de las matrices en MQL5. Esto permite realizar complejos cálculos de indicadores de forma unificada y simple. Tal y como se ha mencionado anteriormente, las posibilidades de la representación gráfica de los valores de los indicadores en el lenguaje MQL5 son realmente enormes.

Todas las operaciones relacionadas con la gestión de las propiedades de los diagramas y objetos gráficos son asíncronas. Esto evita que los usuarios pierdan tiempo mientras esperan que el sistema del terminal de vídeo muestre los cambios en los colores, tamaños y demás. Si quiere obtener resultados inmediatos al ejecutar las funciones de objeto u operaciones con gráficos, llame a ChartRedraw() para forzar la representación del gráfico. De lo contrario, el gráfico volverá a ser trazado automáticamente por el terminal en la primera oportunidad que tenga.


Operaciones de trading

Las operaciones de trading en MQL5 se realizan enviando solicitudes mediante la función OrderSend(). Una solicitud es un tipo de estructura MqlTradeRequest con los valores necesarios según las necesidades de la transacción.

Puede comprar o vender, cursar órdenes pendientes para comprar/vender bajo determinadas condiciones o eliminar una orden pendiente. Si OrderSend() se ha ejecutado con éxito, el resultado de la ejecución de la solicitud se ajustará a la estructura MqlTradeResult.

Inicialmente, no es necesario verificar la exactitud de la estructura MqlTradeResult al estudiar MQL5. La librería estándar tiene una clase especial, CTrade, para realizar transacciones. Esta clase ha sido diseñada para simplificar el trabajo de los programadores de MQL5.

Trabajando con órdenes

OrderOpen

Cursa la orden pendiente con los parámetros establecidos.

OrderModify

Modifica los parámetros de la orden pendiente.

OrderDelete

Borra la orden pendiente.

Trabajando con posiciones

PositionOpen

Abre la posición con los parámetros establecidos.

PositionModify

Modifica los parámetros de la posición.

PositionClose

Cierra la posición.

Métodos adicionales

Buy

Abre una posición larga con los parámetros especificados.

Sell

Abre una posición corta con los parámetros especificados.

BuyLimit

Cursa la orden pendiente de tipo Buy Limit (compra a un precio más bajo que el precio actual de mercado) con los parámetros especificados.

BuyStop

Cursa la orden pendiente de tipo Buy Stop (compra a un precio más alto que el precio actual de mercado) con los parámetros especificados.

SellLimit

Cursa la orden pendiente de tipo Sell Limit (vende a un precio más alto que el precio actual de mercado) con los parámetros especificados.

SellStop

Cursa la orden pendiente de tipo Buy Stop (vende a un precio más bajo que el precio actual de mercado) con los parámetros especificados.


Puede verse un ejemplo de la aplicación de la clase CTrade en el asesor experto del ejercicio de ejemplo de MACD en la versión estándar del terminal. El asesor experto se encuentra en <terminal_directory>\MQL5\Experts\Examples\MACD. Pueden consultarse otras clases muy útiles para el trabajo con órdenes, posiciones, contratos y demás en la sección clases de transacciones junto a CTrade.


Probador de estrategias de Meta Trader 5

Meta Trader 5 no solo permite operar en varios mercados financieros usando robots de trading, sino que también es capaz de verificar su rentabilidad y estabilidad sobre diferentes partes del historial. Para hacer esto, se ha implementado el probador de estrategias en el terminal.

Debe tener en cuenta que el terminal actúa como un gestor de ejecución, distribuyendo las tareas a los servicios individuales llamados agentes cuando se prueba/optimiza un asesor experto. De esta forma, las pruebas se realizan en forma de sesiones de comunicación entre el terminal y los agentes. El probador envía tareas a los agentes y obtiene a cambio los resultados de la ejecución.

Optimizando el sistema de trading en el probador del terminal de Meta Trader 5

Los mensajes del probador y los agentes se ubican en el diario. A la hora de hacer pruebas, los agentes pueden enviar un gran número de mensajes generados en un asesor experto por las funciones Print() y Alert(). Por tanto, no todos los mensajes de los agentes se muestran en el diario, ya que algunos pueden ser pasados por alto. Esto se hace para evitar la ralentización de la prueba por la necesidad de mostrar todos los mensajes en pantalla.

De esta forma, el diario es almacenado separadamente en <terminal_folder>\tester\logs\, mientras que los registros detallados con todos los mensajes se guardan en las carpetas adecuadas de los agentes del probador. Tenga esto en cuenta cuando busque registros con información sobre el análisis de una prueba. Por suerte, el probador tiene un visor de registros especial donde puede encontrar los registros correspondientes a un intervalo definido.

Aparte de las pruebas, también se encuentra disponible el modo de optimización de los parámetros de entrada de un asesor experto, en el que el probador puede usar docenas, cientos e incluso miles de agentes de prueba (por ejemplo, de la red en la nube de MQL5). En este caso, el envío y representación en pantalla de las funciones Print() y Alert() se suprime por completo para no incrementar el volumen de tráfico de salida en la dirección del probador y también para ahorrar espacio en el disco duro del ordenador donde los agentes de prueba se almacenan. La única excepción es la que realiza la función OnInit(). Esta función puede usar Print() para enviar el mensaje que puede aclarar la razón de una inicialización fallida o la negativa a realizar una prueba usando la función ExpertRemove() por razones técnicas.

Puede encontrar más información interesante en probador. Creemos que le serán de gran valor las posibilidades del probador de estrategias del terminal de cliente de Meta Trader 5.


Superando los límites

Cualquier persona podrá descubrir nuevas oportunidades una vez haya estudiado el lenguaje MQL5. Esto incluye una mejor comprensión de los lenguajes de programación, nuevos conocimientos sobre trading o familiarizarse con las nuevas tecnologías. El nuevo terminal de Meta Trader 5 incluye tantas características nuevas que no creo que seamos capaces de encontrar un solo programador que haya conseguido utilizar todo su potencial hasta ahora.

En este artículo no hemos mencionado aún muchas de las apasionantes características que posee, como el trabajo con librerías DLL, el inicio con un clic en el terminal y mucho más. Si no le asusta leer la larga lista de características del terminal, le invitamos a hacerlo en Meta Trader 5: ¡Mas de lo que pueda imaginar!

Le deseamos todo lo mejor y ¡esperamos verle entre los miembros habituales de la comunidad MQL5!