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.
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.1415:11:58.492 multiwebindicator (EURUSD,H1) 129912254742671348: Starting chart object WRS1 1299122547426713492018.11.1415:11:58.694 multiwebindicator (EURUSD,H1) 129912254742671348: Starting chart object WRS2 1299122547426713502018.11.1415:11:58.819 multiwebindicator (EURUSD,H1) 129912254742671348: Starting chart object WRS3 1299122547426713512018.11.1415:11:58.960 multiwebobjectworker (EURUSD,H1) 129912254742671349: OnInit
2018.11.1415:11:58.960 multiwebobjectworker (EURUSD,H1) 129912254742671349: Reading request \Indicators\multiwebindicator.ex5::WRS_0_129912254742671348
2018.11.1415:11:58.960 multiwebobjectworker (EURUSD,H1) 129912254742671349: Got 64 bytes in request
2018.11.1415:11:58.960 multiwebobjectworker (EURUSD,H1) 129912254742671349: GET https://google.com/ User-Agent: n/a 5000 2018.11.1415:11:58.975 multiwebobjectworker (EURUSD,H1) 129912254742671350: OnInit
2018.11.1415:11:58.975 multiwebobjectworker (EURUSD,H1) 129912254742671350: Reading request \Indicators\multiwebindicator.ex5::WRS_1_129912254742671348
2018.11.1415:11:58.975 multiwebobjectworker (EURUSD,H1) 129912254742671350: Got 60 bytes in request
2018.11.1415:11:58.975 multiwebobjectworker (EURUSD,H1) 129912254742671350: GET https://ya.ru User-Agent: n/a 5000 2018.11.1415:11:59.084 multiwebobjectworker (EURUSD,H1) 129912254742671351: OnInit
2018.11.1415:11:59.084 multiwebobjectworker (EURUSD,H1) 129912254742671351: Reading request \Indicators\multiwebindicator.ex5::WRS_2_129912254742671348
2018.11.1415:11:59.084 multiwebobjectworker (EURUSD,H1) 129912254742671351: Got 72 bytes in request
2018.11.1415:11:59.084 multiwebobjectworker (EURUSD,H1) 129912254742671351: GET https://www.startpage.com/ User-Agent: n/a 5000 2018.11.1415:11:59.162 multiwebobjectworker (EURUSD,H1) 129912254742671350: Done in187 ms
2018.11.1415:11:59.178 multiwebindicator (EURUSD,H1) 129912254742671348: Result code 2002018.11.1415:11:59.178 multiwebindicator (EURUSD,H1) 129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671350
2018.11.1415:11:59.178 multiwebindicator (EURUSD,H1) 129912254742671348: Got 16592 bytes in response
2018.11.1415:11:59.178 multiwebindicator (EURUSD,H1) GET https://ya.ru2018.11.1415:11:59.178 multiwebindicator (EURUSD,H1) Received 3734 bytes in header, 12775 bytes in document
2018.11.1415:11:59.256 multiwebobjectworker (EURUSD,H1) 129912254742671350: OnDeinit
2018.11.1415:11:59.272 multiwebobjectworker (EURUSD,H1) 129912254742671349: Done in297 ms
2018.11.1415:11:59.334 multiwebindicator (EURUSD,H1) 129912254742671348: Result code 2002018.11.1415:11:59.334 multiwebindicator (EURUSD,H1) 129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671349
2018.11.1415:11:59.334 multiwebindicator (EURUSD,H1) 129912254742671348: Got 12688 bytes in response
2018.11.1415:11:59.334 multiwebindicator (EURUSD,H1) GET https://google.com/2018.11.1415:11:59.334 multiwebindicator (EURUSD,H1) Received 790 bytes in header, 11813 bytes in document
2018.11.1415:11:59.350 multiwebobjectworker (EURUSD,H1) 129912254742671349: OnDeinit
2018.11.1415:11:59.833 multiwebobjectworker (EURUSD,H1) 129912254742671351: Done in749 ms
2018.11.1415:11:59.833 multiwebindicator (EURUSD,H1) 129912254742671348: Result code 2002018.11.1415:11:59.833 multiwebindicator (EURUSD,H1) 129912254742671348: Reading result \Experts\multiwebobjectworker.ex5::WRS_0_129912254742671351
2018.11.1415:11:59.833 multiwebindicator (EURUSD,H1) 129912254742671348: Got 45212 bytes in response
2018.11.1415:11:59.833 multiwebindicator (EURUSD,H1) GET https://www.startpage.com/2018.11.1415:11:59.833 multiwebindicator (EURUSD,H1) Received 822 bytes in header, 44307 bytes in document
2018.11.1415:11:59.849 multiwebindicator (EURUSD,H1) > > > Async WebRequest workers finished 3 tasks in1357 ms
2018.11.1415: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.
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
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
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
Среди программ для автоматического трейдинга можно выделить две большие категории: торговые роботы и индикаторы. Первые предназначены для совершения торговых операций на рынках, а вторые — для анализа котировок и выявления закономерностей в их изменении. При этом индикаторы могут использоваться непосредственно в роботах, образуя полноценную...
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
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:
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:
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.
¡¡¡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
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
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.....
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
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:
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
===cut here===
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
===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.