Acelerar cálculos com a rede MQL5 em nuvem

MetaQuotes | 10 dezembro, 2013

Teste multitarefa em MetaTrader 5

Você pode longamente enumerar todas as vantagens da nova plataforma de negociação em MetaTrader 5 e argumentar que ela é melhor do que outros programas para análise técnica e negociação nos mercados financeiros. Há mais um argumento incontestável a favor da plataforma. E este último argumento é o verificador de estratégia no terminal do cliente de MetaTrader 5. Neste artigo vamos descrever suas grandes características e explicar por que os desenvolvedores da corporação de software da MetaQuotes são tão orgulhosos dele.

O terminal do cliente de quinta geração tem, não só uma nova linguagem de MQL5 poderosa e rápida, para estratégias de negociação de programação, mas também um verificador de estratégia absolutamente novo que foi projetado a partir do zero. O verificador é usado não só para receber os resultados de estratégias de negociação testados em dados históricos, mas também permite otimizá-lo, ou seja, para encontrar os parâmetros ideais.

A otimização de estratégia é uma corrida múltipla de uma estratégia de negociação no mesmo período da história com diferentes conjuntos de parâmetros dos quais depende. Esta é uma tarefa padrão de cálculos em massa, que pode ser paralelizada, e como você deve ter adivinhado - o verificador de MetaTrader 5 é multitarefa! O que isso realmente significa, veremos agora em um exemplo de otimização de um Expert Advisor a partir do pacote de distribuição padrão.


Condições de teste

Para os fins indicados acima, usamos um computador com processador Intel Core i7 (8 núcleos, 3.07 GHz) e 12 GB de memória com o sistema operacional Windows 7 de 64 bits e MetaTrader 5 de construção 1075.

O Expert Advisor Moving Average.mq5 do pacote de entrega padrão com as seguintes configurações é testado:

Parâmetros otimizados:

Parâmetros de otimização


Otimização no agente local

Primeiro, execute a otimização nos agentes locais. Temos oito agentes de teste, que é um número ideal por conta do número de núcleos disponíveis. Desabilite o uso dos agentes remotos da rede local e os agentes da MQL5 Cloud Network:

Ativar/desativar os grupos de agentes

Após o final da optimização, vá até o Diário: 14,040 passes on 8 local agents took 1 hour, 3 minutes and 44 seconds.

2015.02.05 16:44:38	Statistics	locals 14040 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2015.02.05 16:44:38	Statistics	optimization passed in 1 hours 03 minutes 46 seconds
2015.02.05 16:44:38	Tester	optimization finished, total passes 14040


Otimização usando o grupo local de agentes

Como executar mais tarefas em paralelo? Obviamente, você pode comprar um processador com um grande número de núcleos. No entanto, isso não iria deixá-lo multiplicar o número de tarefas simultâneas. O Strategy Tester resolve este problema. Você pode criar seu próprio grupo de agentes de processamento em sua rede local.


Como criar um grupo de agentes?

Os agentes devem ser instalados em cada computador se houver uma rede local. Se o MetaTrader 5 está instalado no computador, abra o gerenciador de agentes do Strategy Tester utilizando a opção correspondente no menu "Ferramentas".

Gerenciador de Agentes do Strategy Tester

Caso contrário, baixe o aplicativo separado para gerenciar os agentes Agente do Strategy Tester MetaTrader 5 e efetue o processo simples de instalação.

Agente do Strategy Tester MetaTrader 5

No gerenciador, abra a guia agentes:

  1. Selecione o número de agentes que devem ser instalados. Os agentes são instalados com base no número de núcleos lógicos. 
  2. A senha que será utilizada para se conectar ao agentes para uso.
  3. Selecione um intervalo de portas para conexão.
  4. Clique em Adicionar.

Isso é tudo sobre ele. Os agentes estão prontos para uso a partir de outros computadores na rede local.


Como conectar aos seus agentes?

Os agentes serão conectados em apenas alguns cliques. Abra o strategy tester no terminal e vá para a aba "Agentes". Selecione o grupo "Local" e clique em "Adicionar" no menu de contexto.

Como Adicionar Agentes Remotos

A maneira mais fácil e rápida é fazer a escaneamento automático da rede local em um intervalo de endereços IP e portas. Selecione-os e digite a senha de conexão do agente que foi especificado durante a instalação.

Procurar por agentes na LAN

Clique em "Terminar", e todos os agentes encontrados estarão disponíveis para teste.


Teste de Velocidade

Nós adicionamos 20 agentes em 8 locais. Assim, temos 28 agentes no total, sendo 3.5 vezes mais do que tínhamos antes. Vamos otimizar o nosso Expert Advisor e ver o quão rápido ela será executado.

2015.02.05 15:14:44    Statistics    locals 3412 tasks (24%), remote 10628 tasks (75%), cloud 0 tasks (0%)
2015.02.05 15:14:44    Statistics    optimization passed in 15 minutes 47 seconds
2015.02.05 15:14:44    Tester    optimization finished, total passes 14040

Três quartos das tarefas foram realizadas pelos agentes remotos. O tempo da otimização foi reduzido para 15 minutos e 47 segundos, o que é quase 4 vezes mais rápido.

Um crescimento impressionante de velocidade, mas esta solução não está disponível para todos. Não se preocupe. Há uma oportunidade para otimizar o EA ainda mais rápido - vamos tentar usar o agentes da MQL5 Cloud Network!


Otimização usando a rede em nuvem da MQL5

Desta vez não usamos agentes locais, ao invés disso, usamos apenas agentes da rede em nuvem da MQL5. Clique no botão "Começar" e veja o progresso da otimização. O vídeo mostra o processo em tempo real.


Com a MQL5 Cloud Network o processo de otimização é 150 vezes mais rápido!

Durante a otimização, cada nó da rede em nuvem da MQL5 distribui tarefas (de execução individual) aos agentes disponíveis. A otimização levou apenas 26 segundos, dando uma aceleração 147 (!) vezes maior. Os negociantes podem precisar executar centenas de milhares de passos de otimização em um tempo razoável. Com o verificador MetaTrader 5, você precisa de apenas uma hora para o cálculo da rede em nuvem da MQL5, enquanto que, sem a rede, você precisaria de alguns dias. Agora, com um clique, você pode envolver milhares de núcleos para resolver uma tarefa. E ele está disponível para todos! Mas como isso funciona?


A rede em nuvem da MQL5 inclui milhares de computadores

A rede em nuvem da MQL5 consiste de nós - servidores dedicados, os quais os agentes de teste se conectam para executar tarefas. Estes nós são gerenciadores (agregadores) e combinam agentes ao redor do mundo em gerenciadores maiores baseados em sua localização geográfica. Estando no modo de espera, cada agente envia uma mensagem informando que ele está pronto para executar uma tarefa. O intervalo entre essas mensagens depende da carga atual da rede em nuvem da MQL5.

Cada nó da rede é, ao mesmo tempo, tratado pelo MetaTrader 5 como o ponto para acessar a Rede de Nuvem do MQL5; um terminal se conecta a eles utilizando os detalhes da conta do MQL5.com. A lista de servidores da rede em nuvem da MQL5 e o número de agentes de nuvem disponíveis através deles pode ser encontrado no terminal da janela do verificador, dos "agentes" da tabela.

Um agente é livre, isto é, no modo de espera, quando ele não está ocupado executando suas próprias tarefas locais recebidas a partir de um computador ou rede locais. Enquanto um agente está ocupado, não faz nenhuma tentativa de tomar tarefas da rede em nuvem da MQL5. Dentro de alguns minutos, depois de completar os cálculos locais, o agente entra em contato com o nó da rede em nuvem da MQL5 mais próximo e oferece seus serviços. Assim, seus agentes de teste trabalham na rede somente se você não está precisando deles. E, claro, os agentes funcionam na rede de acordo com o cronograma estabelecido.

Graças à facilidade de instalação e às configurações mínimas necessárias do gerenciador de agente MetaTrader 5, milhares de agentes de teste estão disponíveis na rede a qualquer momento. As estatísticas gerais dos agentes de rede em nuvem da MQL5 e tarefas concluídas estão disponíveis na página principal do projeto no https://cloud.mql5.com.


Executando computação distribuída usando os agentes de rede em nuvem da MQL5

Como na otimização convencional, você precisa definir todas as opções de testes e parâmetros de entrada do Expert Advisor. Antes disso, não se esqueça de especificar seu login da comunidade da MQL5 nas configurações do terminal e permitir o uso da rede em nuvem da MQL5. Os quatro passos necessários são mostrados na figura abaixo.

Executando a otimização usando a rede em nuvem da MQL5

Clique no botão "Começar" e o processo de otimização começa. O terminal prepara uma tarefa para os agentes de teste, que inclui:

O terminal MetaTrader 5 se comunica com os nós da rede em nuvem da MQL5 e dá a cada nó um pacote separado de tarefas para executar os passos específicos. Cada nó é, na verdade, um servidor proxy, já que recebe uma tarefa e um pacote de passes e, então, começa a distribuir estas tarefas aos agentes conectados a ele. Neste caso, os arquivos de Expert Advisors, indicadores, bibliotecas e arquivos de dados, não são armazenados nos discos rígidos dos servidores de rede em nuvem do MQL5.

Além disso, os arquivos EX5 não são armazenados em discos rígidos de agentes em nuvem por razões de confidencialidade. Os arquivos de dados são gravados em um disco, mas depois da otimização os arquivos de dados são excluídos.

Este é todo o processo de comunicação entre o seu terminal do cliente e a rede em nuvem da MQL5 - na verdade, ele envia pacotes de tarefas para a rede e aguarda os resultados.


Sincronização na nuvem e distribuição do histórico para os agentes

Cada nó da rede em nuvem da MQL5 mantém o histórico dos símbolos necessários e os envia para os agentes conectados a ele por exigência. Se ele não tem histórico do símbolo XYZ do corretor ABC, então o nó baixa automaticamente os dados do histórico necessários a partir do seu terminal. Portanto, o seu terminal deve estar pronto para fornecer tal histórico.

Recomendamos que você execute um teste único preliminar de uma estratégia em seu computador antes de enviá-lo à rede em nuvem da MQL5. Esta abordagem fornece automaticamente o download e a sincronização de todo o histórico necessário a partir de um servidor de negociação.

Via de regra, 4 a 8 agentes são instalados em um computador moderno, mas os dados do histórico são armazenados em uma única pasta no diretório de instalação do Strategy Tester Agent do MQL5. Todos os agentes em nuvem instalados por um gerenciador do agente de teste de estratégia da MQL5 recebem o histórico dessa pasta. Se 8 agentes forem instalados, e todos eles estiverem disponíveis para a Rede de nuvem da MQL5, o histórico necessário é baixado apenas uma vez. Isso permite que você poupe o tráfego e o espaço do disco rígido. Também é conveniente realizar a sincronização entre os agentes em nuvem e os nós da rede de computação distribuída.

Assim, todos os agentes que realizam a otimização de uma estratégia de negócios em um determinado intervalo de tempo e num determinado símbolo são estipulados automaticamente com o mesmo histórico sincronizado e ambiente de mercado.


Aquecendo

Como a otimização é executada em uma otimização de um computador local? Se você tem 8 núcleos, geralmente oito agentes locais padrões estão disponíveis para você. Quando você clica em "Começar", as tarefas são distribuídas aos agentes locais, o que precisa é baixado (se necessário) e o processo começa. Neste caso, a otimização começa quase que instantaneamente. Mas se você distribuir tarefas para a rede em nuvem da MQL5, o procedimento muda um pouco.

Os agentes em nuvem não estão permanentemente conectados aos gerenciadores de rede, eles são tecnicamente injustificados e onerosos por todos os motivos. Em vez disso, os agentes indagam periodicamente os servidores de rede em nuvem da MQL5 sobre se existem novas tarefas para eles. Isto acontece muitas vezes o suficiente para assegurar a rápida mobilização do número necessário de agentes, e raramente suficiente, de modo que não sobrecarregue o tráfego de rede com tais mensagens. Então, quando você executa a otimização, você pode ver o crescimento do número de agentes que se conectam ao cumprimento de suas tarefas. Este é o processo em tempo real de como os agentes em nuvem acessam a rede em nuvem da MQL5 e recebem tarefas para certos passos.

Se não houver tarefas, os agentes contatam os gerenciadores muito raramente. Mas se uma ordem para calcular milhares (dezenas de milhares) de tarefas chega, a coisa muda. Podemos dizer que a atividade da rede em nuvem da MQL5 aumenta, e depois de completar a tarefa o número de aplicações de agentes para novas tarefas reduz. E se depois de completar uma tarefa, por exemplo da Europa, uma ordem para outras tarefas vem da Ásia, a rede estará pronta para um início rápido. Você pode chamar esse comportamento de "aquecimento" da rede.

Executando cálculos na rede em nuvem da MQL5

Assim, a rede em nuvem da MQL5 está pronta novamente para aceitar novas tarefas e realizá-las no menor tempo possível.


Use a rede em nuvem da MQL5!

A frase "tempo é dinheiro" se torna ainda mais atual a cada ano que passa, e não podemos nos dar ao luxo de esperar por cálculos importantes por dezenas de horas ou até mesmo dias. No momento da redação deste artigo, a rede em nuvem da MQL5 proporciona aumento de cálculos em uma centena de vezes. Com o seu aumento, o ganho no tempo pode crescer até mil vezes ou mais. Além disso, a rede de computação distribuída permite que você resolva não apenas tarefas de otimização de estratégia.

Você pode desenvolver um programa em MQL5 que implementa cálculos matemáticos maciços e requer uma grande quantidade de recursos da CPU. A linguagem da MQL5, em que os programas para o terminal MetaTrader 5 são escritos, está muito perto de C++ e permite que você facilmente traduza algoritmos escritos em outras linguagens de alto nível.

Uma característica importante do verificador do terminal MetaTrader 5 é que as tarefas matemáticas difíceis destinadas a encontrar soluções com grandes conjuntos de variáveis de entrada são facilmente paralelizadas entre os agentes de teste. E você não precisa escrever qualquer código especial para isso - basta conectar-se à rede em nuvem da MQL5 de computação distribuída!