MetaQuotes Language 4 y 5 son herramientas para desarrollar aplicaciones para MetaTrader Client Terminal basadas en las plataformas de la familia MetaTrader de cuarta y quinta generación respectivamente. Estos lenguajes proporcionan a los usuarios herramientas para desarrollar estrategias de trading automatizadas.

En este artículo analizaremos:


He elaborado una guía detallada sobre la programación de MetaTrader, el lenguaje MQL4 vs MQL5. Después de leer este artículo, comprenderá qué es MQL, las diferencias entre las dos últimas versiones de los lenguajes y cómo trabajar con ellos. Aquí encontrará instrucciones detalladas con imágenes sobre cómo escribir un asesor experto. ¡Empecemos!

Qué es MQL4 y MQL5

En muchos aspectos, los lenguajes MQL4 y MQL5 son muy similares. Por ello, hablaremos de las diferencias aparte, mientras tanto vamos a llamarlas a ambas MQL en singular y sin especificar la versión.

MQL es un lenguaje de programación integrado en la plataforma MetaTrader. El entorno de desarrollo que se utiliza para escribir sus propios robots de trading, indicadores u otras aplicaciones en MQL, así como para compilarlos y depurarlos es MetaQuotes Language Editor, el cual se suministra con la instalación de MetaTrader Client Terminal junto con toda la información de ayuda.

LiteFinance: Qué es MQL4 y MQL5

Si ha invertido en algún activo al menos una vez, tal vez simplemente compró dólares para guardarlos en el banco, entonces comprende que invertir requiere un control implacable. Seguramente se ha hecho preguntas como estas más de una vez:

  • ¿Es hora de salir de la transacción mientras el precio está en su punto máximo?
  • ¿Cómo saber si el precio de un activo seguirá subiendo o si el mercado se revertirá?
  • ¿Quizás esta vez se recibió una señal falsa y no hay necesidad de correr riesgos y apresurarse a abrir una posición?

Debe mantenerse al día con el mercado para tomar decisiones de trading oportunas. Es aconsejable hacerlo las 24 horas del día en las sesiones más activas. Cuando se trabaja con varios activos al mismo tiempo, la situación se complica cada vez más.

MQL le permite implementar cualquier estrategia o algoritmo de trading en forma de programa informático. Luego, este programa se inicia y se ejecuta constantemente en una estación de trabajo en MetaTrader Client Terminal. Además, el paquete de entrega incluye una serie de robots de trading, indicadores y scripts del desarrollador de la plataforma en forma de códigos fuente, lo que facilita enormemente el desarrollo del lenguaje y sus técnicas inherentes. Además, MQL se proporciona con información de referencia detallada en línea y fuera de línea. Hay una gran comunidad en torno al idioma.

Supongamos que ha creado un indicador interesante o un algoritmo de trading inteligente que desea utilizar en su trabajo o tal vez desea analizar el mercado utilizando redes neuronales. No hay restricciones. Con MQL, puede implementar cualquier idea en forma de indicador, experto u otra aplicación, compilar, depurar, verificar datos históricos en el probador de estrategias, todo sin involucrar riesgos financieros y usarlo activamente en el trading.

LiteFinance: Qué es MQL4 y MQL5

¡Resumamos! MQL resuelve el problema de escribir utilidades para monitorear el estado de una cuenta de trading, calcular indicadores y niveles, recibir señales de trading y determinar puntos de entrada y salida del mercado. El lenguaje como herramienta permite organizar el intercambio de información de un robot de trading o indicador con un servidor remoto a través del protocolo TCP, incluyendo el cifrado TLS o el protocolo HTTP. Es posible enviar datos a través de FTP, así como notificaciones push al dispositivo del cliente, MetaTrader o al correo electrónico del usuario. Una vez que un programa esté bien escrito y depurado, funcionará hasta que decida realizar cambios o reemplazarlo completamente por otro. Todo lo que necesita es el control total.

Historia de los lenguajes MQL4 y MQL5

MQL surgió como resultado del desarrollo evolutivo de la plataforma. Es una herramienta para la gestión automática de cuentas de trading en MetaTrader. No ahondaré en este punto, así que lo veré superficialmente.

MetaQuotes lanzó MetaQuotes Language junto con la plataforma MetaTrader, que anteriormente era la aplicación FXCharts. MQL creció a la segunda versión junto con la actualización de MetaTrader 3. Aquí, MetaQuotes implementó la API, que se proporcionó a los clientes como una capa adicional entre MetaTrader Client y MetaTrader Server.

El lanzamiento de la cuarta generación de la plataforma fue el 1 de julio del 2005. Junto con él, se lanzó MQL4. Se ha perdido la compatibilidad con la versión anterior del idioma. MetaQuotes también cesó de soportar la API de terminal de cliente, pero expandió las posibilidades del lenguaje en sí y proporcionó formas de integrar bibliotecas dll personalizadas en aplicaciones MQL. La API permaneció disponible solo para los brókeres en los niveles de servidor, administración y gestión.

En junio de 2010, después de numerosos lanzamientos, se lanzó MetaTrader 5. MetaQuotes rediseñó la lógica de negociación, eliminando la mayoría de las restricciones impuestas por la estructura interna de la plataforma. MT5 no tiene mucha popularidad que no compite con la cuarta generación en la actualidad.

En febrero de 2014, MQL4 se actualizó junto con la versión 600 del terminal de cliente MT4. MetaQuotes mejoró el lenguaje, introdujo la mayoría de las características de MQL5 y al mismo tiempo lo aceleró al nivel de un sucesor.

Características de los lenguajes de programación MQL4 y MQL5

MQL se utiliza para crear estrategias de trading automatizadas. El código MQL se interpreta preliminarmente en código C++, que luego se compila en un código ejecutable que funciona dentro del terminal como una biblioteca dinámica incluida. Si trazamos un paralelo con su predecesor, será similar a incluir la biblioteca dll en el código ejecutable del programa principal. Este enfoque contribuye a la facilidad de desarrollo y un umbral bajo para entrar en el campo del trading automatizado. Este idioma es popular entre los traders, a pesar de su estrecha especialización y dependencia del lenguaje de la plataforma.

MetaQuotes se ocupó de sus usuarios y proporcionó a todas sus aplicaciones información de ayuda detallada. La ayuda para la programación en MQL4 y MQL5 se suministran con MetaEditor en varios idiomas en forma de archivos htm. Así que, siempre tiene una guía detallada con ejemplos de código sobre cómo implementar el comportamiento necesario.

Se ha formado una gran comunidad de traders y programadores en torno a MQL. Existen herramientas para facilitar la comunicación entre programadores y traders. Ya se ha formado una capa de aplicaciones listas para simplificar el proceso de negociación. Existe un mercado para el intercambio de aplicaciones de forma gratuita o de pago disponible en https://mql5.com. En la plataforma de trading están: la tienda de aplicaciones, la base de código, los artículos y señales de otros traders. La tienda de aplicaciones ofrece cientos de soluciones de pago y gratuitas, como: indicadores, asesores, scripts y todo tipo de utilidades. Esto es en caso de que sea más fácil adquirir un programa hecho que “reinventar la rueda”.

Si ha decidido seriamente dominar MQL por su cuenta y sumergirse en el mundo de la creación de sus propias aplicaciones, puede utilizar este artículo para conocer los problemas que encuentra un principiante al dar los primeros pasos en este sendero. Es poco probable que un lector avanzado aprenda algo nuevo del material a continuación.

Los desarrolladores brindan soporte de información a la comunidad MQL mediante la publicación regular de tutoriales en forma de artículos sobre diversos temas del mundo del trading. Los autores de los artículos analizan nuevas técnicas de programación, por ejemplo, la creación de redes neuronales, análisis y solución de problemas y limitaciones del lenguaje, análisis y pruebas de estrategias de trading, búsqueda e implementación de nuevos algoritmos.

MQL Wizard ofrece 8 opciones para MQL4 y 10 opciones para MQL5. Aquí están las capturas de pantalla del asistente de archivos para ambas versiones del lenguaje.

LiteFinance: Características de los lenguajes de programación MQL4 y MQL5

LiteFinance: Características de los lenguajes de programación MQL4 y MQL5

Examinaremos los más populares:

  • Robot de trading
  • Indicador
  • Script
  • Incluye biblioteca de archivos .mqh

Después de la compilación, estas aplicaciones en forma de código ejecutable se colocan en el directorio apropiado de MetaTrader Client Terminal (Archivo -> Abrir carpeta de datos): Experts, Indicators, Scripts, etc. Luego, después de la inicialización en el gráfico, se ejecutan en respuesta a los eventos generados por MetaTrader Client Terminal durante el proceso de trabajo. Los eventos son un detonante para el lanzamiento de programas personalizados y permiten realizar un seguimiento de la inicialización y desinicialización, obtener una nueva cotización, un evento personalizado en el gráfico, etc.

Además, ahora es posible crear aplicaciones en Python. En consecuencia, las herramientas de Python están disponibles en la plataforma de operaciones.

En MQL4 Reference se describen los siguientes controladores de eventos.

LiteFinance: Características de los lenguajes de programación MQL4 y MQL5

En MQL5, el número de controladores se ha incrementado en comparación con la generación anterior. Ahora la lista tiene el siguiente aspecto:

LiteFinance: Características de los lenguajes de programación MQL4 y MQL5

Posteriormente se amplió la lista de eventos. Y ahora contiene lo siguiente:

LiteFinance: Características de los lenguajes de programación MQL4 y MQL5

Robot de trading o asesor experto

En la comunidad de traders, también se le conoce como experto. El asesor experto está adjunto al gráfico en MetaTrader Client Terminal y trabaja constantemente mientras la plataforma de operaciones esté en funcionamiento y la conexión al servidor de operaciones esté disponible. Los asesores expertos se utilizan para implementar absolutamente cualquier estrategia de trading, controlar el estado de la cuenta, realizar operaciones bajo ciertas condiciones y administrar objetos gráficos. Cada vez que un robot de trading recibe un nuevo tick para un instrumento, comienza a trabajar abriendo operaciones. El asesor experto también se puede iniciar en respuesta a una serie de otros eventos: OnTimer, OnChartEvent, OnTesterTimer, etc.

Los asesores expertos se utilizan para crear interfaces de usuario. Los robots, así como los indicadores, tienen acceso a objetos gráficos.

A continuación, se muestra el código de un robot de trading simple. Después de cada nuevo tick en el símbolo, en el gráfico en el que trabaja el EA, se verifican las transacciones de mercado. Si ya existe un intercambio en el símbolo, el EA espera a que se cierre. Si no hay operación, se abre una en la dirección opuesta a la operación anterior. Parámetros del asesor: volumen, stop loss y take profit los define el usuario. En el momento de la primera ejecución, se ejecutará la compra de divisa. Tras su cierre la siguiente se abrirá en venta, luego en compra y así sucesivamente. En caso de un intento fallido de abrir una operación, el EA escribe un mensaje de error en el registro y se queda dormido durante 60 segundos, luego se repite el intento. El asesor no comprueba la corrección de los parámetros introducidos por el usuario, por lo que debe seguir con atención su corrección. Problemas potenciales que son inmediatamente visibles:

  • No se verifica en general la posibilidad de trading. Puede ser deshabilitado por el usuario en el terminal o específicamente para este asesor. El servidor de trading también puede tener restricciones en la negociación automatizada.
  • El volumen puede ser mucho menor o mucho mayor, y también puede que no sea adecuado si el servidor tiene un límite en el paso de volumen. Por ejemplo, un usuario ingresa 0.23 lotes y el servidor tiene un cambio mínimo de 0.05 lotes. Como resultado, la operación no se abrirá y la función OrderSend devolverá error.
  • Tampoco se comprueba la precisión de los niveles stop de una operación. Es posible que no se ajusten a los valores mínimos / máximos permitidos o que no se ajusten a los límites establecidos por los niveles de congelación.

El código más simple que se puede usar como plantilla para implementar soluciones a mayor escala.

Este código se compila y se ejecuta en MetaQuotes Language Editor 5 build 2375 31 March 2020.

LiteFinance: Robot de trading o asesor experto

Indicador

El indicador se utiliza para mostrar información sobre los datos de precios convertidos de alguna manera. Todo tipo de osciladores, líneas de tendencia, fractales son todos indicadores. Los indicadores tienen acceso para trabajar con gráficos. Hay 6 en MQL4, mientras que en MQL5 ya son 18. Por ejemplo, Moving Average muestra un valor de precio promediado y / o suavizado para un período de precios en el pasado e indirectamente indica la dirección futura del precio de un instrumento. Funciona en el gráfico constantemente. El indicador se actualiza y se recalcula cada vez que se recibe un tick para el instrumento en el gráfico en el que está funcionando el indicador o cuando se reciben eventos del usuario.

Uno o varios búferes están asociados con cualquier indicador dentro de MetaTrader Client Terminal, en el que se colocan los datos numéricos. MQL4 proporciona 32 búferes para un indicador, mientras que el MQL5 le permite operar 512 búferes.

A continuación, se muestra un ejemplo del código fuente del indicador Bears, proporcionado por los desarrolladores de la plataforma junto con MetaTrader4.

LiteFinance: Indicador

Script

Los desarrolladores utilizan scripts para crear algoritmos que no requieren procesamiento de datos en tiempo real. Por ejemplo, para descargar datos estadísticos o generar información de depuración. Los scripts se ejecutan una vez cuando se adjuntan a cualquier gráfico en el evento OnStart, que es el único que puede procesar el script.

La siguiente imagen muestra el código de secuencia de comandos para cerrar todas las órdenes de mercado en la cuenta. El script procesará todas las órdenes, sin importar el gráfico de símbolos con el que se ejecute. En este caso, se ignoran las órdenes pendientes.

LiteFinance: Script

El resultado de ejecutar este script será la siguiente salida al registro de MetaTrader:

LiteFinance: Script

Se necesitará más esfuerzo para enseñar a este script a procesar órdenes pendientes por separado en MQL4. Primero, creamos property para que el script pueda mostrar una ventana con datos de entrada. Luego, agregamos enum que contenga 3 opciones para cerrar transacciones con un script: solo órdenes de mercado, solo órdenes pendientes o todas las transacciones que están en la cuenta en este momento. Luego agregamos una matriz para almacenar tickets de órdenes pendientes y la completamos en consecuencia en el primer ciclo For. Ahora alta procesar la opción de cerrar las transacciones seleccionadas por el usuario.

Como resultado, obtuvimos un script como este, que no solo cierra todas las operaciones, sino que también tiene en cuenta la elección del usuario.

LiteFinance: Script

Incluyendo la biblioteca mqh

Se utiliza, como su nombre lo indica, para su inclusión en otros tipos de programas para MetaTrader Client Terminal. Un desarrollador experimentado tiene un conjunto de herramientas propias que se pueden reutilizar muchas veces en diversas aplicaciones.

En MetaQuotes Language Editor, solo necesita especificar la ruta al archivo de encabezado incluido en relación con la ubicación del archivo en el que se está realizando la inclusión. Al compilar el programa, MetaEditor encontrará este archivo e incluirá su código en lugar de la directiva #include. Ahora todo el código de la biblioteca se puede utilizar en la aplicación.

Del mismo modo, los programadores de C y C++ reutilizan el código al incluir archivos de encabezado en sus proyectos y vincularlos con archivos binarios.

El siguiente ejemplo presenta la interpretación más simplificada de una matriz dinámica también conocida como aka std::vector de la biblioteca estándar de C++. Este código se compila y funciona con la versión MetaEditor: 5.00 build 2375 31 March 2020.

LiteFinance: Incluyendo la biblioteca mqh

Tipos de datos y sintaxis de los lenguajes MQL4 y MQL5

Los tipos de datos y la sintaxis del lenguaje se heredan de C++. Antes de la compilación, el código MQL se procesa previamente y se interpreta en el código C++ correspondiente, por lo tanto, las construcciones del lenguaje que son válidas en el ancestro probablemente se compilarán y funcionarán en MQL. Un programador familiarizado con C, C++ o C# puede manejar fácilmente la escritura del código MQL.

Tipos de datos

En MQL existen los siguientes tipos de datos fundamentales:

  • Valores booleanos
  • Números de coma flotante de precisión simple y doble
  • Enteros, también de precisión simple y doble, con signo y sin signo
  • Char para almacenar datos de caracteres
  • Enumerados enum, pero la clase enum no es compatible
  • Estructuras, clases y plantillas de clases.

Al mismo tiempo, hay soporte adicional para color, string y datetime como tipos integrados, lo que, por supuesto, simplifica un poco la vida del desarrollador. El trabajo con estos tipos se organiza en estilo C utilizando funciones globales. El comportamiento de una cadena MQL es fundamentalmente diferente de la familia de plantillas sstd::string para C++03, no confundir.

LiteFinance: Tipos de datos

Sintaxis de los lenguajes de MetaQuotes

MQL tiene una sintaxis similar a C++. La semántica ancestro del estándar C++03 se ha transferido a MQL con cambios menores. Actualmente, MQL está con el nivel estándar C++03 en términos de capacidades.

La principal diferencia entre MQL y C++ es la diferente semántica de los punteros. Si en C++ es una dirección virtual en la que se ubican los datos, entonces en MQL es un descriptor, un análogo de un descriptor estándar POSIX, un identificador numérico, una especie de envoltorio sobre un puntero en bruto, mediante el cual existen objetos creados en la memoria dinámica y asociados con este identificador.

El operador “flecha” “->” no es compatible con punteros MQL, la desreferenciación se realiza mediante el operador “punto” “.”. El descriptor, al igual que el puntero, debe eliminarse una vez finalizado el programa. Sin embargo, si olvida destruir el objeto al que hace referencia este identificador, el tiempo de ejecución lo hará por usted cuando se desinicialice el programa.

El lenguaje MQL carece del concepto de variable temporal y movimiento de datos. Pasar variables por referencia y por valor difiere de C++ y se implementa en MQL a su manera. Cualquier objeto complejo o clase personalizada se pasará a la función por referencia, ya sea que use el operador “ampersand” o no.

Hay una serie de restricciones sobre el ancestro. No puede escribir funciones y plantillas con un número variable de argumentos. Pero, lo que es notable es una serie de funciones integradas: iCustom, que analizaremos más adelante en este artículo, printf, StringFormat, PrintFormat toman un número variable de argumentos. ¡Paradoja!

Trabajar con referencias de datos y objetos difiere en algunos aspectos en comparación con C++, pero todos se eliminan fácilmente usando mensajes del compilador. Existen diferencias en las firmas del constructor de copia y del operador de asignación de copia debido a la diferente semántica de pasar variables por referencia. Además, no hay semántica de movimiento para mover variables e instancias de objetos en MQL.

Diferencias entre los lenguajes MQL4 y MQL5

Las diferencias entre la cuarta y quinta generación de lenguajes MQL se deben a las diferencias entre las propias plataformas MetaTrader4 y MetaTrader5. Cabe señalar que desde el lanzamiento de 600 build MT4, solo la quinta versión de MetaQuotes Language Editor se utiliza para escribir y compilar programas en MQL4 y MQL5. En particular, los lenguajes operan de diferentes maneras con las operaciones de trading, ya que la quinta plataforma tiene más modos de negociación y los conceptos de orden, transacción y posición están separados.

Ahora, para enviar solicitudes solo se utiliza la función OrderSend, a diferencia de la cuarta versión, donde se utilizan funciones independientes para establecer una modificación o eliminar una orden.

 MQL4MQL5
Timeframes9 (M1, M5, M15, M30, H1, H4, D, W, MN)21 (M1, M2, M3, M4, M5, M6, M10, M12, M15, M20, M30, H1, H2, H3, H4, H6, H8, H12, D1, W1, MN1)
Estilos de dibujo

6

DRAW_NONE

DRAW_LINE

DRAW_SECTION

DRAW_HISTOGRAM

DRAW_ARROW

DRAW_ZIGZAG

Con build 600, el número se ha vuelto consistente con la quinta versión.

18

DRAW_NONE

DRAW_LINE

DRAW_SECTION

DRAW_HISTOGRAM

DRAW_HISTOGRAM2

DRAW_ARROW

DRAW_ZIGZAG

DRAW_FILLING

DRAW_BARS

DRAW_CANDLES

DRAW_COLOR_LINE

DRAW_COLOR_SECTION

DRAW_COLOR_HISTOGRAM

DRAW_COLOR_HISTOGRAM2

DRAW_COLOR_ARROW

DRAW_COLOR_ZIGZAG

DRAW_COLOR_BARS

DRAW_COLOR_CANDLES

Modelo de lanzamiento impulsado por eventos

OnInit

OnStart

OnDeinit

OnTick

OnCalculate

OnTimer

OnChartEvent

OnTester

OnInit

OnStart

OnDeinit

OnTick

OnCalculate

OnTimer

OnTrade

OnTradeTransaction

OnBookEvent

OnChartEvent

OnTester

OnTesterInit

OnTesterDeinit

OnTesterPass

Trading

OrderSend

OrderModify

OrderDelete

El comportamiento se especifica mediante un conjunto de parámetros separado para cada función. Complica la escritura y depuración de programas.

OrderSend

Una función para todas las operaciones. El comportamiento requerido se especifica en la estructura MqlTradeRequest. La respuesta se devuelve a la estructura MqlTradeResult. Es más fácil diseñar el comportamiento, probar el resultado y depurar el programa.

Búferes de datos de indicadores32512
Indicadores integradosCantidad: 30

Cantidad: 38

Los indicadores se crean mediante identificadores. Se ha reducido el número de copias y el consumo de memoria.

Modo de tradingHedging (Cobertura)

Netting

Hedging (Cobertura)

Acciones

Herramientas gráficas OpenCL y DirectXNoSi
Generación de robots de tradingNoSi. Al mismo tiempo, puede especificar módulos de señales personalizados.

Entonces, hay algunas diferencias que existen. Después de la actualización en 600 build, MQL4 se diferencia de MQL5 solo en la parte en que una plataforma difiere de otra. El blog de LiteFinance ya tiene un artículo dedicado a comparar la versión 4 y 5 de MetaTrader, que recomiendo sinceramente leer si desea profundizar sus conocimientos sobre este tema.

Cómo escribir un asesor experto en MQL4 o MQL5

Antes de comenzar a escribir un asesor experto, debe comprender que ya debe tener una estrategia de negociación. Solo de este modo podrá comenzar a materializar la idea en forma de algoritmo formal. El código en sí solo proporciona herramientas de lenguaje para la implementación de una idea.

Entonces, lo primero que necesita es una estrategia de trading que funcione. La pregunta sobre su desarrollo está fuera del alcance de este artículo, así que tomemos algo simple como ejemplo. Imaginemos lo siguiente. Durante los períodos de baja actividad del instrumento "en flat", es posible abrir transacciones en direcciones opuestas con pequeños niveles de límites. Esto permitirá aprovechar los pequeños movimientos laterales del mercado y obtener ganancias.

Escribiremos un asesor experto que automatizará la apertura manual de operaciones y controlará sus límites y lo ejecutará en una cuenta de trading durante períodos planos.

Inicialmente, el procedimiento es el mismo independientemente de la versión del idioma. Para escribir programas en MQL, debe instalar el terminal de cliente MetaTrader Client Terminal, en donde incluye un MetaEditor. Ahora podemos abrir el MetaEditor directamente del directorio de trabajo del terminal o a través del menú principal en el terminal de trading: Tools y luego MetaQuotes Language Editor (F4). En la ventana MetaEditor del menú principal hacemos clic en Archivo -> Nuevo (File -> New). Lo mismo hace el botón “Crear” (“New”) en el menú del gráfico.

Cómo crear un robot de trading en MQL4

En el asistente para crear una aplicación, seleccione el asesor experto (plantilla) (Expert Advisor (template)) y haga clic en “Siguiente” (Next).

LiteFinance: Cómo crear un robot de trading en MQL4

A continuación, introduzca los parámetros que proporcionan al usuario una interfaz para interactuar con el programa y confirme haciendo clic en Aceptar. Aquí agregamos:

  1. Instrumento para negociar
  2. Elección de la dirección de la primera transacción que abrirá el robot. Por ahora, este es un tipo entero, pero luego arreglaremos el código para que solo se pueda seleccionar Buy o Sell.

LiteFinance: Cómo crear un robot de trading en MQL4

MetaEditor incluirá automáticamente el controlador de eventos OnTick en el código. El resto uno mismo debe elegir. Como vemos, también tenemos acceso a OnTimer, que se llama cada vez con la frecuencia establecida para el temporizador y OnChartEvent, que se llamará en respuesta a las acciones del usuario con el gráfico. Aquí se ve que hay más controladores disponibles para MQL5.

LiteFinance: Cómo crear un robot de trading en MQL4

Seguimos adelante y seleccionamos los controladores de eventos en modo de prueba. En MQL5 se puede elegir más eventos en el modo de prueba y, en consecuencia, hay más controladores disponibles para ellos.

LiteFinance: Cómo crear un robot de trading en MQL4

Durante los dos pasos anteriores, dejé todas las opciones en blanco. Toda nuestra lógica se ejecutará con la función OnTick. Se llama cada vez que llega un nuevo tick para un símbolo.

Después de hacer clic en el botón Finalizar, MetaEditor creará una plantilla para el futuro asesor experto con el nombre y los parámetros especificados. Los controladores de eventos seleccionados también se incluirán en el código. No me detendré a detallar cada uno de ellos. Toda la información necesaria sobre esto está en la guía de referencia.

LiteFinance: Cómo crear un robot de trading en MQL4

Este código ya se puede compilar y ejecutar en la plataforma de trading. Pero no pasará nada. Tenemos variables input, pero aún no las estamos usando. La función OnInit siempre informa al terminal sobre la inicialización exitosa, mientras que OnTick y OnDeinit no contienen ninguna instrucción.

Comencemos a escribir el código.

Limpiemos primero. Elimine espacios adicionales y acorte los comentarios a una línea. Luego definimos enum TradeCmd (líneas 11-14) para indicar la dirección de la primera operación de forma natural en lugar de un número. Luego cambiamos el tipo input de la variable FirstTradeDirection de int a TradeCmd (20). Entonces, creamos una variable global estática Direction con el tipo TradeCmd para tener en cuenta la dirección de la operación anterior y cambiarla a lo contrario para la siguiente.

Al principio, olvidé agregar variables para el volumen de transacciones, niveles de stop loss y take profit en el asistente. Los agregamos ahora con la palabra clave input y los agrupamos con el resto de los ajustes externos.

LiteFinance: Cómo crear un robot de trading en MQL4

Pasemos a la función OnTick. Analizamos la presencia de transacciones abiertas. Para hacer esto, enumeramos todas las operaciones abiertas usando un ciclo simple en el rango [0, TotalTrades). Comprobamos uno a uno que el símbolo de la transacción seleccionada coincide con el especificado en el InputSymbol. Una vez que haya al menos una operación de este tipo, no será necesario hacer nada. Y salimos de la función OnTick anticipadamente con Return (líneas 29-35). Esperamos el próximo lanzamiento.

LiteFinance: Cómo crear un robot de trading en MQL4

De lo contrario, debe abrir una transacción. Consultemos la documentación de MQL4 para usar correctamente la función OrderSend, con la ayuda de la cual enviaremos una solicitud al servidor de trading. La declaración se ve así:

LiteFinance: Cómo crear un robot de trading en MQL4

Examinemos los parámetros en orden:

  1. Símbolo. Ya lo tenemos, pero no verificamos la exactitud de ninguna manera y confiamos solo en la entrada correcta del usuario.
  2. Dirección de la transacción. Para ello, utilizamos la variable estática global Direction.
  3. Volumen. Especificado por el usuario. Nuevamente, sería necesario verificar el valor ingresado en los límites: mínimo, máximo y paso mínimo de cambio de volumen.
  4. Precio. Ask, si estamos comprando, Bid si estamos vendiendo.
  5. Deslizamiento. En nuestro caso no tiene mayor importancia. Colocamos a 2 pips.
  6. Stop Loss. Nuevamente, depende de la dirección de la transacción. Debe ser menor que el precio de apertura si estamos comprando, y mayor que el precio de apertura si estamos vendiendo.
  7. Take Profit. Al igual que el stop loss, depende de la dirección de la transacción.

Los otros 4 parámetros con un valor predeterminado aún no nos interesan. Entonces, para abrir operaciones tenemos: volumen InputVolume, dirección de la transacción Direction, símbolo InputSymbol, el deslizamiento se establece en 1 punto. Tenemos que calcular en función de Direction: precio de apertura price, stop loss sl y take profit tp. Si compramos, el precio es Ask, el stop loss es más bajo que el precio actual y take profit es más alto, cuando vendemos el precio es Bid, el stop loss es mayor que el precio actual y take profit es menor. También necesitamos 2 variables adicionales. Para convertir el nivel de límites de puntos a valores nominales, point es el valor mínimo por el cual la cotización de un símbolo puede cambiar. Para normalizar los valores con coma flotante, digit es el número de dígitos significativos en la parte fraccionaria de la cotización.

Pasamos esto a MQL.

LiteFinance: Cómo crear un robot de trading en MQL4

Procedemos a abrir directamente una operación. Reiniciamos la variable de sistema _LastError con la función incorporada ResetLastError. Enviamos una solicitud mediante OrderSend, y escribimos el resultado en la variable result. Hay dos opciones para el desarrollo de eventos:

  1. La transacción se abrió con éxito, si result contiene un valor mayor que cero, es el ticker de la transacción. Significa que necesitamos cambiar el valor Direction para poder abrir una operación en la dirección opuesta la próxima vez.
  2. Si result contiene un valor negativo, entonces la operación no se ha abierto. Debe verificar el último error usando GetLastError, analizarlo y hacer algo: intentar nuevamente, dormir un tiempo, enviar información de depuración al registro, etc. En aras de la simplicidad, envío el valor del último error al registro.

Veamos.

LiteFinance: Cómo crear un robot de trading en MQL4

Entonces, hemos escrito varias docenas de líneas de código y el robot de trading está listo. Admito que aún no es muy funcional, pero puede servir como un excelente ejemplo de que escribir un código no requiere mucho conocimiento y esfuerzos significativos.

Aquí hay una lista completa, en caso de que la necesite.

LiteFinance: Cómo crear un robot de trading en MQL4

Compilamos el código y ejecutamos el asesor experto en la plataforma de trading.

Cómo escribir un asesor experto en MQL5

Aquí MQL5 tiene una ventaja innegable frente a MQL4. Puede crear un robot de trading para la quinta versión en unos pocos clics, sin tener que escribir una sola línea de código.

En MetaEditor, haga clic en “Crear” (New). Y seleccione asesor experto (generar) en el asistente de la aplicación.

LiteFinance: Cómo escribir un asesor experto en MQL5

Llamemos a nuestro asesor experto MQL5_Generated_Robot. Opcionalmente, indicamos el autor y su página web o perfil. Agregamos si es necesario los parámetros del asesor: el símbolo y el plazo de negociación. Un doble clic activa el parámetro, un clic en el nombre o valor de la variable permite cambiar los valores predeterminados sugeridos. El símbolo se puede configurar como se desee. Lo definí como el actual, en cuyo gráfico funcionará el asesor experto. También fije el timeframe en M15 para aumentar la probabilidad de señales de trading.

LiteFinance: Cómo escribir un asesor experto en MQL5

Seguimos. Ahora debemos seleccionar una señal y su configuración. Aquí se puede improvisar y probar diferentes combinaciones de las señales sugeridas por los desarrolladores. Estas señales generarán eventos para que el asesor experto pueda ejecutar las operaciones.

LiteFinance: Cómo escribir un asesor experto en MQL5

Puede agregar señales personalizadas a esta sección, incluidas las de monitoreo en el recuso mql5.com. Las siguientes opciones se proporcionan con la plataforma de forma predeterminada:

LiteFinance: Cómo escribir un asesor experto en MQL5

Elegí “Negociar en la intersección de dos promedios” y establecí los períodos en 21 y 55. No es deseable elegir períodos demasiado cortos si necesita reducir el número de falsos positivos. Mantenemos el símbolo actual, por ejemplo, operaremos con EURJPY y recibiremos señales de medias móviles aplicados a los datos de precios del mismo EURJPY. Elija un símbolo diferente aquí si su estrategia implica operar con el instrumento dependiendo del comportamiento de otro. También fijé el timeframe en M15.

LiteFinance: Cómo escribir un asesor experto en MQL5

Confirmamos. Vemos que se ha agregado una señal para el símbolo actual y el timeframe que generará eventos para el asesor experto.

LiteFinance: Cómo escribir un asesor experto en MQL5

Luego pasamos a configurar el modo Trailing Stop. Aquí he elegido un límite de tamaño fijo. stop loss en 150 puntos y 200 puntos en take profit

LiteFinance: Cómo escribir un asesor experto en MQL5

A continuación, podemos elegir uno de los cinco modos de gestión de capital para una cuenta de trading. El trading está disponible con:

  • Volumen fijo
  • Margen fijo
  • Riesgo fijo
  • Volumen mínimo permitido
  • Volumen de posiciones optimizado.

LiteFinance: Cómo escribir un asesor experto en MQL5

Me decidí por operar con un riesgo fijo del 1% de los fondos de la cuenta.

LiteFinance: Cómo escribir un asesor experto en MQL5

Hacemos clic en “Listo” (“Done”)... ¡Profit! Hemos creado un asesor experto sin escribir una sola línea de código.

Veamos más de cerca y realicemos un pequeño análisis de las fuentes.

LiteFinance: Cómo escribir un asesor experto en MQL5

El encabezado y los atributos son los mismos de siempre. Luego viene la inclusión de los módulos de la biblioteca. Expert es nuestro robot. MACross es un generador de señales de cruce de Moving Average, TrailingFixedPips es un módulo de control de nivel de límites, MoneyFixedRisk es un módulo de gestión de riesgos. Luego la configuración que incluye variables input que definen la interfaz para interactuar con la aplicación. Parece familiar, ¿no? ¡Por supuesto! Los configuramos en el Asistente de generación de asesores expertos. En el futuro, los valores predeterminados pueden cambiarse aquí.

A continuación, se declara una variable global automática del tipo CExpert, que se inicializa con un valor predeterminado. Para un objeto, esto significa que se ha llamado al constructor predeterminado. En el cuerpo OnInit, el asesor experto se inicializa, las señales y los filtros se crean e inicializan con los valores especificados en la configuración. A continuación, se muestra el código del que eliminé todas las comprobaciones de los resultados de inicialización de éxito y los descriptores de validez con el fin de reducir visualmente la cantidad de código.

LiteFinance: Cómo escribir un asesor experto en MQL5

A continuación, puede ver las funciones OnDeinit, OnTick, OnTimer, OnTrade. Cada uno de ellos simplemente llama al método correspondiente de la clase CExpert.

LiteFinance: Cómo escribir un asesor experto en MQL5

Si observa de cerca, en el navegador de la izquierda en la carpeta Include -> Expertos, puede ver las señales y módulos disponibles en el generador. En consecuencia, puede agregar algunas soluciones especializadas al generador y crear algunas para cualquier necesidad con unos pocos clics.

Intentemos compilar el código. 0 errores y 0 advertencias es un éxito. Para iniciar el modo de prueba de estrategia, presionar Ctrl + F5 simultáneamente o hacer clic en el botón en el menú del gráfico en la parte superior.

LiteFinance: Cómo escribir un asesor experto en MQL5

El control se transfiere a MetaTrader Client Terminal en la configuración del probador de estrategias. Luego seleccionamos el archivo a probar y configuramos el resto de parámetros: símbolo, timeframe, profundidad del historial, saldo y apalancamiento de la cuenta de trading, etc. Hay muchas configuraciones, y para cada una de ellas hay una descripción en el archivo de referencia. Para obtener información detallada sobre la configuración y el modo de prueba, céntrese en el probador y presione F1.

LiteFinance: Cómo escribir un asesor experto en MQL5

Para comenzar, presionamos Iniciar en la esquina inferior derecha del probador y, si la prueba ocurre sin optimización, puede seleccionar el modo de visualización para su estrategia.

Los desarrolladores han proporcionado amablemente una descripción para cada módulo incorporado y señal en https://www.mql5.com/es/docs/standardlibrary/expertclasses. No dude en consultar la documentación para explayar sus conocimientos sobre el tema.

Ventajas y desventajas de los lenguajes MQL4 y MQL5

La principal objeción radica en el propósito mismo de estos lenguajes. MetaQuotes Querying Language es un lenguaje para escribir aplicaciones solo para MetaTrader. Es posible compilar y depurar código MQL solo en el entorno MetaEditor. Solo MetaTrader Client Terminal puede iniciar el programa para su ejecución. No hay gestión de memoria manual. Aún debe elegir donde crear la variable, en la pila o en el área dinámica, pero, en cualquier caso, no tiene acceso a su dirección virtual.

Tiene muchas más a favor. Bajo umbral de entrada, especialmente si ya tiene experiencia en el desarrollo de lenguajes con tipado estático. Alto rendimiento a nivel C y C++. Soporte para estilo de programación orientada a objetos: encapsulación y extensibilidad, herencia, polimorfismo y métodos virtuales de clases. Es posible crear plantillas para clases y funciones, es decir, polimorfismo paramétrico. Todo esto permite que el código se reutilice muchas veces. La infraestructura gratuita incluye una plataforma de trading, un entorno de desarrollo, un probador de estrategias y bibliotecas incluidas.

Conversión de código MQL4 a MQL5

Examinemos la transformación de la actualización de un programa de una versión a otra utilizando el ejemplo de un robot, que se presentó anteriormente en este artículo en la sección sobre las capacidades del lenguaje[1]. Para ello, creamos un asesor experto vacío en MetaEditor 5 y en él copiamos el código fuente del asesor experto MQL4_Example_EA. No será posible compilar este código sin cambios. Se producirán muchos errores al intentarlo.

Empecemos desde el principio. Al principio, casi nada cambia, excepto por un par de puntos:

  1. Quitamos #property strict de las directivas del preprocesador, porque tiene sentido al compilar el código MQL4.
  2. Pasamos la creación de la variable estática Direction sobre la función de inicialización del asesor experto, para inicializarla en OnInit de forma especial, en función de las posiciones disponibles. En el futuro, esto permitirá cambiar la configuración del asesor experto en medio del proceso de negociación.

Note que ahora es más fácil seleccionar una operación para cualquier símbolo en MQL5 utilizando la función PositionSelect integrada, sin tener que buscar entre todas las transacciones abiertas.

LiteFinance: Conversión de código MQL4 a MQL5

Analicemos completamente la función OnTick. Usamos PositionSelect para buscar una posición abierta para un símbolo. Si no existe, ingrese dentro del cuerpo de if y prepárese para enviar una solicitud para abrir una transacción. MQL5 nos proporciona la estructura MqlTradeRequest para crear una solicitud, en lugar de un montón de parámetros en MQL4. Ahora no analizaré cada uno de sus campos por separado. Quiero señalar que, al igual que en MQL4, tenemos 4 de los 7 parámetros requeridos: símbolo de transacción, volumen, dirección y desviación del precio solicitado. Los tres restantes: precio de apertura, stop loss y take profit, los calculamos en función de la dirección de la transacción. Completamos la estructura en orden. También vemos que ahora no es necesario normalizar los números de punto flotante, por lo que no hay necesidad de utilizar la variable digit.

Enviar una solicitud en la última versión del idioma parece mucho más conciso. Toda la información sobre el resultado de ejecutar la función OrderSend ahora se nos devuelve en MqlTradeResult.

LiteFinance: Conversión de código MQL4 a MQL5

Obtuve el siguiente código después de la depuración y una serie de pruebas. El tamaño del programa no ha cambiado, aunque hicimos un cambio en la lógica que requirió acciones adicionales en la etapa de inicialización en OnInit.

LiteFinance: Conversión de código MQL4 a MQL5

En resumen. Actualizar las aplicaciones de MQL4 a MQL5 es fácil. Si tiene conocimientos básicos de MQL, no será difícil hacerlo usted mismo.

Además, seleccioné especialmente para usted una serie de preguntas más comunes sobre MQL y traté de responder lo más breve y detallado.

FAQ sobre MQL4 y MQL5

MetaQuotes Language es un lenguaje de programación de alto nivel que se utiliza para escribir aplicaciones en la plataforma de trading MetaTrader con escritura de tipado estático débil, siendo muy similar a la sintaxis ancestro de C++. También implementa el concepto de paradigma múltiple como su antecesor. Durante la escritura del código, puede utilizar un enfoque orientado a objetos o funcionales, de procedimientos o mixto. La POO admite encapsulación, herencia y polimorfismo. Hay plantillas de funciones y clases disponibles. Desafortunadamente, no es posible usar metaprogramación con el cálculo de tiempo de compilación.

Para escribir programas en MQL, debe instalar la plataforma de trading MetaTrader (MetaTrader Client Terminal), el cual incluye un entorno para desarrollar aplicaciones en MQL, llamado MetaEditor. Se ejecuta usando el menú principal Tools -> MetaQuotes Language Editor (F4). Ahora estamos listos para escribir nuestro primer programa en MQL.

El resultado de ejecutar dicho programa en la plataforma de trading será el siguiente.

La extensión mq4 es un archivo de texto simple. Esta extensión permite al sistema operativo asociar automáticamente el archivo en sí con el entorno de desarrollo de MetaEditor. Un archivo ex4 es un archivo ejecutable que no se puede leer como texto, además contiene datos en código binario.

Durante la compilación, el código del programa mq4 se convierte en un código ejecutable ex4. Esta transformación es simple y ocurre muy a menudo al crear programas. Esto es exactamente lo que hace el compilador.

El proceso inverso es descompilar (desensamblar) el código ejecutable ex4 en código de texto mq4 que ocurre raramente y, a menudo, no tiene base legal. Los proyectos de código abierto generalmente proporcionan código fuente a cualquiera que esté de acuerdo con las reglas para su distribución, transformación y uso. El resto de proyectos protegen todos sus desarrollos mediante la ley de derechos de autor. No existen herramientas estándar para realizar la descompilación.

¿Qué sucede si realmente se necesita convertir el código ejecutable de un archivo ex4 en código del programa? Aquí hay varias respuestas a esta pregunta, ordenadas según la complejidad creciente de la implementación:

  1. Contacte al autor del programa y averigüe las condiciones para obtener el código.
  2. Encuentre un programador que pueda implementar la lógica en su programa ex4 y llegar a un acuerdo con él.
  3. Aprenda MQL y escriba usted mismo un programa equivalente al que tiene en forma de ex4. Este camino no es fácil, pero ampliará sus posibilidades como ningún otro.
  4. Realice la descompilación usted mismo o con la ayuda de alguien. Tenga en cuenta la responsabilidad prevista por la ley de derechos de autor.

Los archivos con extensión mq4 (mq5) son archivos de texto simples que contienen código MQL en forma de texto. Si no desea compartir su propio código fuente, lo más fácil en esta situación es no distribuir archivos en este formato.

Una forma sencilla de proteger el código es distribuirlo en formato ex4 (ex5). Los archivos en estos formatos son generados por el MetaEditor al compilar el código mq4 (mq5). De acuerdo con las reglas del lenguaje, las instrucciones en el texto se convierten en código binario ejecutable, que es ejecutado por el terminal cuando agrega un asesor experto, script o indicador al gráfico.

Desmontar el código ejecutable de nuevo al código fuente no es una tarea trivial, lo que ayuda a proteger su código fuente. En cualquier caso, al descompilar en código fuente, se perderán los nombres significativos de las variables de su código y será mucho más difícil comprender la lógica del programa.

MetaQuotes Language es un lenguaje de programación POO de alto nivel con escritura de tipado estático débil, heredado de C++. MQL5 es un desarrollo lógico del lenguaje MQL4, que se lanzó junto con la plataforma MetaTrader 5. Posteriormente, tuvo un impacto significativo en el desarrollo de MQL4 y contribuyó a su actualización.

En MQL5 existe una herramienta de generación de Expert Advisors, que permite rechazar escribir el código a mano. En unos pocos clics, recibirá un robot de trading junto con el código fuente. Está configurado para operar usando señales. El control del estado de la cuenta de trading se basa en las estrategias de gestión del riesgo y del capital suministradas con el terminal de trading.

Descargar un indicador no es diferente a descargar cualquier otro archivo a su computadora. Esto debe hacerse en una computadora, ya que MQL solo se puede usar con la versión de escritorio de MetaTrader Client Terminal. Abra el directorio de trabajo del terminal (Archivo -> Abrir carpeta de datos) (File -> Open Data Folder). A continuación, vaya al directorio MQL/indicators y pegue aquí el indicador cargado. Después de reiniciar el terminal, el indicador estará disponible en el Navegador. Todo lo que tiene que hacer es moverlo al gráfico y ajustar los parámetros de entrada.

De hecho, todos los programas MQL4 o MQL5 se crean utilizando la quinta versión de MetaQuotes Language Editor. Existe compatibilidad inversa entre versiones más antiguas y posteriores del lenguaje. La única limitación en este caso es el propio servidor MetaQuotes. Algunas funciones y estructuras faltan en la cuarta versión de la plataforma. La lógica de procesamiento de operaciones de trading en la quinta versión del servidor se ha modificado parcialmente. También existen diferencias en la estructura interna de los indicadores. En la cuarta versión, no se pueden utilizar más de ocho búferes indicadores. En MetaTrader 5, el número de búferes se ha incrementado a 21.

La función incorporada iCustom permite usar señales de indicadores para implementar la lógica de trading dentro del asesor experto. Si tiene su propio indicador y desea generar señales de trading en el asesor para realizar operaciones de trading, debe utilizar iCustom para ello. Veamos la documentación y la definición para MQL4.

Y la siguiente para MQL5.

Básicamente, la función hace lo mismo, aunque su firma es diferente en la cuarta y quinta versión del lenguaje. Veamos más de cerca cada uno de los parámetros:

  1. Línea string symbol es el símbolo que se debe calcular.
  2. Timeframe. En MQL4 es un tipo entero int, en MQL5 también es un entero pero enum, que contiene la enumeración de timeframes.
  3. Nombre del parámetro de la cadena. En él es necesario pasar la ruta al indicador para la que queremos calcular, si, por ejemplo, está en otro directorio y el nombre del indicador junto con la extensión. A continuación, se pasan los parámetros necesarios para el indicador que queremos utilizar.
  4. Luego viene una serie de parámetros para el indicador, que se ejecutará con la función iCustom. Su número depende de cuántos argumentos se necesitan para obtener el valor requerido de su indicador. Lógicamente, la función toma un número variable de parámetros. Por ejemplo, para Alligator (se incluye en el paquete de instalación del MetaTrader Client Terminal):

O, por ejemplo, para Ichimoku será algún otro conjunto de variables:

  1. En la cuarta versión de MQL4 hay dos parámetros más. El primero es el entero mode, que denota el índice de la línea del indicador y es utilizado por el entorno ejecutable para la indexación interna de búferes de datos.
  2. El siguiente entero shift indica el desplazamiento hacia delante o hacia atrás del indicador a lo largo de la línea de tiempo.

El lenguaje MQL4 se basa en el lenguaje de programación C++, utilizado en el servidor de trading MetaTrader y en todas sus aplicaciones, incluyendo Client Terminal y Language Editor. Desafortunadamente, si comparamos MQL con su predecesor, está claro que el lenguaje se está desarrollando con retraso. En la actualidad, las capacidades de MQL corresponden a las del estándar C++ del 2003. Cabe señalar que MQL es un lenguaje bastante poderoso y puede cubrir el 99% de las necesidades actuales de programadores y desarrolladores.

A primera vista, el código de los programas en las versiones 4 y 5 difiere ligeramente, pero todavía hay diferencias. En la quinta versión, todas las definiciones de macro de la cuarta versión se han reemplazado por enumeraciones.

Se ha ampliado el modelo de eventos de Inicio de aplicaciones personalizadas. En particular, aparecieron controladores de eventos: OnTrade, OnTradeTransaction, OnTesterInit, OnTesterDeinit, OnTesterPass. Se ha corregido el comportamiento incorrecto de OnTick y OnTimer en el modo de probador de estrategias. La función OnTimer ahora puede ejecutarse con una frecuencia de muestreo del temporizador 1000 veces mayor que la de MQL4: una vez por microsegundo en comparación con milisegundos.

MQL5 ha cambiado la lógica para enviar órdenes de trading y el mecanismo para responder a ellas. Varias funciones de trading en MQL4 se combinaron en una sola, OrderSend, con diferentes modos operativos. El proceso de negociación en sí en MetaTrader 5 comenzó a diferir de la negociación en la cuarta plataforma. Se introdujo un modo de netting de posiciones además de una función que permite transacciones de cobertura. Además de las órdenes MT4, aparecieron posiciones y transacciones. El lenguaje ahora tiene la función OrderSendAsync para enviar solicitudes al servidor de trading en modo asincrónico.

Todas las definiciones de macro de MQL4 en MQL5 se reemplazaron con enumeraciones, por lo que el compilador ahora indica al desarrollador las conversiones de tipos implícitas.

MetaTrader 5 le permite trabajar con 21 períodos de tiempo estándar en comparación con 9 períodos de tiempo en MetaTrader 4. Los indicadores en MQL5 recibieron un mayor número de búferes en el gráfico.

Convertir MQL4 a MQL5 es una tarea trivial para un programador principiante, pero requerirá su atención y paciencia. El compilador solo le mostrará la mayoría de las cosas incompatibles con MQL5.

Se debe prestar atención al procesamiento de órdenes de trading y su envío al servidor.

  • En MQL4, una solicitud de trading se implementa mediante la función OrderSend y su conjunto de parámetros, y la modificación de una orden y la eliminación de una orden pendiente se implementan con funciones separadas. El resultado de la solicitud se determina por el valor booleano devuelto al finalizar la función. El análisis del resultado se reduce a determinar el código de retorno del servidor mediante la función GetLastError.
  • MQL5 tiene una estructura especial MqlTradeRequest para enviar órdenes de trading al servidor. Se debe completar con el tipo de operación y tipo de orden adecuados. Para obtener el resultado, debe declarar y pasar una instancia de la estructura MqlTradeResult por referencia al llamar a OrderSend para recibir una respuesta del servidor, combinar los parámetros dispares pasados ​​previamente al llamar a OrderSend en una sola estructura MqlTradeRequest y enviarla al servidor. Analizamos la estructura MqlTradeResult recibida en respuesta. Toda la información necesaria estará disponible en la respuesta del servidor.

Se debe prestar especial atención a los controladores de eventos en el código de sus programas. MQL5 tiene adicionalmente OnTesterTick, OnTesterTimer, OnBookEvent. Se ejecutan varias aplicaciones en respuesta a eventos de la plataforma de trading.



Para expertos:
  • OnInit, OnDeinit, OnTimer, OnTick, OnChartEvent, OnTester

Para indicadores:

  • OnInit, OnDeinit, OnTimer, OnCalculate, OnChartEvent, OnTester
  • Para scripts:

    • OnStart (este controlador no se puede utilizar en indicadores y scripts).

    No hay una función de lanzamiento para las bibliotecas incluidas, ya que se utilizan exclusivamente dentro de otros proyectos más grandes.

    Otra diferencia es que las variables predefinidas Ask, Bid, así como las matrices Open[], High[], Low[], Close[], Volume[], Time[] están ausentes en MQL5. Por lo tanto, el código del programa debe corregirse para obtener estos datos de forma independiente utilizando las funciones integradas para acceder a las series temporales CopyRates, CopyOpen, CopyHigh, etc. Declaramos una matriz dinámica y obtenemos datos en ella. La función que proporciona el resultado se encargará del cambio de tamaño de la matriz por sí sola.


P.S. ¿Le gustó mi artículo? Compártalo en redes sociales, es lo mejor, gracias :)

Enlaces útiles

  • Le recomiendo que intente operar con un bróker de confianza aquí. El sistema permite negociar por sí mismo o copiar las transacciones de los traders exitosos de todo el mundo.
  • Use mi código de promoción BLOG para obtener un bono de depósito del 50% en la plataforma de LiteFinance. Simplemente ingrese el código de promoción en el campo correspondiente al depositar en su cuenta en la plataforma LiteFinance y el bono se acreditará simultáneamente con el depósito.
  • Chat de traders con una analítica excelente, resúmenes forex, artículos de aprendizaje y más para traders. https://t.me/financialmarketschat. Compartamos señales y experiencias.
Lenguajes MQL4 y MQL5: diferencias y características

El contenido de este artículo es únicamente la opinión personal del autor y puede no coincidir con la posición oficial de LiteFinance. Los materiales publicados en esta página se proporcionan solamente con fines informativos y no pueden considerarse asesoramiento o consejo en materia de inversión a efectos de la Directiva 2014/65/EU.
Según la ley de derechos de autor, este artículo es propiedad intelectual, lo que incluye la prohibición de copiarlo y distribuirlo sin consentimiento.

Evalúe este artículo:
{{value}} ( {{count}} {{title}} )
Comenzar a operar
Estamos en las redes sociales
Chat en vivo
Dejar comentario
Live Chat