Asynchrone und mehrfädige Programmierung in MQL - Seite 26

 
Vladimir Simakov:
Die Synchronisierung ist Aufgabe des Programmierers. Wenn man nicht weiß, wie das geht, benutzt man kein Multithreading. Die Aufgabe der Schöpfer, ein Werkzeug zu geben, und da ist jeder ein böser Pinocchio für sich. Das Gleiche a la Mutex ist kein Problem, wenn man es selbst implementiert.

Leider ist dies nicht der Fall, die Zielgruppe von MQL - wer? (imho, Anwendungsprogrammierer, die die Grundlagen der Programmierung kennen)

Und das wird immer noch MQL5 sein (die Entwickler haben wiederholt gesagt, dass es in MQL4 keine Updates mehr geben wird).

MQL5 selbst arbeitet zunächst im asynchronen Modus, d.h. bei einer Anfrage nach historischen Daten (z.B. gibt es entweder die Daten zurück oder es beginnt im Hintergrund mit dem Paging und gibt einen Fehler zurück), so dass der Datenaustausch zwischen dem Terminal und dem MQL-Programm funktioniert,

und diese Momente sind schon verwirrend, denn anstatt Werte zurückzugeben, muss man ständig die Datenbereitschaft überprüfen und so weiter.... bei der Konvertierung von MQL4 ist es wirklich nicht bequem


und hier ist ein weiteres Thema, das besagt, dass wir eine einfache Struktur des MQL-Programms verwenden und verschiedene Ereignisse asynchron eingeben werden.... für wen ist sie bestimmt? - wer wird der Endnutzer dieser notwendigen Funktionen sein?

;)

 
Andrey Barinov:

Die GUI sollte sich im Haupt-EA drehen und alles andere in einem separaten EA. Dieser separate Slave-EA wird auf dem unsichtbaren OBJ_CHART platziert und interagiert mit dem Hauptpfad EventSendCustom().

Ich weiß nicht, wie es jetzt ist. Es scheint, dass zuvor nur Skripte auf OBJ_CHART ausgeführt wurden. Bei den Eingabeparametern gab es noch eine weitere Besonderheit.

Ich habe versucht, die Balken aller Symbole von Market Watch abzufragen. Die Geschichte für alle wird hochgeladen. Dutzende von Sekunden eines Zyklus vergehen! Mit MT5 bin ich nicht zufrieden, um es gelinde auszudrücken.
 
fxsaber:

Ich weiß nicht, wie es jetzt ist. Zuvor schien es, dass nur Skripte auf OBJ_CHART liefen. Bei den Eingabeparametern gab es eine weitere Besonderheit.

Ich habe versucht, Balken von allen Symbolen von Market Watch abzufragen. Historie zu allen hochgeladenen. Dutzende von Sekunden eines Zyklus vergehen! Mit MT5 bin ich nicht zufrieden, um es gelinde auszudrücken.

Expert Advisors werden ausgeführt, aber weder Ticks noch Timer funktionieren dort. Die einzige Möglichkeit, alles auszuführen, ist über OnChartEvent (die Ticks und der Timer können dort vom Haupt-EA übergeben werden).

Ich habe keine weiteren Einschränkungen festgestellt. Alles funktioniert.

Aber Sie können dasselbe auf einer normalen Karte nach demselben Prinzip tun. (In MT4 habe ich es so, da es dort keinOBJ_CHART gibt)
 
Andrey Barinov:

Berater werden gestartet, aber weder Ticks noch Timer funktionieren dort. Nur OnChartEvent kann verwendet werden, um alles zu starten (und die Ticks und Timer können vom Haupt-EA dorthin gesendet werden).

Ich habe keine weiteren Einschränkungen festgestellt. Alles funktioniert.

Das ist cool. Ich wusste nichts von dieser Möglichkeit. Warum setzen Sie nicht gui in Indikator und interagieren über Ressourcen? Bei mir sieht es so aus. Die Funktion EventChartCustom() sendet bis zu 128 Symbole, jeweils ein Double und ein Long, und gelangt in die Warteschlange OnChartEvent(). Sie können jedoch unbegrenzt viele Symbole und Werte beliebigen Typs über Units in die Ressourcen einfügen. Und es gibt keine Warteschlange. Sie bekommen es, wenn Sie es brauchen.
 
Реter Konow:
Das ist cool. Ich wusste nichts von dieser Möglichkeit. Warum setzen Sie nicht gui in Indikator und verwenden Ressourcen für die Kommunikation? Bei mir sieht es so aus. Die Funktion EventChartCustom() sendet bis zu 128 Symbole, jeweils ein Double und ein Long, und wird in die Warteschlange OnChartEvent() gestellt. In Ressourcen können Sie beliebige Zeichen und Werte beliebigen Typs über Einheiten platzieren. Und es gibt keine Warteschlange. Sie bekommen es, wenn Sie es brauchen.

Danke, ich wusste nichts von OnChartEvent. Führen Sie die Synchronisierung über benutzerdefinierte Ereignisse durch? Datenaustausch?

 
Реter Konow:
Das ist cool. Ich wusste nichts von dieser Funktion. Warum nicht die Benutzeroberfläche in einen Indikator einbauen und Ressourcen verwenden? Bei mir sieht es so aus. Die Funktion EventChartCustom() sendet bis zu 128 Symbole, jeweils ein Double und ein Long, und wird in die Warteschlange OnChartEvent() gestellt. In Ressourcen können Sie beliebige Zeichen und Werte beliebigen Typs über Einheiten platzieren. Und es gibt keine Warteschlange. Sie bekommen es, wenn Sie es brauchen.

Ich übergebe keine Daten per OnChartEvent. Nur Ereignisse. Andernfalls gibt es keine Ereignisse im EA-Agenten, und auf diese Weise erhält er ONTIMER_BEAT und ONTICK_BEAT.

Die Daten können je nach Aufgabe entweder über eine Datei oder über Ressourcen ausgetauscht werden. Ich verwende häufiger Dateien, weil sie auch dazu dienen, die grafische Benutzeroberfläche und alles andere nach einem Neustart des Terminals wiederherzustellen.

Ist Ihre GUI in der Lage, sich zu erinnern und ihr Aussehen nach dem Neustart des Terminals wiederherzustellen?

 
fxsaber:

Danke, ich wusste nichts von OnChartEvent. Führen Sie die Synchronisierung über benutzerdefinierte Ereignisse durch? Datenaustausch?

Jede Nachricht jeder Seite hat eine Sequenznummer. Wenn Teilnehmer A eine Nachricht an Teilnehmer B sendet, prüft er zunächst, ob die vorherige Nachricht gelesen wurde. Ist dies nicht der Fall, wird kein neues Exemplar gesendet. Wenn Teilnehmer B eine Nachricht an Teilnehmer A sendet, prüft er auch, ob die vorherige Nachricht gelesen wurde.
 
Andrey Barinov:

Ich übergebe keine Daten per OnChartEvent. Nur Ereignisse. Andernfalls gibt es keine Ereignisse im EA-Agenten, und auf diese Weise erhält er ONTIMER_BEAT und ONTICK_BEAT.

Die Daten können je nach Aufgabe entweder über eine Datei oder über Ressourcen ausgetauscht werden. Ich verwende Dateien häufiger, weil sie auch dazu dienen, die grafische Benutzeroberfläche und alles andere nach einem Neustart des Terminals wiederherzustellen.

Ist Ihre GUI in der Lage, sich zu erinnern und ihr Image nach einem Neustart des Terminals wiederherzustellen?

Ich würde vorschlagen, weg mit EventChartCustom() ganz, gerade wegen der Warteschlange, die manchmal Stalls verursachen kann. Interaktion durch Ressourcen, die im Zeitintervall wechselseitige Anfragen stellen. Wenn z. B. Seite A mit OnChartEvent() stark belastet ist und Seite B ein Ereignis für die Schaltfläche Abbrechen sendet, kann Seite A dieses Ereignis aufgrund eines unsinnigen Ladevorgangs verspätet empfangen.

Ja, ich speichere den Kernel in der Datei und lade ihn aus der Datei. In diesem Fall werden alle Einstellungen und das Erscheinungsbild nach dem Neustart auf die letzte Ansicht zurückgesetzt. Aber normalerweise benötige ich nach dem Neustart die Starteinstellungen, so dass ich diese Funktion nicht verwende.

 
Реter Konow:

Ich würde vorschlagen, auf EventChartCustom() ganz zu verzichten, gerade wegen der Warteschlange, die manchmal zu Verlangsamungen führen kann. Interaktion durch Ressourcen , die im Zeitintervall wechselseitige Anfragen stellen . Wenn z. B. Seite A mit OnChartEvent() stark belastet ist und Seite B ein Ereignis für die Schaltfläche Abbrechen sendet, kann Seite A dieses Ereignis aufgrund eines unsinnigen Ladevorgangs verspätet empfangen.

Der Timer funktioniert nicht in EA, das sich auf OBJ_CHART befindet. Dort gibt es KEINE EVENTS (außer OnChartEvent). Daher müssen wir alleEreignisse (OnTick, OnTimer usw.) vom Haupt-EA dorthin senden.

Außerdem schicke ich keine Tastendrücke dorthin. Das ist nicht nötig.
 
Andrey Barinov:

Der Timer funktioniert nicht in dem EA, der auf OBJ_CHART ist. Dort gibt es KEINE EVENTS (außer OnChartEvent). Daher müssen alle Ereignisse (OnTick, OnTimer usw.) vom Haupt-EA dorthin gesendet werden.

Außerdem schicke ich keine Tastendrucke hin und her. Das ist nicht nötig.

Ich schlage vor, den Indikator als Träger der GUI und die Ressourcen als Link zum EA zu verwenden. Darüber hinaus können Sie in MT4 den Expert Advisor-Tester von einem Standard-Chart aus über das Panel steuern. Alle Bedienelemente funktionieren, nicht nur die Tasten. Sie werden in der Lage sein, Text und alles andere an den zu testenden EA zu senden. Ich habe es bereits getestet. Alles funktioniert.

ZS. Und der getestete EA sendet andere Daten an den regulären Chart.