Descargar MetaTrader 5

Comparando MQL5 y QLUA - ¿Por qué las operaciones comerciales en MQL5 son hasta 28 veces más rápidas?

30 septiembre 2016, 10:04
MetaQuotes Software Corp.
0
1 676

Muchos tráders a menudo no reflexionan sobre la velocidad a la que su solicitud llega hasta la bolsa, cuánto tiempa tarde en ejecutarse una vez allí, y en qué momento el terminal del tráder conoce el resultado.

Como resultado, no saben lo fácil que es mejorar la calidad de la ejecución de sus operaciones gracias a una reacción más rápida y a una mayor velocidad en la realización de las transacciones.

El 12 de septiembre de 2016 se efectuaron tres mediciones de la velocidad en una cuenta real de la base de datos de "Otkrytie" en MetaTrader 5 build 1415 y Quik 7.2.23 al mismo tiempo. Cada prueba debía medir una característica concreta de la velocidad que fuera importante desde el punto de vista del trading algorítmico:
  1. Simulación de operaciones sincrónicas  — una serie de 10 operaciones comerciales consecutivas Buy sincrónicas con confirmación del éxito de la ejecución de cada transacción en la bolsa. La operación siguiente no se realizará mientras que no se haya recibido la confirmación del servidor comercial de que la operación ha pasado/no ha pasado en la bolsa. La velocidad de ejecución depende de la cadena terminal — servidor comercial — bolsa — servidor comercial — terminal al completo. Cuanto menor sea el tiempo medio de la operación comercial sincrónica, mejor.
  2. Simulación de operaciones asincrónicas — serie de 10 operaciones comerciales Buy asincrónicas sin confirmación sobre el éxito de la ejecución de la transacción. Se trata de un simple test que mide la velocidad de envío de los pedidos a la bolsa. Aquí también será el mejor aquel terminal con el menor tiempo de ejecución de las 10 compras asincrónicas.
  3. Simulación de la actualización de la profundidad de mercado — medición de la velocidad de los pedidos en la Profundidad de mercado. Se trata de un cálculo simple del número de ticks (actualizado) de la Profundidad en una unidad de tiempo. Cuanta mayor sea la frecuencia con la que llegan las cotizaciones de la bolsa al terminal comercial, más rápida será la actualización de la Profundidad. Por consiguiente, cuantos más ticks por segundo lleguen al programa de comercio automático, más rápida será su velocidad de reacción ante los cambios en la estructura de la demanda/oferta en el mercado. Será el mejor aquel terminal en el que la velocidad de actualización de la Profundidad de mercado sea mayor.


Condiciones de las pruebas

Ambos terminales han sido instalados en un servidor alquilado VPS en Moscú, al igual que los propios servidores de la base de datos de "Otkrytie". El comercio se realizó en una misma cuenta real en la sección urgente de la Bolsa de Moscú con el instrumento Si-9.6.

Hemos grabado un solo vídeo con las tres pruebas, para que se vea:

  1. que las operaciones comerciales se realizaron en la misma cuenta real;
  2. y en el mismo instrumento, Si-9.16;
  3. en la misma computadora;
  4. que las operaciones comerciales se realizaron al mismo tiempo;
  5. y en las mismas condiciones de mercado;
  6. que las velocidades de actualización de las profundidades de mercado se midieron en el mismo instrumento y al mismo tiempo;
  7. que el retraso de red hasta los servidores de Otkrytie era de 2 ms.

Resultados de la comparación de la velocidad de las operaciones comerciales: MetaTrader 5 vs QUIK

Los resultados de las tres pruebas han sido reunidos en un recuadro resumido. Los resultados detallados de cada prueba se muestran debajo de cada sección de este artículo.

Prueba
MetaTrader 5
QUIK
Ventaja de MT5
Duración media de una operación sincrónica
9.59 ms277.80 ms28.96 veces
Duración media de una operación asincrónica0.09 ms0.30 ms 3.33 veces
Velocidad de actualización de la profundidad de mercado
42.7 veces por segundo8.4 veces por segundo5.08 veces

Como podemos ver por la tabla, MetaTrader 5 es superior en las tres pruebas con una ventaja considerable. Cualquiera que lo desee puede realizar pruebas semejantes con las ayuda de los códigos fuente adjuntos. La propia simulación se muestra en el vídeo que hay más abajo.


Vídeo sobre la comparación de la velocidad de las operaciones comerciales




Conclusiones:  MetaTrader 5 es más rápido que QUIK en las operaciones comerciales hasta 28 veces

Las mediciones realizadas han demostrado que el lenguaje MQL5 supera significativamente a QLUA tanto en la ejecución de operaciones en el Bolsa de Moscú, como simplemnte en el escaneo de la Profundidad de mercado. Los robots comerciales escritos en el lenguaje MQL5 no solo calculan 50-600 veces más rápido, sino que comercian hasta 28 más rápido. Y además, usted no necesitará inventarse nada nuevo: componentes, conectores, etc. Ya tiene a su servicio las clases comerciales preparadas de la biblioteca estándar e infinidad de artículos sobre la automatización del trading.

Un robot comercial fiable está obligado a comprobar los resultados del envío de las operaciones comerciales, es decir, esperar la respuesta del servidor comercial. Las pruebas han demostrado que MetaTrader 5 es significativamente más rápido en las operaciones sincrónicas. Si usted necesita operaciones comerciales asincrónicas, aquí la velocidad es 3 veces superior. Si necesita analizar el flujo de solicitudes, MetaTrader 5 le dará la ventaja que supone un flujo de cotizaciones 5 veces más rápido y sin snapshots.

Las pruebas realizadas han demostrado que para crear sistemas comerciales automáticos rápidos, el lenguaje MQL5 viene a pedir de boca. Ningún conector o biblioteca que se acople al terminal QUIK para acelerar los cálculos, servirá de mucho: el cuello de botella será el tiempo de ejecución de las operaciones comerciales.

Ahora analicemos los detalles de la simulación, aburridos, pero necesarios.


Informes detallados de la comparación de los terminales

El programa en QLUA, al medir el tiempo, recurre al temporizador de sistema del sistema operativo, que por defecto tiene una margen de error de medición dentro de los límites de 10…15.6 milisegundos (lo más frecuente es 15.6 ms). Por eso, hemos mejorado la exactitud de las mediciones de tiempo en QLUA aumentando la precisión del temporizador de sistema hasta 1 ms. Hemos hecho esto con la ayuda del script SpeedupSystemTimer.mq5, que llama la función timeBeginPeriod de la biblioteca de sistema Winmm.dll

#import "winmm.dll"
int timeBeginPeriod(uint per);
#import

void OnInit()
  {
   timeBeginPeriod(1);
  }

void OnTick()
  {
  }

Hemos iniciado este script antes de las pruebas en el terminal MetaTrader 5, permitiendo la llamada de DLL, como resultado de lo cual, proporcionamos un margen de error en las mediciones de las operaciones en el terminal QUIK de no más de 1 milisegundo.

En el lenguaje MQL5 existe la función preparada GetMicrosecondCount(), por eso las mediciones en el terminal MetaTrader 5 se han hecho con una precisión de un 1 microsegundo (1 milisegundo=1000 microsegundos).

#1 Simulación de la velocidad de las operaciones comerciales sincrónicas

La simulación ha consistido en medir la velocidad de las operaciones comerciales sincrónicas, esto significa que la operación comercial siguiente se ha realizado solo después de recibir desde el servidor comercial la confirmación de que la transacción anterior se ha ejecutado con éxito y ha sido confirmada totalmente por la Bolsa.

Primero hemos ejecutado una serie de operaciones comerciales a través del terminal MetaTrader 5, después la misma serie se ha realizado a través de QUIK.

La esencia de la prueba reside en medir el tiempo medio de 10 operaciones sincrónicas de compra con 1 lote según el mercado:

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

La medición del tiempo invertido en la transacción sincrónica se ha realizado de la siguiente forma:

  • En el lenguaje MQL5 existe la función sincrónica OrderSend, el tiempo se puede medir con facilidad al principio y al final de una serie de operaciones.

  • En el lenguaje QLUA no hay función comercial sincrónica y por eso el estatus de la operación se debe captar por separado. La hora del comienzo de la operción comercial se ha medido justo antes de la llamada de sendTransaction () con la ayuda de la función os.closck(). La correcta ejecución de la transacción se ha seguido con el manejador incorporado OnOrder() en la primera llamada, en el momento en el que ha llegado el evento sobre la ejecución de la operación en la bolsa. La diferencia entre estos eventos es precisamente el tiempo invertido en la ejecución de la operación comercial.
Los resultados de las mediciones demuestran que en las operaciones sincrónicas, MetaTrader 5 es hasta 28 veces más rápido.


#2 Prueba de velocidad en operaciones comerciales asincrónicas

En esta prueba todo es significativamente más simple. Enviamos a la bolsa diez veces consecutivas una orden de compra del contrato de futuros Si-9.16. Esto nos ha permitido medir el tiempo medio de la transmisión asincrónica en QLUA con una precisión de 1 ms / 10 = 0.10 ms. En MetaTrader 5 no hay margen de error, puesto que en él se usa un temporizador de microsegundos.

No esperamos a la llegada de ningún resultado de nuestras operaciones: después del envío de cada solicitud al servidor comercial, se manda de inmediato una nueva solicitud:

  • AsyncTradeTest.mq5
  • AsyncTradeTest.lua
Como podemos ver por los resultados, MetaTrader 5 es 3.33 veces más rápido en las operaciones asincrónicas.


#3 Prueba de actualización de la profundidad de mercado

Algunas estrategias comerciales usan el análisis del flujo de solicitudes en la profundidad de mercado. En el lenguaje MQL5, el evento de cambio de la profundidad de mercado se puede captar en el manejador OnBookEvent(), y en QLUA, con OnQuote().

Las pruebas de velocidad de la actualización de las profundidades de mercado se han realizado con la ayuda de los siguientes programas, disponibles en el archivo ZIP adjunto:

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

Como resultado del inicio consecutivo de estos programas en dos terminales diferentes, se ha registrado que la profundidad de mercado en MetaTrader 5 se actualiza aproximadamente con 5 veces más frecuencia. Lo más probable es que QUIK simplemente limite la frecuencia de las actualizaciones de la profundidad y no muestre todos los cambios.

Puesto que todos los códigos fuente se adjuntan aquí mismo, quienquiera que lo desee puede reproducir por sí mismo estas pruebas y comprobar personalmente los resultados presentados.


¿Por qué la diferencia es tan enorme?

Porque somos unos fanáticos de la productividad y luchamos por cada décima de microsegundo, optimizando la plataforma comercial durante años.

Precisamente por eso hemos alcanzado semejantes cotas de productividad en el lenguaje algorítmico incorporado MQL5 y una velocidad impresionante en las transacciones comerciales.

Traducción del ruso hecha por MetaQuotes Software Corp.
Artículo original: https://www.mql5.com/ru/articles/2635

Archivos adjuntos |
Valoración rápida de señales: actividad comercial, gráficos de reducción/carga y distribuciones MFE/MAE Valoración rápida de señales: actividad comercial, gráficos de reducción/carga y distribuciones MFE/MAE

Al buscar una Señal, los suscriptores en primer lugar se orientan por el crecimiento general en la cuenta comercial del Proveedor, y esto es lógico en cierta medida. Pero aparte de esto, conviene prestar atención a los riesgos potenciales que conlleva una estrategia comercial concreta. En este artículo vamos a mostrar cómo valorar de forma rápida y visual la Señal que le interese con la ayuda de varios índices.

Red Neuronal: EA autooptimizable Red Neuronal: EA autooptimizable

¿Podríamos diseñar un EA que periódicamente, según ordenara su código, autooptimizara los criterios de apertura o cierre de posición?.¿Qué pasaría si implementamos en el EA una red neuronal (perceptrón multicapa) que sea el módulo que analice el historial y evalúe la estrategia?. Podríamos decirle al código: "optimiza cada mes (cada semana, cada día o cada hora) la red neuronal y continúa tu trabajo". ¡De esta forma, tendríamos un EA autooptimizable!

Distribuciones Estadísticas en MQL5: tomamos lo mejor de R y lo hacemos más rápido Distribuciones Estadísticas en MQL5: tomamos lo mejor de R y lo hacemos más rápido

Vamos a analizar las funciones para trabajar con las principales distribuciones estadísticas implementadas en el lenguaje R. Se trata de las distribuciones de Cauchy, Weibull, normal, log-normal, logística, exponencial, uniforme, la distribución gamma, la distribución beta central y no central, la distribución chi-cuadrado, la distribución F de Fisher, la distribución t de Student, así como las distribuciones binomial discreta y binomial negativa, la geométrica, la hipergeométrica y la distribución de Poisson. Además, también existen funciones de cálculo de los momentos teóricos de las distribuciones, que permiten valorar el grado de correspondencia entre la distribución real y la modelada.

Interfaces gráficas X: Actualizaciones para la librería Easy And Fast (build 3) Interfaces gráficas X: Actualizaciones para la librería Easy And Fast (build 3)

En este artículo se muestra la siguiente versión de la librería Easy And Fast (versión 3). Hemos corregido algunos fallos, así como hemos añadido nuevas posibilidades. Para más información, lea a continuación.