Diskussion zum Artikel "Die eigene, multi-threaded, asynchrone Web-Anfrage in MQL5" - Seite 4

 
Mohammad Hossein Sadeghi:
Schöner Artikel, danke. Wie sieht es mit WinINet Asynchronous Mode aus?

Ich habe keine Pläne, so etwas zu implementieren, tut mir leid.

 

In der russischen Diskussion des Artikels findet man eine weitere Untersuchung des Ansatzes und eine alternative Implementierung auf der Grundlage von Diagrammobjekten.

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

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

Stanislav Korotky, 2018.11.14 14:20

Ich poste einen alternativen Weg, um Web-Requests zu starten - mit Hilfe von Graph-Objekten, die eine Vorlage mit einem Experten-Assistenten verwenden. Es kann sowohl von Experten als auch von Indikatoren verwendet werden. Die Abhängigkeiten sind die gleichen wie im Artikel. Die Dateien der neuen Implementierung:

  • multiwebobjectworker.mqh - Header-Datei mit allgemeinen Klassen;
  • multiwebobjectworker.mq5 ist ein funktionierender Experte, der Webanfragen innerhalb von Graphobjekten durchführt;
  • multiwebindicator.mq5 - ungepufferter Indikator, der den Start von Webanfragen anzeigt;

Für jede Anfrage wird ein Objekt erstellt, in dem ein Expertenassistent erstellt wird, und am Ende der Anfrage wird das Objekt gelöscht. Der Austausch von Abfragedaten und -ergebnissen erfolgt, wie im Artikel beschrieben, über Ressourcen.

Nach den Protokollen zu urteilen, bietet dieser Mechanismus keine vollständige Parallelisierung der Abfrageausführung, da sich die Objekte wahrscheinlich eine gemeinsame Ereigniswarteschlange teilen. Beispielprotokoll:

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 Benutzer-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/ Benutzer-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

Ich hänge die Quellen auch hier an.

Bitte achten Sie auch auf aktualisierte Versionen der Include-Dateien von fxsaber, die in den Abhängigkeiten verwendet werden - sie können Fehlerbehebungen und Beschleunigungen enthalten.

Dateien:
 
Ein großartiger Artikel. Er öffnet die Türen für viele Möglichkeiten. Ich danke Ihnen.
 

Absolut erstaunlich unglaublicher Artikel !!!

Herzlichen Glückwunsch und vielen Dank, @marketeer !

 

Ich kann es nicht zum Laufen bringen.

Fehler 4002.

Nach einer kleinen Analyse habe ich festgestellt, dass der Wyker die URL nicht empfängt. Stattdessen empfängt er einen Nullwert

 
Someone Else:

Ich kann es nicht zum Laufen bringen.

Fehler 4002.

Nach einer kleinen Analyse habe ich festgestellt, dass der Wyker die URL nicht empfängt. Stattdessen empfängt er einen Nullwert

Welche Programme/Bibliotheken wurden genau verwendet (Sie können sie einfach anhängen)? Spezifische Logs werden ebenfalls benötigt. MT5-Version. Versuchen Sie es mit anderen früheren Versionen von MT5.

 

Alles ist einfach. Ich habe das Archiv von der Website heruntergeladen und lief im Diagnosemodus im Text beschrieben, nur die Websites zu ändern, statt drei, nur google.com in der Webquest des Terminals vorgeschrieben.

Version 5 Build 2085 ist nicht die neueste im Moment. vor dieser Version kann ich mich nicht erinnern, es war auch die neueste in diesem Moment.

aus den Protokollen

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > > > Standard WebRequest 1 Aufrufe beendet in 141ms

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) Poolmanager überträgt taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Angenommen: taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 nach 0 Versuchen

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Lesen der Anfrage taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: 0 Bytes in Anfrage erhalten

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

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

2019.07.04 14:11:31.890 multiwebclient (GBPUSD,M5) Ergebniscode von 131797648225084729: 4002, jetzt inaktiv

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: Fehlgeschlagen mit Code 4002


Ersetzte Ressource Datum, wie es in den Kommentaren oben war die Situation hat sich nicht geändert.

Im Prinzip können Sie es selbst wiederholen und überprüfen, wie es funktioniert.....

 
Someone Else:

Alles ist einfach. Ich habe das Archiv von der Website heruntergeladen und lief im Diagnosemodus im Text beschrieben, nur die Websites zu ändern, statt drei, nur google.com in der Webquest des Terminals vorgeschrieben.

Version 5 build 2085 ist nicht die neueste im Moment. Ich erinnere mich nicht an die Version vor, es war auch die neueste in diesem Moment.

aus Protokollen

2019.07.04 14:11:31.882 multiwebclient (AUDUSD,M5) > > > > Standard WebRequest 1 Aufrufe beendet in 141ms

2019.07.04 14:11:31.882 multiwebclient (GBPUSD,M5) Poolmanager überträgt taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiwebclient (AUDUSD,M5) Angenommen: taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732 nach 0 Versuchen

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: Lesen der Anfrage taQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Experts\multiwebclient.ex5::AUDUSD_PERIOD_M5_1_131797648225084732

2019.07.04 14:11:31.883 multiweb (GBPUSD,M5) 131797648225084729: 0 Bytes in Anfrage erhalten

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

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

2019.07.04 14:11:31.890 multiwebclient (GBPUSD,M5) Ergebniscode von 131797648225084729: 4002, jetzt inaktiv

2019.07.04 14:11:31.890 multiweb (GBPUSD,M5) 131797648225084729: Fehlgeschlagen mit Code 4002


Ersetzte das Ressourcendatum, wie es in den Kommentaren oben stand, die Situation hat sich nicht geändert.

Im Prinzip können Sie es selbst wiederholen und überprüfen, wie es funktioniert.....

Konnte nicht reproduziert werden. Hier ist das Protokoll von der Ausführung auf 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 Benutzer-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/ Benutzer-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

Suchen Sie nach einem Problem in Ihren Einstellungen oder Ihrem System.

 

Ich bestätige, dass das Skript mit den Standardeinstellungen nicht funktioniert - ich erhalte denselben"WebRequest error code 4002...".


MetaTrader 5

Version: 5.00 build 2093

02 Jul 2019


===Hier schneiden===

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 Fehlercode 4002

===Hier abschneiden===


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

Ich bestätige, dass das Skript mit den Standardeinstellungen nicht funktioniert - ich erhalte denselben"WebRequest error code 4002"....


MetaTrader 5

Version: 5.00 build 2093

02 Jul 2019


===Hier schneiden===

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 Fehlercode 4002

===Hier abschneiden===


Bitte schreiben Sie mehr Details - OS Version, Antivirus, etc. Ich bin auf Win 7, MT5 build 2093 funktioniert wie oben gezeigt gut.

Im Grunde ist die Frage für MQ, weil der Fehler mit einem "internen Aufruf" zusammenhängt, aber ich glaube nicht an Hilfe - der Support ist geschlossen.

Der Quellcode des Artikels ist Open Source, so versuchen, das Problem auf dem Rechner zu lösen, wo der Fehler reproduziert wird.