Diskussion zum Artikel "Parallele Berechnungen in MetaTrader 5"

 

Neuer Artikel Parallele Berechnungen in MetaTrader 5 :

Seit Anbeginn der Menschheit ist Zeit von unschätzbarem Wert und wir tun alles, um sie nicht unnötig zu vergeuden. In diesem Sinne beschreibt Ihnen dieser Beitrag, wie Sie die Arbeit Ihres Expert Advisors beschleunigen können, wenn Ihr Computer über einen Mutli-Core Prozessor verfügt. Zudem verlangt die Implementierung der vorgeschlagenen Methode keine Kenntnisse anderer Programmiersprachen außer MQL5.

Abb. 1 Parallele Ausführung von Anwendungen

Autor: Andrew

 

Vielen Dank an den Autor, relevanter Artikel. Ich habe auch über dieses Thema nachgedacht, bin aber nicht auf den Artikel gestoßen.

Der Autor weist darauf hin, dass man sorgfältig überwachen sollte, welche Instrumente was ausführen. Angesichts des Schreibens von Expert Advisors, die auf jedem Paar ausgeführt werden können, ist dies etwas schwierig. Sie müssen im Auge behalten, auf welchem Paar der EA läuft und die Paare der parallelen Streams anpassen.

In diesem Zusammenhang eine Frage (nicht so sehr an den Autor, sondern eher an die MQ-Entwickler): Ist es möglich, benutzerdefinierte Tools einzuführen?

Auf diese Weise könnten wir viele Aufgaben lösen, angefangen bei der Erstellung von leeren Charts für parallelisierte Berechnungen bis hin zur Erstellung von Tick-Charts, die wir selbst erstellen.

Was den Datenübertragungspuffer betrifft, kann ich Ihnen raten, eine globale Struktur zu erstellen und verschiedene Datentypen über die Struktur zu übertragen. Ich weiß aus Erfahrung, dass es nicht immer bequem ist, das Ergebnis von Berechnungen in Form eines Arrays zurückzugeben, oft muss man einige Zähler verfolgen, und um die Namen nicht zu verwirren, ist es einfacher, alles als eine Struktur zu übergeben und bereits auf Variablen als Mitglieder der Struktur zu verweisen. Übrigens kann die gleiche Struktur auch Arrays enthalten.
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
Документация по MQL5: Основы языка / Типы данных / Структуры и классы
  • www.mql5.com
Основы языка / Типы данных / Структуры и классы - Документация по MQL5
 
Urain:

In diesem Zusammenhang eine Frage (nicht so sehr an den Autor, sondern eher an die MQ-Entwickler): Ist es möglich, benutzerdefinierte Tools einzuführen?

Hmm, die Idee gefällt mir.
 

Vielleicht wiederhole ich die Idee, die hier bereits über benutzerdefinierte Tools geäußert wurde, aber ich möchte folgendes hinzufügen: ....

Nun wird ein Expert Advisor (Indikator, Skript) nur für ein bestimmtes Symbol gestartet. Er hat Zugriff auf die aktuellen Daten anderer Symbole, aber das OnTick-Ereignis wird nur für das Host-Symbol erzeugt, auf dessen Chart der Expert Advisor gestartet wird.

Vielleicht wäre es logisch, die Möglichkeit einzuführen, ein eigenes"Custom Tool" zu erstellen, das wie ein Add-on ist. das wie ein Überbau über den Expert Advisors liegt und die Fähigkeit hat, Ticks von mehreren Symbolen zu empfangen und zu verarbeitenund die Ergebnisse an Programme (Teile des Programms oder Expert Advisors, Indikatoren) weiterzugeben, die mit einem bestimmten Symbol in einem eigenen Thread arbeiten. Dies erleichterte und förderte die Entwicklung der "Mehrfachwährung" erheblich. Und das eigentliche Konzept der Objektprogrammierung drängt dazu. Warum sollte man einen Expert Advisor an ein bestimmtes Symbol binden, wenn man mit mehreren Symbolen arbeitet?

P.S. Nun, oder es wäre gut, zu den SymbolInf... Funktionen so etwas wie das Ereignis "ein neuer Tick für dieses Symbol ist eingetroffen" hinzuzufügen.

 
lav888:

Jetzt wird der Expert Advisor (Indikator, Skript) nur für ein bestimmtes Symbol gestartet. Er hat Zugriff auf die aktuellen Daten anderer Symbole, aber das OnTick-Ereignis wird nur für das Host-Symbol erzeugt, auf dessen Chart der Expert Advisor gestartet wird.

Es ist schwer zu verstehen, warum die Entwickler diese Krücke wiederholt haben. Schließlich gab es bei der Entwicklung der MQL5-Architektur bereits eine sehr starke API, bei der onTick für jeden Tick eines beliebigen signierten Symbols ausgelöst wurde.

Generell verstehe ich nicht, warum man sich für eine solche Architektur entschieden hat und so wenig von der bereits existierenden API übernommen hat, die von der Architektur her sehr kompetent war.

Die MQL5-Entwickler verhalten sich so, als würden sie das Rad neu erfinden: "Wir werden über diese Funktion nachdenken", "Ja, Sie haben recht, wir werden sie hinzufügen" usw.

Es wurde bereits mehrfach erwähnt, dass mehr als ein Jahr auf die Ausarbeitung der Architektur verwendet wurde. Es gibt also einige Argumente, warum man sich für diesen Weg entschieden hat und nicht für einen anderen.

P.S. Vielleicht liegt der Grund darin, dass die MetaTrader-Entwickler wenig Erfahrung im Bereich Brokerage und Trading haben, dafür aber viel Erfahrung in der Entwicklung von Plattformen. Andere Entwickler hingegen haben große Erfahrung im echten Brokerage und Markthandel.

P.P.S. Ich habe meine Gedanken geschrieben, keine Spekulationen. Es ist immer einfacher, zu kritisieren als zu schaffen. Entwickler, trotz offensichtlicher Fehler, verdienen Respekt.

 
lav888:

Vielleicht wäre es logisch, die Möglichkeit einzuführen, ein eigenes"Custom Tool" zu erstellen, das wie ein Add-on über Expert Advisors ist und die Fähigkeit hat, Ticks von mehreren Symbolen zu empfangen und zu verarbeitenund die Ergebnisse an Programme (Teile des Programms oder Expert Advisors, Indikatoren, die mit einem bestimmten Symbol arbeiten) weiterzugeben das wie ein Überbau über EAs ist und die Fähigkeit hat, Ticks von mehreren Symbolen zu empfangen und zu verarbeitenund die Ergebnisse an Programme (Teile des Programms oder EAs, Indikatoren) weiterzugeben, die mit einem bestimmten Symbol in einem eigenen Thread arbeiten. Dies erleichterte und förderte die Entwicklung von "Multicurrency" erheblich. Und das eigentliche Konzept der Objektprogrammierung drängt dazu. Warum sollte man einen Expert Advisor an ein bestimmtes Symbol binden, wenn man mit mehreren Symbolen arbeitet?

P.S. Nun, oder es wäre gut, den SymbolInf... Funktionen so etwas wie das Ereignis "ein neuer Tick für dieses Symbol ist eingetroffen" hinzuzufügen.

Ein solches "Add-on" kann mit Standard-MQL5-Tools implementiert werden: Multicurrency tick handler OnTickMarketWatch
 
Lizar:
Dieses "Add-on" kann mit MQL5-Standardtools implementiert werden: Multicurrency tick handler OnTickMarketWatch

Ich danke Ihnen. Es war dieser Artikel, der mich zu den oben genannten Schlussfolgerungen gebracht hat. Aber wie Sie selbst in diesem Artikel bemerkt haben:

Tipps zur Verwendung:

1. Diese Variante des Multicurrency-Tick-Handlers ist recht ressourcenintensiv. Sie können die Belastung des Prozessors verringern, indem Sie die Verzögerung des Tick-Empfangs im Skript mit Hilfe der Delay-Variablen erhöhen. Gleichzeitig können Sie aber auch eine gewisse Anzahl von Ticks auslassen.


Wenn Sie die Verzögerungszeit auf bis zu 1 Sekunde erhöhen, können Sie den gleichen Effekt mit OnTimer() erzielen. Leider mit den gleichen Nachteilen.

Gleichzeitig empfängt und verarbeitet das Terminal kontinuierlich Ticks von Symbolen aus dem "Marktfenster". Wir haben Zugriff auf diese Ticks, aber wir haben kein Signal, dass diese Daten aktualisiert wurden. Deshalb müssen wir die Prüfung künstlich durchführen. Der Vorteil von MQL5 ist, dass dies möglich ist. Aber ich stimme zu, dass es viel eleganter wäre, eine Lösung in die Terminalfunktionen einzubauen. Lassen Sie es ein separates Ereignis wie OnTrade() sein und der Entwickler kann es nach eigenem Ermessen verwenden (oder auch nicht).

Und über "benutzerdefinierte Werkzeuge" oder Überbau über Experten.... Mir ist klar, dass dies eine Art "Träumerei" ist und in der Entwurfsphase hätte bedacht werden müssen... Schade!

 
lav888:

Ich danke Ihnen. Es war dieser Artikel, der mich zu den oben genannten Schlussfolgerungen gebracht hat. Aber wie Sie selbst in diesem Artikel hervorgehoben haben:

Tipps zur Verwendung:

1. Diese Variante des Multi-Currency-Tick-Handlers ist recht ressourcenintensiv. Sie können die Belastung des Prozessors verringern, indem Sie die Verzögerung des Tick-Empfangs im Skript mit Hilfe der Delay-Variablen erhöhen. Gleichzeitig können Sie aber auch eine gewisse Anzahl von Ticks auslassen.


Wenn Sie die Verzögerungszeit auf bis zu 1 Sekunde erhöhen, können Sie den gleichen Effekt mit OnTimer() erzielen. Leider mit den gleichen Nachteilen.

Gleichzeitig empfängt und verarbeitet das Terminal kontinuierlich Ticks von Symbolen aus dem "Marktfenster". Wir haben Zugriff auf diese Ticks, aber wir haben kein Signal, dass diese Daten aktualisiert wurden. Deshalb müssen wir die Prüfung künstlich durchführen. Der Vorteil von MQL5 ist, dass dies möglich ist. Aber ich stimme zu, dass es viel eleganter wäre, eine Lösung in die Terminalfunktionen einzubauen. Lassen Sie es ein separates Ereignis wie OnTrade() sein und der Entwickler kann es nach eigenem Ermessen verwenden (oder auch nicht).

Und über "benutzerdefinierte Tools" oder Überbau über Experten.... Mir ist klar, dass dies nur ein "Traum" ist und in der Entwurfsphase hätte bedacht werden müssen... Schade!

Ja, im Allgemeinen stimme ich zu. Und was die Träume betrifft, so war alles, was wir heute haben, einmal der Traum von jemandem. Wenn es starke Argumente gibt, dann werden"Benutzerwerkzeuge" erscheinen.
 

Gut! Jetzt müssen die Entwickler uns nur noch erhören. Es wäre gut, wenn dieses Add-on gleich Thread-Management-Funktionen enthalten könnte.

Es wäre möglich, jede Verarbeitung in einem eigenen Thread laufen zu lassen. Vielleicht wäre es möglich, einen neuen Tick zu verarbeiten, während man mit dem aktuellen Tick arbeitet.

 

Nützlicher Artikel. Er hat neue Horizonte eröffnet.

Ich habe eine Frage: Kann die Funktion OnTick() in eine Funktion mit einem Parameter umgewandelt werden, wie OnTick(EURUSD), so dass Ticks von verschiedenen Instrumenten parallel in einem Expert Advisor verarbeitet werden könnten? Natürlich mit der Verarbeitung jeder Instanz einer Funktion mit einem Parameter in einem separaten Thread (auf einem separaten Kernel).

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Toller Artikel. Danke fürs Teilen.