MQL5 vs QLUA - Por que operações de negociação no MQL5 são até 28 vezes mais rápidas?

MetaQuotes | 24 outubro, 2016


Você já se perguntou como a sua ordem é entregue tão rápida na bolsa? Também já se perguntou quanto tempo seu terminal precisa para receber o resultado da operação?

Testamos a melhor qualidade de execução da ordem, o recebimento de resposta rápida e o alcance de uma velocidade de transação mais rápida.

12 de setembro de 2016, rodamos simultaneamente três testes de velocidade numa conta real com a corretora "Otkrytie" no terminal MetaTrader 5, versão 1415 e no Quik 7.2.23. Cada teste visa medir características de velocidades específicas, que é importante para a negociação algorítmica:
  1. Teste de operações síncrônicas — é uma série de 10 sincronizações deoperações de Compra consecutivascom a confirmação de uma execução bem-sucedida em cada transação relativa a bolsa. A próxima operação não é executada até que uma resposta seja recebida a partir do servidor de negociação, confirmando se a operação anterior foi ou não executada na bolsa. A velocidade da execução depende de toda a cadeia: terminal — servidor de negociação — bolsa — servidor de negociação — terminal. Quanto menor for o tempo médio da operação de negociação sincronizada, melhor.
  2. Teste de operações sem sincronizar — série de 10 operações de Compra sem qualquer confirmação da execução de transação bem sucedida. É um simples teste de velocidade, que mensura como as ordens são rapidamente enviadas para a bolsa. O melhor terminal é aquele que pode executar 10 operações de Compras sem sincronizar de modo mais rápido.
  3. Teste de atualização do livro de oferta — mensura a rapidez que as ordens do Livro de Ofertas (Profundidade do Mercado) são atualizadas. Esta é uma simples contagem do número de ticks (atualizações) no Livro de Ofertas por uma unidade de tempo. Quanto mais frequentes as cotações são recebidas pelo terminal, a partir da bolsa, mais rápido o livro de ofertas será atualizado. Portanto, quanto mais ticks por segundo é o recebimento da negociação automática, mais rápido é a resposta das mudanças na estrutura de oferta/demanda do mercado. O melhor terminal é aquele com a maior velocidade de atualização do livro de ofertas.


Condições de teste

Os dois terminais estão instalados num VPS em Moscou, assim como os servidores de negociação da corretora "Otkryite". As operações de negociação foram realizadas utilizando a mesma conta real para o Mercado Derivativo da Bolsa de Moscou; o instrumento de negociação foi o ativo Si-9.6.

Selecionamos um vídeo sobre os três testes para facilitar a análise:

  1. As operações de negociação foram realizadas na mesma conta real
  2. O mesmo instrumento financeiro Si-9.16 foi negociado
  3. O mesmo computador foi utilizado
  4. As negociações foram realizadas no mesmo momento
  5. Sobre as mesmas condições de mercado
  6. A atualização da velocidade do Livro de Ofertas (profundidade do mercado), foi calculada pelo mesmo instrumento e ao mesmo tempo
  7. A latência da rede para os servidores da corretora, foi de 2ms

Resultados da Velocidade de Negociação: MetaTrader 5 vs QUIK

Os resultados dos três testes são apresentados num quadro resumido e os resultados adicionais contendo detalhes de cada teste, estão disponíveis em outras seções abaixo.

Teste
MetaTrader 5
QUIK
Vantagem MT5
O tempo médio de uma operação sincronizada
9.59 ms277.80 ms28.96 times
O tempo médio de uma operação sem sincronia0.09 ms0.30 ms 3.33 times
Velocidade de atualização do Livro de Ofertas
42.7 vezes por segundo8.4 vezes por segundo5.08 vezes

Como é possível analisar, o MetaTrader 5 mostra resultados muito melhores, em todos os testes. Você pode reproduzir os mesmos testes usando o código-fonte em anexo. O processo de teste está demonstrado no vídeo abaixo.


Vídeo Comparando a velocidade de Negociação




Conclusão:  As operações do MetaTrader 5 executam negociações até 28 vezes mais rápido que o QUIK

Estes testes demonstram que a linguagem MQL5 é muito mais rápida do que a QLUA, no que se refere a realização de negociações no MICEX-RTS, assim como, na verificação do Livro de Ofertas. Além de realizar cálculos até 50-600 mais rápidos, robôs de negociação MQL5 também negociam até 28 vezes mais rápidos. Além disso, todo o arsenal de ferramentas de desenvolvimento estão disponíveis, sem a necessidade de usar conectores adicionais, DLLs e etc. Você pode usar classes de negociações prontas da Biblioteca Padrão e um grande número de artigos para uma automatização das negociações.

Um robô de negociação robusto deve verificar os resultados de negociação que envia; ou seja, esperar por uma resposta do servidor de negociação. Os testes provaram que o MetaTrader 5 é significativamente mais rápido na realização de operações sincronizadas. Se você precisa usar operações sem sincronias, você faz 3 vezes mais rápido com MetaTrader 5. Se você precisa analisar o livro de ofertas, o MetaTrader 5 irá lhe fornecer uma vantagem 5 vezes mais rápida, indicando fluxo sem capturas instantâneas.

Estes testes também provam que a linguagem MQL5 é uma solução ideal para um desenvolvimento rápido de sistemas de negociação automatizados. Até mesmo conectores complementares ou bibliotecas para o terminal QUIK, que são destinadas a acelerar os cálculos, não ajudam muito, uma vez que o afunilamento é o tempo de desempenho da negociação.

Agora vamos analisar os detalhes ainda importantes do teste.


Detalhando os relatórios de comparação entre o MetaTrader 5 vs QUICK

Uma aplicação em QLUA mensura o tempo chamando o timer do sistema operacional com a resolução do timer padrão de 10…15,6 milissegundos (geralmente 15.6 ms). Melhoramos a precisão da medição do tempo no QLUA, simplesmente reduzindo a resolução do temporizador do sistema para 1 ms. Isso é feito usando o script SpeedupSystemTimer.mq5, que chama a função timeBeginPeriod da biblioteca do sistema Winmm.dll

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

void OnInit()
  {
   timeBeginPeriod(1);
  }

void OnTick()
  {
  }


Tínhamos executado o script antes de iniciar os testes complementares no MetaTrader 5, permitindo chamadas DLL, o que resultou no erro da medição da operação em QUIK de não mais que 1 ms.

A linguagem MQL5 fornece uma função pronta GetMicrosecondCount(), de modo que a precisão da medição de velocidade no terminal MetaTrader 5 é de 1 microssegundo (1 milissegundo=1000 microssegundos).

#1 Teste de Velocidade de Operações Sicronizadas

O teste implicou na medição da velocidade das negociações sincronizadas, isto é, uma operação de negociação só poderia ser executada após receber uma resposta a partir da confirmação do servidor de negociação que a operação anterior foi executada com sucesso e com uma confirmação completa a partir da bolsa.

Em primeiro lugar, uma série de negociações foram realizadas através do terminal MetaTrader 5, em seguida, a mesma série foi realizada através do terminal QUIK.

O objetivo dos testes foi medir o tempo médio de 10 sincronizações de 1 lote de operações de Compra no mercado:

  • SyncTradeTest.mq5
  • SyncTradeTest.lua

O tempo gasto para executar o funcionamento sincronizado foi medido da seguinte maneira:

  • A linguagem MQL5 fornece a função de sincronização OrderSend e o tempo pode ser facilmente medido no início e no final da série de negociação.

  • A linguagem QLUA não fornece funções de negociação sincronizadas e consequentemnte o status da transação deve ser monitorizado separadamente. O tempo de início da operação foi gravado antes da chamada da sendTransaction() usando a função os.closck(). A conclusão bem executada da transação foi monitorada na versão do handler OnOrder() durante a primeira chamada, quando o evento sobre a execução de negociação relativa a bolsa foi recebida. A diferença entre estes eventos é o tempo necessário para executar uma operação de negociação.
Os resultados das medições mostram que o terminal MetaTrader 5 executa operações sincronizadas até 28 vezes mais rápidas.


#2 Teste de Velocidade de Operações Sem Sincronizar

Este teste é muito mais fácil. Uma ordem de compra para um contrato futuro Si-9.16 foi enviado dez vezes seguidas. Isto nos permite medir o tempo médio de transferência sem sincronizar no QLUA com uma precisão de 1 ms / 10 = 0,10 ms. O MetaTrader 5 não tem erro de medição, pois usa um timer de microssegundos.

Não esperamos pelo resultado da operação: enviando uma oferta ao servidor de negociação imediatamente, seguido por um envio da próxima ordem:

  • AsyncTradeTest.mq5
  • AsyncTradeTest.lua
Os resultados mostraram que MetaTrader 5 executa operações sem sincronia 3.33 vezes mais rápido.


#3 Teste de Atualização do Livro de Ofertas

Algumas estratégias de negociação utilizam a análise do livro de ofertas. No MQL5, o evento de alteração do Livro de Ofertas pode ser rastreado no handler OnBookEvent(); QLUA tem o OnQuote() para essa finalidade.

A velocidade da mudança no Livro de Ofertas foi testada usando os programas abaixos, que estão disponíveis no arquivo ZIP anexo:

  • MarketUpdateTest.mq5
  • MarketUpdateTest.lua

Após a execução dos programas nos dois terminais, registramos que o Livro de Ofertas no MetaTrader 5 foi atualizado cerca de 5 vezes mais rápido. Provavelmente, QUIK limita a frequência da atualizações no livro de ofertas e não expõe algumas das mudanças ocorridas.

Todos os arquivos de código fonte estão anexos ao artigo, por isso qualquer pessoa pode reproduzir estes testes e verificar os resultados.


Por que a diferença é tão impressionante?

Apaixonadamente, nós nos esforçamos para obter um alto desempenho e o valor a cada microssegundo, constantemente otimizando a plataforma de negociação por mais anos.

É por isso que conseguimos um desempenho surpreendente na nossa construção algorítmica na linguagem de programação MQL5 e uma velocidade impressionante na transação das negociações.