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

 

Versucht mit deaktivierter Firewall und Defender - gleiches Ergebnis.

Win 10 Home. Kein Antivirus, weil ich "wählerisch bei Verbindungen" bin.

 

Guten Tag,

Der Artikel ist sehr interessant.

Wenn ich meinen Kieselstein werfen darf....

Durch die Einführung einer großen Anzahl von Kalenderfunktionen durch die Entwickler wird die http-Anfrage weniger nachgefragt (ich glaube nicht, dass andere Datenabfragen weit verbreitet waren). Ich bin in erster Linie an der Möglichkeit interessiert, den Optimierungsalgorithmus parallel laufen zu lassen (periodisch, nach Drawdown-Parameter usw., es spielt keine Rolle).

Könnten Sie, falls möglich, beantworten, ob ein solcher Mechanismus (mit Ausführung in einem separaten Thread) bei Services möglich ist?

Mit freundlichen Grüßen zur Arbeit des Autors

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

Aufgrund der Einführung einer großen Anzahl von Kalenderfunktionen durch die Entwickler wird die http-Anfrage weniger nachgefragt (ich glaube nicht, dass andere Datenanfragen weit verbreitet waren). Ich war in erster Linie an der Möglichkeit interessiert, den Optimierungsalgorithmus parallel laufen zu lassen (periodisch, nach Drawdown-Parameter usw., es spielt keine Rolle).

Könnten Sie, falls möglich, beantworten, ob ein solcher Mechanismus (mit Ausführung in einem separaten Thread) bei Services möglich ist?

Der integrierte Kalender ist recht allgemein gehalten, so dass noch viele nützliche Profilinformationen aus Drittquellen heruntergeladen werden müssen. Außerdem handelt es sich nicht nur um Nachrichten, sondern auch um Signale, Kurse von Kryptowährungsbörsen und so weiter. Es gibt eine Idee, parallele Threads für Berechnungen anstelle von Webanfragen zu verwenden, aber sie wurde noch nicht umgesetzt. Aber ich verstehe nicht, was mit Diensten gemeint ist. Meinen Sie Dienste wie MQL5-Programme? MQ hat für sie keine Zwei-Wege-Kommunikation mit anderen Programmen vorgesehen (es ist unmöglich, einen "Task" zur Berechnung zu senden und das Ergebnis zu erhalten). Diese Dienste sind also ausgeschlossen.

 

Ich habe ein Beispiel für einen Indikator in die Codebasis gestellt, der lange parallele Berechnungen in Expertenrechnern anfordert, die automatisch in Chart-Objekten im aktuellen Chart (Fenster) platziert werden.

Der Indikator ohne Puffer dient nur zur Demonstration der Möglichkeit, umfangreiche Berechnungen in anderen Threads anzufordern. Bei Expert Advisors ist es sicherlich möglich, dies auch auf diese Weise zu tun. Um dies zu implementieren, müssen Sie Ihre eigenen Packer und Unpacker von Parametern sowohl auf der Seite des aufrufenden MQL-Programms als auch des Expert-Calculators schreiben.

Code-Basis

Pseudo-Indikator mit asynchronen Multi-Threaded Berechnungen Demo

Stanislav Korotky, 2020.01.16 20:13

Dies ist ein Indikator ohne Puffer, der parallele Multi-Thread-Berechnungen in Chart-Objekten demonstriert, die Worker Expert Adviser hosten.

Beispiele für Logs

4 Aufgaben auf 1 Kern:

Ausführung von 4 Aufgaben auf 1 Kern (Thread)

4 Aufgaben auf 2 Kernen (2 mal schneller):

Ausführung von 4 Aufgaben auf Kernen (Threads)

 
Stanislav Korotky:

In der Codebase wurde ein Beispiel für einen Indikator veröffentlicht, der lange parallele Berechnungen in Expert Advisors anfordert, die automatisch in Chart-Objekten im aktuellen Chart (Fenster) platziert werden.

Der Indikator ohne Puffer dient nur zur Demonstration der Möglichkeit, umfangreiche Berechnungen in anderen Threads anzufordern. Bei Expert Advisors ist es sicherlich möglich, dies auch auf diese Weise zu tun. Um dies zu implementieren, müssen Sie Ihre eigenen Packer und Unpacker von Parametern schreiben, sowohl auf der Seite des aufrufenden MQL-Programms als auch auf der Seite des Expert-Calculators.


und dann wird dieser Indikator auch von EA gepoked :-)

 

Beim Starten des Terminals prüft der Expert Advisor, ob eine globale Variable im Chart vorhanden ist, und wenn nicht, erstellt er sie und setzt ihre Nummer. Die Chart-Clients senden Nachrichten an den Chart-Manager.

Anschließend schließt der Benutzer das Fenster des Chartmanagers. Clients senden Anfragen an ein Fenster, das nicht mehr existiert.

Mit anderen Worten: Der Artikel ignoriert das Problem des Wechsels des Chartmanagers. Das heißt, es ist nur notwendig, den Chartmanager zu schließen, und das ganze Schema fällt in sich zusammen.

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

Beim Starten des Terminals prüft der Expert Advisor, ob eine globale Variable im Chart vorhanden ist, und wenn nicht, erstellt er sie und setzt ihre Nummer. Chart-Clients senden Nachrichten an den Chart-Manager.

Anschließend schließt der Benutzer das Fenster des Chartmanagers. Clients senden Anfragen an ein Fenster, das nicht mehr existiert.

Mit anderen Worten: Der Artikel vernachlässigt das Problem des Wechsels des Chartmanagers. Das heißt, es ist nur notwendig, den Chartmanager zu schließen, und das ganze Schema fällt in sich zusammen.

Der Artikel schlägt eine Technologie und ihre minimale Implementierung vor. Die Überprüfung aller möglichen Problemsituationen würde den Rahmen des Artikels sprengen. Clients können die Existenz eines Diagramms anhand seiner ID überprüfen (verfügbar über pool.getManagerID). Der gesamte Quellcode ist Open Source.

Bitte beachten Sie, dass im Zuge der Entwicklung der im Artikel vorgestellten Idee ein Schema zur vereinfachten Multithreading-Abfrageverarbeitung mit Objekten entwickelt wurde. Dort ist das erwähnte Problem nicht "by design". Die Quellen sind ebenfalls in diesem Thread angehängt. Es wird also empfohlen, sie zu verwenden.

 
Stanislav Korotky:

In dem Artikel wurden die Technologie und ihre minimale Umsetzung vorgeschlagen. Die Überprüfung aller möglichen Problemsituationen würde den Rahmen des Artikels sprengen. Clients können die Existenz eines Diagramms anhand seiner ID überprüfen (verfügbar über pool.getManagerID). Alle Quellcodes sind Open Source.

Bitte beachten Sie, dass im Zuge der Entwicklung der im Artikel vorgestellten Idee ein Schema zur vereinfachten Multithreading-Abfrageverarbeitung mit Objekten entwickelt wurde. Dort ist das erwähnte Problem nicht "by design". Die Quellen sind ebenfalls in diesem Thread angehängt. Es wird also empfohlen, sie zu verwenden.

Ich habe die Entwicklung des Themas gesehen )) Aber leider ist die Verwendung der Objekte "Chart", wie angegeben, nur in MT5 verfügbar.

 
Stanislav Korotky:

Der eingebaute Kalender ist recht allgemein gehalten, so dass es immer noch eine Menge nützlicher Profilinformationen gibt, die aus Drittquellen heruntergeladen werden können. Außerdem sind es nicht nur Nachrichten, sondern auch Signale und Kurse von Kryptowährungsbörsen usw. Es gibt eine Idee, parallele Threads für Berechnungen anstelle von Webanfragen zu verwenden, aber sie wurde noch nicht umgesetzt. Aber ich verstehe das mit den Diensten nicht. Meinen Sie Dienste wie MQL5-Programme? MQ hat für sie keine Zwei-Wege-Kommunikation mit anderen Programmen vorgesehen (es ist unmöglich, einen "Task" zur Berechnung zu senden und das Ergebnis zu erhalten). Diese Dienste sind also ausgeschlossen.

Ich danke Ihnen. Sie haben alles richtig verstanden, was die Dienste betrifft. Die Experten-Rechner waren die direkte Antwort. Äußerst interessant. Nochmals vielen Dank.
 
Wie groß sollte der Offset (input int MessageBroadcast) für Benutzerereignisse sein, wenn UI-Elemente aus der Standardbibliothek(Include\Controls\) im Programm verwendet werden? Wie kann ich das herausfinden?