Discusión sobre el artículo "WebRequest multiflujo asincrónico en MQL5" - página 4

 
Mohammad Hossein Sadeghi:
Buen artículo, gracias. ¿Qué tal el modo asíncrono de WinINet?

No tengo planes de implementar tal cosa, lo siento.

 

En la discusión rusa del artículo se puede encontrar una investigación más profunda del enfoque y una implementación alternativa basada en objetos gráficos.

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

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

Stanislav Korotky, 2018.11.14 14:20

Publico una forma alternativa de lanzar peticiones web - con la ayuda de objetos gráficos, que utilizan una plantilla con un asistente experto. Se puede utilizar tanto de expertos como de indicadores. Las dependencias son las mismas que en el artículo. Los archivos de la nueva implementación:

  • multiwebobjectworker.mqh - archivo de cabecera con clases comunes;
  • multiwebobjectworker.mq5 es un experto en funcionamiento que realiza peticiones web dentro de objetos gráficos;
  • multiwebindicator.mq5 - indicador sin búfer que muestra el lanzamiento de peticiones web;

Para cada solicitud se crea un objeto, en él se crea un asistente experto y, al final de la solicitud, se elimina el objeto. El intercambio de datos de consulta y resultados, como en el artículo, se realiza a través de recursos.

A juzgar por los registros, este mecanismo no proporciona un paralelismo completo en la ejecución de consultas, ya que los objetos probablemente comparten una cola de eventos común. Ejemplo de log:

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

Adjunto aquí también los fuentes.

Por favor, comprueba también las versiones actualizadas de los archivos include de fxsaber, que se utilizan en las dependencias - pueden contener correcciones de errores y mejoras de velocidad.

Archivos adjuntos:
 
Awesome article. Openning doors for a lot of possibilities!. Thanks you.
 

¡¡¡Absolutamente increíble increíble artículo !!!

¡Enhorabuena y gracias, @marketeer !

 

No consigo que funcione.

Error 4002.

Tras un pequeño análisis he descubierto que el wyker no recibe la URL. En su lugar recibe un valor nulo

 
Someone Else:

No consigo que funcione.

Error 4002.

Tras un pequeño análisis he descubierto que el wyker no recibe la URL. En su lugar recibe un valor nulo

¿Qué programas/bibliotecas se utilizaron exactamente (puedes adjuntarlos)? También se necesitan logs específicos. Versión de MT5. Prueba en otras versiones anteriores de MT5.

 

Todo es simple. He descargado el archivo desde el sitio y corrió en el modo de diagnóstico se describe en el texto, cambiando sólo los sitios, en lugar de tres, especificado sólo google.com prescrito en el webquest de la terminal.

la version 5 build 2085 no es la ultima en este momento. antes de esta version no recuerdo, tambien era la ultima en ese momento.

desde logs

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > > Standard WebRequest 1 llamadas terminadas en 141ms

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) El gestor del pool transfiere taQuotes\TerminalD0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Aceptado: taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Expertsmultiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 después de 0 reintentos

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Leyendo petición taQuotes\TerminalD0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Got 0 bytes in request

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

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) WebRequest código de error 4002

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

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: Fallo con código 4002


Sustituida la fecha del recurso como estaba en los comentarios anteriores la situación no ha cambiado.

En principio puedes repetirlo tu mismo y comprobar como funciona.....

 
Someone Else:

Todo es simple. He descargado el archivo desde el sitio y se ejecutó en el modo de diagnóstico se describe en el texto, cambiando sólo los sitios, en lugar de tres, especificado sólo google.com prescrito en el webquest de la terminal.

La versión 5 build 2085 no es la última en este momento, no recuerdo la versión anterior, también era la última en ese momento.

de los registros

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > > Standard WebRequest 1 llamadas terminadas en 141ms

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) El gestor del pool transfiere taQuotes\TerminalD0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Aceptado: taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Expertsmultiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 después de 0 reintentos

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Lectura de solicitud taQuotes\TerminalD0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Got 0 bytes in request

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

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) WebRequest código de error 4002

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

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: Error con código 4002


Sustituida la fecha del Recurso como estaba en los comentarios anteriores la situación no ha cambiado.

En principio puedes repetirlo tu mismo y comprobar como funciona.....

No se ha podido reproducir. Aquí tienes el log de la ejecución en la 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

Busca un problema en la configuración o en el sistema.

 

Confirmo que en la configuración por defecto el script no funciona - obtengo el mismo"WebRequest error code 4002...".


MetaTrader 5

Versión: 5.00 build 2093

02 Jul 2019


===cortar aquí===

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Aceptado: aQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::USDJPY_PERIOD_H1_2_128968169154443359 después de 0 reintentos

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) WebRequest código de error 4002

===cut here===


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

Confirmo que con la configuración por defecto el script no funciona - obtengo el mismo"WebRequest error code 4002"....


MetaTrader 5

Versión: 5.00 build 2093

02 Jul 2019


===cortar aquí===

2019.07.23 00:47:37.182 multiwebclient (USDJPY,H1) Aceptado: aQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::USDJPY_PERIOD_H1_2_128968169154443359 después de 0 reintentos

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

===cut here===


Por favor, escriba más detalles - versión del sistema operativo, antivirus, etc. Estoy en Win 7, MT5 build 2093 funciona bien como se muestra arriba.

Básicamente, la pregunta es para MQ, porque el error está relacionado con "llamada interna", pero no creo en la ayuda - el soporte está cerrado.

El código fuente del artículo es de código abierto, así que trate de resolver el problema en la máquina donde se reproduce el error.