Discussão do artigo "WebRequest multi-threaded assíncrono em MQL5" - página 5

 

Tentei com o firewall e o defensor desativados - mesmo resultado.

Win 10 Home. Sem antivírus, porque sou "exigente com conexões"

 

Boa tarde,

O artigo é muito interessante.

Se eu puder jogar minha pedra....

Devido à introdução de um grande número de funções de calendário pelos desenvolvedores, a solicitação http se tornou menos exigida (não acho que outra solicitação de dados tenha sido amplamente usada). Estou interessado principalmente na possibilidade de executar o algoritmo de otimização em paralelo (periodicamente, por parâmetro de drawdown, etc., não importa).

Se possível, você poderia responder se esse mecanismo (com execução em um thread separado) é possível nos Serviços?

Cumprimentos pelo trabalho realizado pelo autor

 
Олег Миронов:

Devido à introdução de um grande número de funções de calendário pelos desenvolvedores, a solicitação http se tornou menos exigida (não acho que outra solicitação de dados tenha sido amplamente usada). Eu estava interessado principalmente na possibilidade de executar o algoritmo de otimização em paralelo (periodicamente, por parâmetro de drawdown, etc., não importa).

Se possível, você pode responder se esse mecanismo (com execução em um thread separado) é possível nos Serviços?

O calendário incorporado é bastante genérico, portanto, ainda há muitas informações úteis sobre o perfil que podem ser baixadas de fontes de terceiros. Além disso, não se trata apenas de notícias, mas também de sinais, cotações de bolsas de criptomoedas e assim por diante. Há uma ideia de usar threads paralelos para cálculos em vez de solicitações da Web, mas isso ainda não foi implementado. Mas não entendo sobre serviços. Você se refere aos serviços como programas MQL5? O MQ não forneceu nenhuma comunicação bidirecional com outros programas para eles (é impossível enviar uma "tarefa" para cálculo e obter o resultado). Portanto, esses serviços estão excluídos.

 

Publiquei na base de código um exemplo de um indicador que solicita longos cálculos paralelos em calculadoras especializadas, que são automaticamente colocadas em objetos de gráfico no gráfico atual (janela).

O indicador sem buffers serve apenas para demonstrar a possibilidade de solicitar cálculos pesados em outros threads. Nos Expert Advisors, certamente também é possível fazer isso dessa forma. Para implementá-lo, é necessário escrever seus próprios empacotadores e desempacotadores de parâmetros, tanto do lado do programa MQL de chamada quanto do calculador especialista.

Base de código

Demonstração de pseudo-indicador com cálculos assíncronos de vários threads

Stanislav Korotky, 2020.01.16 20:13

Este é um indicador sem buffers que demonstra cálculos paralelos de vários threads em objetos de gráfico que hospedam o consultor especialista do trabalhador.

Exemplos de registros

4 tarefas em 1 núcleo:

Execução de 4 tarefas em 1 núcleo (thread)

4 tarefas em 2 núcleos (2 vezes mais rápido):

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

 
Stanislav Korotky:

Foi publicado na base de código um exemplo de um indicador que solicita cálculos paralelos longos em Expert Advisors, que são automaticamente colocados em objetos de gráfico no gráfico atual (janela).

O indicador sem buffers serve apenas para demonstrar a possibilidade de solicitar cálculos pesados em outros threads. Nos Expert Advisors, certamente também é possível fazer isso dessa forma. Para implementá-lo, é necessário escrever seus próprios empacotadores e desempacotadores de parâmetros, tanto do lado do programa MQL de chamada quanto do calculador especialista.


e, em seguida, esse indicador também é acionado pelo EA :-)

 

Ao iniciar o terminal, o Expert Advisor verifica a presença de uma variável global no gráfico e, se ela estiver ausente, cria-a e define seu número. Os clientes do gráfico enviam mensagens para o gerenciador de gráficos.

Em seguida, o usuário fecha a janela do gerenciador de gráficos. Os clientes enviam solicitações para uma janela que não existe mais.

Em outras palavras, o artigo ignora o problema de alterar o gerenciador de gráficos. Ou seja, basta fechar o gerenciador de gráficos e todo o esquema entra em colapso.

 
Алексей Барбашин:

Ao iniciar o terminal, o Expert Advisor verifica a presença de uma variável global no gráfico e, se ela estiver ausente, cria-a e define seu número. Os clientes de gráfico enviam mensagens para o gerenciador de gráficos.

Em seguida, o usuário fecha a janela do gerenciador de gráficos. Os clientes enviam solicitações para uma janela que não existe mais.

Em outras palavras, o artigo negligenciou o problema de alterar o gerenciador de gráficos. Ou seja, basta fechar o gerenciador de gráficos e todo o esquema entra em colapso.

O artigo propõe uma tecnologia e sua implementação mínima. A verificação de todas as situações problemáticas possíveis estava além do escopo do artigo. Os clientes podem verificar a existência de um gráfico pelo seu ID (disponível por meio de pool.getManagerID). Todo o código-fonte é de código aberto.

Observe que, no processo de desenvolvimento da ideia apresentada no artigo, foi desenvolvido um esquema de processamento simplificado de consultas multithread usando objetos. Nesse caso, o problema mencionado não é "por design". Os códigos-fonte também estão anexados neste tópico. Portanto, é recomendável usá-los.

 
Stanislav Korotky:

O artigo propôs a tecnologia e sua implementação mínima. A verificação de todas as situações problemáticas possíveis estava além do escopo do artigo. Os clientes podem verificar a existência de um gráfico pelo seu ID (disponível por meio de pool.getManagerID). Todos os códigos-fonte são de código aberto.

Observe que, no processo de desenvolvimento da ideia apresentada no artigo, foi desenvolvido um esquema de processamento simplificado de consultas multithread usando objetos. Nesse caso, o problema mencionado não é "por design". Os códigos-fonte também estão anexados neste tópico. Portanto, é recomendável usá-los.

Eu vi o desenvolvimento do tópico )) Mas, infelizmente, o uso de objetos "chart" está disponível, como foi indicado, somente no MT5.

 
Stanislav Korotky:

O calendário incorporado é bastante geral, portanto, ainda há muitas informações de perfil úteis que podem ser baixadas de fontes de terceiros. Além disso, não se trata apenas de notícias, mas também de sinais e cotações de bolsas de criptomoedas, etc. Há uma ideia de usar threads paralelos para cálculos em vez de solicitações da Web, mas isso ainda não foi implementado. Mas eu não entendo sobre serviços. Você se refere aos serviços como programas MQL5? O MQ não forneceu nenhuma comunicação bidirecional com outros programas para eles (é impossível enviar uma "tarefa" para cálculo e obter o resultado). Portanto, esses serviços estão excluídos.

Muito obrigado. Você entendeu tudo corretamente sobre os serviços. As calculadoras especializadas foram a resposta direta. Extremamente interessante. Mais uma vez, obrigado.
 
Qual deve ser o deslocamento (input int MessageBroadcast) para eventos de usuário se os elementos de interface do usuário da biblioteca padrão(Include\Controls\) forem usados no programa? Como posso descobrir isso?