Teste o novo compilador MQL5 para plataformas x64 - cálculos 2 a 10 vezes mais rápidos!

 

Como prometemos anteriormente, estamos lançando um novo compilador MQL5 otimizado para a versão de 64 bits do MetaTrader 5.

Mantemos total compatibilidade do código gerado tanto para versões de 32 bits do terminal quanto para versões mais antigas dos terminais.

Você já pode atualizar para o MetaTrader 5 build 1108 com sua nova funcionalidade em nosso servidor MetaQuotes-Demo. Para habilitar o novo compilador otimizador, adicione a chave Optimize=1 ao [Especialistas] no metaeditor.ini:

[Experts]
Author=Copyright 2014, MetaQuotes Software Corp.
Address=http://www.mql5.com
Optimize=1


Para testar o desempenho dos compiladores MQL4, MQL5 e C++, usamos testes padrão de compilação. Todos os arquivos fonte são anexados junto com a planilha de Excel, para que todos possam checá-la novamente.

Por enquanto, vamos dar uma olhada nos resultados dos testes no ambiente a seguir:

  • Intel Xeon E5-2687W v3 @3.10 Ghz, 20 núcleos, 32 Gb DDR4 2100
  • MQL4 no MetaTrader 4 build 794
  • MQL5 no MetaTrader 5 build 1111 x64, modo normal
  • MQL5 no MetaTrader 5 construir 1111 x64, novo compilador, modo Optimize=1
  • C++ com Visual Studio 2012 Update 4, código x64, otimização máxima
  • Tempo em milissegundos, quanto menos, melhor

TesteMT4 794MT5 1111 x64
MT5 1111 NovoC++ x64Comentário de
TestAckermann 3718 3109 0 0 Perfeito, os dois compiladores foram capazes de otimizar os cálculos de compilação, jogando fora todo o código
TestArrays 15063 2531 203 31 Ainda há espaço para melhorias
TestBubbleSort 10609 2484 656 860 Surpreendentemente, a MQL5 tem se adiantado na classificação das bolhas
TestCall 922 891 0 0 Perfeito, os dois compiladores foram capazes de otimizar os cálculos de compilação, jogando fora todo o código
TestFibo 2547 1187 0 0 Perfeito, os dois compiladores foram capazes de otimizar os cálculos de compilação, jogando fora todo o código
TestMatrix 15375 4359 422 281 Ainda há espaço para melhorias
TestMoments 5719 4323 4078 0 Talvez, ao incluirmos mais métodos de otimização, sejamos capazes de destruir o código como MSVC
TestNestedLoop 6219 6141 0 0 Perfeito, os dois compiladores foram capazes de otimizar os cálculos de compilação, jogando fora todo o código
TestPiCalculado 5047 3500 1875 1859 Nariz a nariz com MSVC
TestRandom 2375 1828 468 438 Quase tão bom quanto o MSVC
TestSieve 13578 4031 875 515 Fechar
TestString 187 218 422 266 Otimizar e ultrapassar o MSVC, este é um fracasso temporário devido a uma otimização insuficiente
TestStrPrep 3938 3328 1703 1875 Mais rápido que a MSVC
TestStrRev 4000 3141 2719 438 Temos que descobrir isso.
TestStrSum 5344 2812 2844 0 Possivelmente, adicionando mais métodos de otimização, seremos capazes de eliminar o código como no MSVC


Para ver a tabela detalhada, por favor clique sobre ela.


Quais são as conclusões:

  1. A MQL4 está perdendo seriamente para a MQL5 mesmo com base em um compilador

    A MQL5 é mais rápida que a MQL4 desde dezenas de porcentagens até várias vezes. A razão está no ambiente de execução e 32 bits. O MetaTrader 5 tem um tempo de execução muito mais eficiente e em constante desenvolvimento.

  2. O novo compilador MQL5 de 64 bits é 2 a 10 vezes mais rápido do que o MQL5 atual

    O desenvolvimento do novo compilador demorou muito tempo, mas os ganhos foram surpreendentes. Há alguns problemas com a otimização das operações de cordas, mas tentaremos acelerá-los também.

  3. O novo compilador está muito próximo da qualidade e da velocidade do compilador Visual Studio 2012 x64.

    Ainda não ativamos todos os métodos de otimização desde que ainda estamos testando-os. Portanto, os resultados continuarão a melhorar.


O que isso dá aos comerciantes?

A capacidade de fazer mais cálculos na mesma quantidade de tempo e menos pensar em mudar para uma DLL. Isto é especialmente importante para aqueles que fazem as contas pesadas.

 

Muito bem feito!

 

Profissionais em sua área!

Obrigado!

 

Além disso - o próximo lançamento até 20 de maio muito provavelmente terá um depurador disponível nos dados históricos.

Estaremos mostrando na iFX Expo nos dias 26 e 28 de maio.

iFX EXPO International 2015
  • iFX EXPO
  • www.ifxexpo.com
Booth 01 Get the world’s fastest HTML5 chart for mobile & desktop, and the highest user-rated mobile apps - with or without trading. Founded in 1998, NetDania pioneered streaming price technology, and have since delivered solutions to global Tier-1 banks, brokers, currency managers, and analysts. With a strong position within corporate FX and...
 

Renat Fatkhullin:

  1. O novo compilador MQL5 de 64 bits é 2 a 10 vezes mais rápido do que o compilador MQL5 atual.

    O desenvolvimento do novo compilador levou muito tempo, mas os ganhos foram surpreendentes. Há alguns problemas com a otimização das operações de cordas, mas tentaremos acelerá-los também.

  2. O novo compilador está muito próximo da qualidade e da velocidade do compilador Visual Studio 2012 x64.

    Ainda não ativamos todos os métodos de otimização desde que ainda estamos testando-os. Portanto, os resultados continuarão a melhorar.


Além disso, um depurador de dados históricos provavelmente estará disponível no próximo lançamento no dia 20 de maio.

Demonstraremos isso na iFX Expo nos dias 26 e 28 de maio.

Notícias muito bem-vindas, obrigado!
 
Obrigado, desejo-lhe mais sucesso!
 
Renat Fatkhullin:

O novo compilador aproxima-se muito da qualidade e velocidade do compilador Visual Studio 2012 x64

Ainda não ativamos todos os métodos de otimização desde que ainda estamos testando-os. É por isso que os resultados continuarão a melhorar.

Boas notícias ! Muito bem feito!

Renat Fatkhullin:

Você pode fazer mais cálculos ao mesmo tempo e pensar menos em mudar para DLL. Isto é especialmente importante para aqueles que fazem matemática pesada.


Sim, eu realmente não consigo pensar em mais nenhuma tarefa onde DLLs externas são necessárias.


Renat Fatkhullin:

Além disso - o próximo lançamento até 20 de maio muito provavelmente terá um depurador disponível nos dados históricos.

Esta é realmente a característica mais útil. Muito obrigado, de fato.

Pessoalmente, tenho apenas uma pergunta - dicas para matrizes. Para matrizes privadas, o problema é resolvido enrolando uma matriz em uma classe.

Mas para arrays passados para a função OnCalculate() eu tenho que copiar os dados em buffers internos cada vez, e só então passar apontadores em objetos analisadores e manipuladores. Uma vez que eu tentei passar indicações usando memcpy, mas de alguma forma a velocidade foi quase a mesma, e na minha opinião, tais "truques" não deveriam ser aplicados.

Talvez a possibilidade de usar o tipo de referência seja mais aceitável. Em geral, a tarefa é acessar os elementos da matriz sem copiá-los.

 
George Merts:

Sim, eu não consigo pensar em mais tarefas onde DLLs externas são necessárias.

Por exemplo, comunicações interterminais.
 
Eu tentei compilar um de meus robôs com otimização.
Acontece que a atribuição do parâmetro de entrada de desvio ao campo de desvio da instância da estrutura MqlTradeRequest leva a erro de geração de código.
Exemplo hipotético (tudo o mais foi removido):
sinput ulong deviation = 100;
int OnInit()
  {
        MqlTradeRequest request =
        {
                0
        };
        request.deviation = deviation;
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
Eu recebo"erro de geração de código 1 1".

Se você atribuir apenas "100":

int OnInit()
  {
        MqlTradeRequest request =
        {
                0
        };
        request.deviation = 100;
//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }

...então a compilação será feita sem erros. Nota, tenho o processador AMD Athlon II X4 645, 3,1 GHz. Talvez seja importante (só esta semana a MQL4 com servicedesk tem pegado algum bug na AMD).

Meu compilador não se queixa de mais nada.

 
Obrigado por relatar o erro - nós o consertaremos.
Razão: