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

 
Mohammad Hossein Sadeghi:
Muito bom o artigo, obrigado. E quanto ao modo assíncrono do WinINet?

Não tenho planos de implementar tal coisa, desculpe.

 

Na discussão russa do artigo, é possível encontrar uma investigação mais aprofundada da abordagem e uma implementação alternativa baseada em objetos gráficos.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"

Stanislav Korotky, 2018.11.14 14:20

Eu publiquei uma maneira alternativa de iniciar solicitações da Web - com a ajuda de objetos gráficos, que usam um modelo com um assistente especializado. Ele pode ser usado tanto por especialistas quanto por indicadores. As dependências são as mesmas do artigo. Os arquivos da nova implementação:

  • multiwebobjectworker.mqh - arquivo de cabeçalho com classes comuns;
  • multiwebobjectworker.mq5 é um especialista em funcionamento que executa solicitações da Web dentro de objetos gráficos;
  • multiwebindicator.mq5 - indicador sem buffer que mostra o lançamento de solicitações da Web;

Um objeto é criado para cada solicitação, um assistente especializado é criado nele e, ao final da solicitação, o objeto é excluído. A troca de dados e resultados da consulta, como no artigo, é feita por meio de recursos.

A julgar pelos logs, esse mecanismo não oferece paralelismo completo na execução da consulta, pois os objetos provavelmente compartilham uma fila de eventos comum. Exemplo de registro:

2018.11.14 15:11:58.492 multiwebindicator (EURUSD,H1)   129912254742671348: Starting chart object WRS1 129912254742671349
2018.11.14 15:11:58.694 multiwebindicator (EURUSD,H1)   129912254742671348: Starting chart object WRS2 129912254742671350
2018.11.14 15:11:58.819 multiwebindicator (EURUSD,H1)   129912254742671348: Starting chart object WRS3 129912254742671351
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: OnInit
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: Reading request \Indicators\multiwebindicator.ex5::WRS_0_129912254742671348
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: Got 64 bytes in request
2018.11.14 15:11:58.960 multiwebobjectworker (EURUSD,H1)        129912254742671349: GET https://google.com/ User-Agent: n/a 5000 
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: OnInit
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: Reading request \Indicators\multiwebindicator.ex5::WRS_1_129912254742671348
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: Got 60 bytes in request
2018.11.14 15:11:58.975 multiwebobjectworker (EURUSD,H1)        129912254742671350: GET https://ya.ru User-Agent: n/a 5000 
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: OnInit
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: Reading request \Indicators\multiwebindicator.ex5::WRS_2_129912254742671348
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: Got 72 bytes in request
2018.11.14 15:11:59.084 multiwebobjectworker (EURUSD,H1)        129912254742671351: GET https://www.startpage.com/ User-Agent: n/a 5000 
2018.11.14 15:11:59.162 multiwebobjectworker (EURUSD,H1)        129912254742671350: Done in 187 ms
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   129912254742671348: Result code 200
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671350
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   129912254742671348: Got 16592 bytes in response
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   GET https://ya.ru
2018.11.14 15:11:59.178 multiwebindicator (EURUSD,H1)   Received 3734 bytes in header, 12775 bytes in document
2018.11.14 15:11:59.256 multiwebobjectworker (EURUSD,H1)        129912254742671350: OnDeinit
2018.11.14 15:11:59.272 multiwebobjectworker (EURUSD,H1)        129912254742671349: Done in 297 ms
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   129912254742671348: Result code 200
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671349
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   129912254742671348: Got 12688 bytes in response
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   GET https://google.com/
2018.11.14 15:11:59.334 multiwebindicator (EURUSD,H1)   Received 790 bytes in header, 11813 bytes in document
2018.11.14 15:11:59.350 multiwebobjectworker (EURUSD,H1)        129912254742671349: OnDeinit
2018.11.14 15:11:59.833 multiwebobjectworker (EURUSD,H1)        129912254742671351: Done in 749 ms
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   129912254742671348: Result code 200
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671351
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   129912254742671348: Got 45212 bytes in response
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   GET https://www.startpage.com/
2018.11.14 15:11:59.833 multiwebindicator (EURUSD,H1)   Received 822 bytes in header, 44307 bytes in document
2018.11.14 15:11:59.849 multiwebindicator (EURUSD,H1)   > > > Async WebRequest workers finished 3 tasks in 1357 ms
2018.11.14 15:11:59.880 multiwebobjectworker (EURUSD,H1)        129912254742671351: OnDeinit

Estou anexando os códigos-fonte aqui também.

Verifique também se há versões atualizadas dos arquivos include do fxsaber, que são usados nas dependências - eles podem conter correções de bugs e acelerações.

Arquivos anexados:
 
Artigo incrível. Está abrindo as portas para muitas possibilidades. Obrigado a você.
 

Absolutely amazingly incredible article !!!

Congratulations and thank you, @marketeer !

 

Não consigo fazer com que ele seja executado.

Erro 4002.

Após uma pequena análise, descobri que o wyker não recebe o URL. Em vez disso, ele recebe um valor nulo

 
Someone Else:

Não consigo fazer com que ele funcione.

Erro 4002.

Após uma pequena análise, descobri que o wyker não recebe o URL. Em vez disso, ele recebe um valor nulo

Quais programas/bibliotecas foram usados exatamente (você pode simplesmente anexá-los)? Também são necessários registros específicos. Versão do MT5. Tente em outras versões anteriores do MT5.

 

Tudo é simples. Baixei o arquivo do site e executei o modo de diagnóstico descrito no texto, alterando apenas os sites, em vez de três, especificando apenas o google.com prescrito no webquest do terminal.

a versão 5 build 2085 não é a mais recente no momento. antes dessa versão, não me lembro, ela também era a mais recente naquele momento.

dos registros

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > > > > Chamadas padrão do WebRequest 1 concluídas em 141ms

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) Pool manager transfers taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Accepted: taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 after 0 retries

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Lendo a solicitação taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Recebeu 0 bytes na solicitação

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: 0

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) WebRequest error code 4002

2019.07.04 14:11:31.890 multiwebclient (GBPUSD,M5) Código de resultado de 131797648225084729: 4002, agora inativo

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: Falha com o código 4002


Substituída a data do recurso como estava nos comentários acima, a situação não mudou.

Em princípio, você mesmo pode repetir o procedimento e verificar como ele funciona.....

 
Someone Else:

Tudo é simples. Baixei o arquivo do site e executei o modo de diagnóstico descrito no texto, alterando apenas os sites, em vez de três, especificando apenas o google.com prescrito no webquest do terminal.

A versão 5 build 2085 não é a mais recente no momento. Não me lembro da versão anterior, ela também era a mais recente naquele momento.

dos registros

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > > > > Chamadas padrão do WebRequest 1 concluídas em 141ms

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) Pool manager transfers taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Accepted: taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 after 0 retries

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Lendo a solicitação taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Recebeu 0 bytes na solicitação

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: 0

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) WebRequest error code 4002

2019.07.04 14:11:31.890 multiwebclient (GBPUSD,M5) Código de resultado de 131797648225084729: 4002, agora inativo

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: Falha com o código 4002


Substituída a data do recurso como estava nos comentários acima, a situação não mudou.

Em princípio, você mesmo pode repetir o procedimento e verificar como ele funciona.....

Não foi possível reproduzir. Aqui está o registro da execução no build 2093:

2019.07.06 23:13:31.313 multiweb (EURUSD,H1)    OnInit 132069173221452536
2019.07.06 23:13:31.313 multiweb (EURUSD,H1)    WebRequest Pool Manager started in 132069173221452536
2019.07.06 23:13:32.810 multiweb (EURUSD,H1)    OnInit 132069176123428674
2019.07.06 23:13:32.810 multiweb (EURUSD,H1)    WebRequest Worker started in 132069176123428674; manager in 132069173221452536
2019.07.06 23:13:32.998 multiweb (EURUSD,H1)    OnInit 132069176125768678
2019.07.06 23:13:32.998 multiweb (EURUSD,H1)    WebRequest Worker started in 132069176125768678; manager in 132069173221452536
2019.07.06 23:13:33.169 multiweb (EURUSD,H1)    OnInit 132069176127796682
2019.07.06 23:13:33.169 multiweb (EURUSD,H1)    WebRequest Worker started in 132069176127796682; manager in 132069173221452536
2019.07.06 23:14:36.159 multiwebclient (GBPJPY,H1)      > > > Standard WebRequest 3 calls finished in 874 ms
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    Pool manager transfers \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_1_132069176509557415
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176123428674: Reading request \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_1_132069176509557415
2019.07.06 23:14:36.159 multiwebclient (GBPJPY,H1)      Accepted: \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_1_132069176509557415 after 0 retries
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    Pool manager transfers \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_2_132069176509557415
2019.07.06 23:14:36.159 multiwebclient (GBPJPY,H1)      Accepted: \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_2_132069176509557415 after 0 retries
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176125768678: Reading request \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_2_132069176509557415
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176123428674: Got 64 bytes in request
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176123428674: GET https://google.com/ User-Agent: n/a 5000 
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176125768678: Got 60 bytes in request
2019.07.06 23:14:36.159 multiweb (EURUSD,H1)    132069176125768678: GET https://ya.ru User-Agent: n/a 5000 
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    Pool manager transfers \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_3_132069176509557415
2019.07.06 23:14:36.174 multiwebclient (GBPJPY,H1)      Accepted: \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_3_132069176509557415 after 0 retries
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    132069176127796682: Reading request \Experts\multiwebclient.ex5::GBPJPY_PERIOD_H1_3_132069176509557415
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    132069176127796682: Got 72 bytes in request
2019.07.06 23:14:36.174 multiweb (EURUSD,H1)    132069176127796682: GET https://www.startpage.com/ User-Agent: n/a 5000 
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      132069176509557415: Result code 200
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      132069176509557415: Reading result \Experts\multiweb.ex5::WRR_132069176125768678
2019.07.06 23:14:36.283 multiweb (EURUSD,H1)    132069176125768678: Done in 125 ms
2019.07.06 23:14:36.283 multiweb (EURUSD,H1)    Result code from 132069176125768678: 200, now idle
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      132069176509557415: Got 17664 bytes in response
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      GET https://ya.ru
2019.07.06 23:14:36.283 multiwebclient (GBPJPY,H1)      Received 4043 bytes in header, 13540 bytes in document
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      132069176509557415: Result code 200
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      132069176509557415: Reading result \Experts\multiweb.ex5::WRR_132069176123428674
2019.07.06 23:14:36.439 multiweb (EURUSD,H1)    Result code from 132069176123428674: 200, now idle
2019.07.06 23:14:36.439 multiweb (EURUSD,H1)    132069176123428674: Done in 281 ms
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      132069176509557415: Got 12744 bytes in response
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      GET https://google.com/.
2019.07.06 23:14:36.439 multiwebclient (GBPJPY,H1)      Received 736 bytes in header, 11927 bytes in document
2019.07.06 23:14:36.455 multiwebclient (GBPJPY,H1)      132069176509557415: Result code 200
2019.07.06 23:14:36.455 multiwebclient (GBPJPY,H1)      132069176509557415: Reading result \Experts\multiweb.ex5::WRR_132069176127796682
2019.07.06 23:14:36.455 multiweb (EURUSD,H1)    Result code from 132069176127796682: 200, now idle
2019.07.06 23:14:36.455 multiweb (EURUSD,H1)    132069176127796682: Done in 280 ms
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      132069176509557415: Got 32520 bytes in response
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      GET https://www.startpage.com/
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      Received 956 bytes in header, 31482 bytes in document
2019.07.06 23:14:36.471 multiwebclient (GBPJPY,H1)      > > > Async WebRequest workers [3] finished 3 tasks in 312 ms

Procure um problema em suas configurações ou no sistema.

 

Confirmo que, nas configurações padrão , o script não funciona - recebo o mesmo"WebRequest error code 4002...".


MetaTrader 5

Versão: 5.00 build 2093

02 jul 2019


===Corte aqui====

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Accepted: aQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::USDJPY_PERIOD_H1_2_128968169154443359 after 0 retries

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest error code 4002

===Corte aqui====


Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
Торговые советники и собственные индикаторы - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
  • www.metatrader5.com
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
 
Igor K:

Confirmo que, nas configurações padrão , o script não funciona - recebo o mesmo"WebRequest error code 4002"....


MetaTrader 5

Versão: 5.00 build 2093

02 de julho de 2019


===cortar aqui====

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Accepted: aQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::USDJPY_PERIOD_H1_2_128968169154443359 after 0 retries

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest error code 4002

===Corte aqui====


Por favor, escreva mais detalhes - versão do sistema operacional, antivírus, etc. Estou usando o Win 7, o MT5 build 2093 funciona bem, como mostrado acima.

Basicamente, a pergunta é para o MQ, porque o erro está relacionado à "chamada interna", mas não acredito em ajuda - o suporte está fechado.

O código-fonte do artigo é de código aberto, portanto, tente resolver o problema na máquina em que o erro foi reproduzido.