Comparando MQL5 y QLUA - ¿Por qué las operaciones comerciales en MQL5 son hasta 28 veces más rápidas?
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.
- 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.
- 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.
- 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:
- que las operaciones comerciales se realizaron en la misma cuenta real;
- y en el mismo instrumento, Si-9.16;
- en la misma computadora;
- que las operaciones comerciales se realizaron al mismo tiempo;
- y en las mismas condiciones de mercado;
- que las velocidades de actualización de las profundidades de mercado se midieron en el mismo instrumento y al mismo tiempo;
- 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 ms | 277.80 ms | 28.96 veces |
Duración media de una operación asincrónica | 0.09 ms | 0.30 ms | 3.33 veces |
Velocidad de actualización de la profundidad de mercado | 42.7 veces por segundo | 8.4 veces por segundo | 5.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.
#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
#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.
¿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 Ltd.
Artículo original: https://www.mql5.com/ru/articles/2635
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso