Demonstrando Cálculos Multi-Threaded com Pseudo-Indicador no MetaTrader 5

Mike 2020.01.17 05:13 12 0 0
Anexo

Fala, galera do trading! Hoje vou apresentar um pseudo-indicador que não utiliza buffers, mas que serve para demonstrar uma técnica de cálculos multi-threaded. A ideia aqui é que o indicador possa emitir comandos para cálculos mais pesados, que são realizados em threads separadas, criadas para objetos de gráfico utilizando um Expert Advisor (EA) trabalhador.

As classes que você vai encontrar no arquivo de cabeçalho incluído - MultiThreadedObjectWorker.mqh - vão criar automaticamente os objetos de gráfico e aplicar um template com o Expert Advisor especificado para cada objeto. Assim que o cálculo termina, o objeto é removido automaticamente do gráfico.

Esse exemplo é voltado para usuários que têm alguma experiência em programação.

A ideia surgiu de um artigo sobre WebRequests Assíncronos Multi-Threaded. No artigo você vai encontrar todos os detalhes técnicos sobre como as mensagens (eventos) são enviadas e como os recursos são utilizados para passar dados entre gráficos.

O indicador utiliza uma implementação mais "compacta" da técnica, usando objetos de gráfico ao invés de janelas de gráfico completas. Você pode conferir mais detalhes no fórum.

Não esqueça de compilar o Expert Advisor trabalhador - MultiThreadedObjectWorker - antes de compilar e rodar o indicador em si - MultiThreadedIndicator.

Parâmetros de Entrada

  • sinput int _Cores = 1; - número de threads a serem utilizadas (não use mais do que os núcleos físicos disponíveis)
  • sinput int _Tasks = 1; - número de pseudo-tarefas a serem executadas em paralelo (use um número maior que o número de núcleos para ver o desempenho em paralelo)
  • input string MultiThreadedScriptPath = "Experts\MultiThreadedObjectWorker.ex5"; - deve indicar o caminho do Expert Advisor trabalhador

Cada pseudo-tarefa calcula uma série de funções sqrt (só para fins de demonstração). Você pode mudar isso em seus projetos MQL para qualquer outro algoritmo que consuma tempo.

Para começar os cálculos paralelos após o indicador ser anexado a um gráfico, basta clicar no gráfico. Todas as fases importantes do processo (tanto nos programas MQL5 do cliente quanto no trabalhador) são registradas.

O programa MQL do cliente que emite os pedidos de cálculos paralelos pode ser não só indicadores, mas também Expert Advisors. Scripts e serviços não são suportados pela plataforma.

Usando o arquivo de cabeçalho MultiThreadedObjectWorker.mqh, você deve implementar sua própria troca de dados entre o cliente MQL5 e o Expert Advisor trabalhador.

Veja abaixo dois exemplos dos logs:

Execução de 4 tarefas em 2 núcleos (2 threads em paralelo)

Execução de 4 tarefas em 2 núcleos (2 threads em paralelo)

Quando executamos 4 tarefas em 2 núcleos, temos 2 threads em paralelo, o que proporciona uma execução duas vezes mais rápida do que em 1 núcleo (veja a comparação: 3354ms acima e 6240ms abaixo).

Execução de 4 tarefas em 1 núcleo (thread única - programa MQL padrão)

Execução de 4 tarefas em 1 núcleo (thread única - programa MQL padrão)

Mais núcleos significam mais velocidade!

Lista
Comentário 0