Mein Ansatz. Der Kern ist der Motor. - Seite 146

 

Реter Konow:

...

Das ist keine schlechte Idee.

Aber was bringt uns das?

Vielleicht reduzieren wir die CPU-Belastung, machen Threads frei. Wenn wir 10 Kopien von EA auf 10 Paaren laufen lassen und jede Engine mit einer grafischen Benutzeroberfläche belasten, kann die gesamte CPU-Last zu hoch sein. Denn jede grafische Benutzeroberfläche erfordert das Neuzeichnen von Elementen, was eine hohe CPU-Belastung darstellt. Tatsächlich können wir aber nur eine konkrete GUI einer Kopie sehen. Die anderen sind versteckt.

Es ist also wahrscheinlich der richtige Weg. Bauen Sie einen gemeinsamen Motor.

In MT5 können die Charts abgetrennt werden. Und dann muss man sich das Konzept noch einmal neu ausdenken.

 
Konow reg:

Jeder EA hat seine eigene Kopie des Parameterkerns. Es kann vorübergehend von der gemeinsamen grafischen Benutzeroberfläche getrennt und ein anderer EA mit dem Motor verbunden werden. Es ist wichtig, dass es sich um Kopien desselben EA handelt.

Allerdings gibt es einige Schwierigkeiten, die ich selbst noch nicht ganz verstanden habe.

Theoretisch hört sich die Frage so an:

Warum müssen wir eine Engine mit GUI für jedes Diagramm einer EA-Kopie hinzufügen, wenn wir eine Engine mit der gemeinsamen GUI erstellen und sie mit allen Kopien des EA verbinden können?

In der Praxis werden wir auf einige technische Schwierigkeiten stoßen.

Die Expert Advisor-Kopie kann neue Werte in ihre Kopie des Parameterkerns schreiben. Wenn eine der Kopien keine Verbindung zur Engine hat, ändert sich der Kernel nur auf der Seite der Kopie. Wenn wir also die Verbindung wiederherstellen, müssen wir den gesamten Kernel an die Engine übergeben, und die Engine wird alle Elemente in allen Fenstern neu zeichnen, sofern erforderlich. Dies ist prinzipiell möglich.

Oder Sie können den Parameterkern selbst neu erstellen, indem Sie ihn zu einer Ressource machen. In diesem Fall erhält die Engine alle Änderungen auf einmal und zeichnet die Elemente einfach neu. Das ist keine schlechte Idee.

Aber was bringt uns das?

Vielleicht reduzieren wir die CPU-Belastung, machen Threads frei. Wenn wir 10 Kopien von EA auf 10 Paaren laufen lassen und jede Engine mit einer grafischen Benutzeroberfläche belasten, kann die gesamte CPU-Last zu hoch sein. Denn jede grafische Benutzeroberfläche erfordert das Neuzeichnen von Elementen, was eine hohe CPU-Belastung darstellt. Tatsächlich können wir aber nur eine konkrete GUI einer Kopie sehen. Die anderen sind versteckt.

Es ist also wahrscheinlich der richtige Weg. Bauen Sie einen gemeinsamen Motor.

Lassen Sie die EA-Kopien dem Motor häufig ihre Adresse mitteilen. Eine kurze Zeichenkette. Der Motor reagiert und "spricht" mit der Kopie, die die gleiche Adresse hat wie die aktuelle. Es findet der übliche Austausch statt. Wenn sich die Adresse in der Maschine ändert, beginnt sie mit der Kopie zu tauschen, die die gleiche Adresse hat. Zum Standard-Austausch von "Ether" werden Berater oder Indikatoren hinzugefügt, um die Kurzadresse aufzudecken. Mehrere Bytes. Und die Funktion "Abhören von Motoradressen" wird gestartet, wenn der Benutzer die Schaltfläche "Neu konfigurieren" auf der Motor-GUI drückt. Vielleicht ist es so etwas wie das hier.

 
Artyom Trishkin:

In MT5 können Sie die Charts abtrennen. Und dann muss man sich das Konzept noch einmal neu ausdenken.

Ich bin mir dessen nur nicht bewusst. Die Karte wird rein "territorial" losgelöst, sie wird frei von den Koordinaten des Hauptterminalfensters? Ist er bei den Austauschvorgängen noch vollständig mit dem Terminal verbunden?

 
Oleg Papkov:

Ich bin mir dessen nur nicht bewusst. Die Karte wird rein "territorial" losgelöst, sie wird frei von den Koordinaten des Hauptterminalfensters? Und in den Austausch fließt mit dem Terminal, wird es noch in vollem Umfang angeschlossen werden?

Das Schaubild ist losgelöst, aber es ändert nichts an der Essenz. (Sie machen ein Chaos umsonst). Es macht keinen Sinn, Kopien der grafischen Benutzeroberfläche für jede Kopie des EA zu erstellen. Jedenfalls nicht, dass ich es sehen könnte. Aber es wäre großartig, wenn man eine GUI zwischen den Karten der Kopien verschieben könnte.

Wenn es eine EA-Kopie der Kontrollzentrumskarte gibt, auf der sich der Motor und die Haupt-GUI befinden, wäre das sehr praktisch.

Die grafische Benutzeroberfläche des EA sollte in der Erwartung erstellt werden, dass der EA viele Kopien auf verschiedenen Instrumenten haben wird.


Das Diagramm bleibt im gleichen Fenster, nur das Fenster selbst kann aus dem Terminal "herausgenommen" werden.

 
Oleg Papkov:

Lassen Sie die Kopien der Berater dem Motor ihre Adresse mit Häufigkeit mitteilen. Eine kurze Zeichenkette. Der Motor reagiert und "spricht" mit der Kopie, die die gleiche Adresse hat wie die aktuelle. Es findet der übliche Austausch statt. Wenn sich die Adresse in der Maschine ändert, beginnt sie mit der Kopie zu tauschen, die die gleiche Adresse hat. Zum Standard-Austausch von "Ether" werden Berater oder Indikatoren hinzugefügt, um die Kurzadresse aufzudecken. Mehrere Bytes. Und die Funktion "Abhören von Motoradressen" wird gestartet, wenn der Benutzer die Schaltfläche "Neu konfigurieren" auf der Motor-GUI drückt. Vielleicht geht es in etwa so.

Sie sehen das Wesentliche richtig. Nur die Details sind nicht genau.

Das Umschalten der "Kommunikation" selbst ist kein Problem. Bei einem Wechsel müssen Sie jedoch die gesamte grafische Benutzeroberfläche neu initialisieren. Immerhin, in Fenstern und Elementen von verschiedenen Kopien, unterschiedliche Werte. Es ist also notwendig, fast alles neu zu zeichnen.

Die Parameterwerte jeder Kopie werden im Parameterkern gespeichert. Dies ist ein Array. Solange die Kopie nicht mit der Engine verbunden ist, werden Änderungen der Werte nur in der Kopie des Parameterkerns des Expert Advisors vorgenommen. Sobald der Motor angeschlossen ist, muss alles von diesem Kernel auf ihn übertragen werden. Synchronisieren Sie Kopien des Parameterkerns in der Engine und dem angeschlossenen Expert Advisor. Sie müssen also eine große Menge an Informationen (Parameter Core) übertragen und die Fenster neu zeichnen. Danach ist es möglich, den angeschlossenen Expert Advisor einzustellen und andere gehen in den unabhängigen Modus über. Dann wird eine Verbindung zu ihnen hergestellt, und das Gleiche wird geschehen.

Das wird so sein. Allerdings gibt es eine Menge technischer Feinheiten.

 
Peter. Mit einer Periode von N ms empfängt der EA etwas vom Motor, und danach gibt er sein vorbereitetes Etwas an den Motor weiter. Der Berater wartet dann darauf, dass ein Tick eintrifft oder ein neuer Stapel von Rückfragen ausgetauscht wird. Oder?
 
Oleg Papkov:
Peter. Mit einer Periode von N ms empfängt der EA etwas vom Motor, und danach gibt er sein vorbereitetes Etwas an den Motor weiter. Der Berater wartet dann auf das Eintreffen der Zecke oder eines neuen Stapels von Abfrage-Austausch. Oder?

Fast richtig. Kommunikation und Warten auf den Tick oder andere Ereignisse, die asynchron ablaufen.

 
Реter Konow:

Der Zeitplan ist losgelöst, aber das ändert nichts an der Sache. Das ist Zeitverschwendung).

...

Das Diagramm bleibt im gleichen Fenster, nur das Fenster selbst kann aus dem Terminal "herausgenommen" werden.

Und Ihre Vorstellung, dass immer nur ein aktuelles Diagramm sichtbar ist und nur dieses aktualisiert werden kann, wird durchbrochen - es werden so viele Diagramme sichtbar sein, wie abgehängt werden.

Sicherlich kein Alptraum, aber auch nicht gut - nur eine der sichtbaren Karten wird "leben", und der Rest?

Glauben Sie, dass dies normal ist? Nun, wenn dem so ist, bin ich wieder einmal von der mangelnden Ernsthaftigkeit bei der Behebung von Fehlern überzeugt - wenn es einen gibt, dann nicht, um ihn zu beheben, sondern um ihn zu verstecken.

 
Реter Konow:

Fast richtig. Die Kommunikation und das Warten auf ein Tick oder andere Ereignisse erfolgen asynchron.

Wie wäre es damit. Advisors, jeder mit häufigen einige (OnTimer), senden Sie an den Motor seine Code-String. Alle Codezeilen sind unterschiedlich. Die Engine analysiert intern die eingehenden Strings und "erkennt" einen, zum Beispiel von Expert Advisor Nummer 3. Als Antwort auf diesen EA sendet er ein "Signal", um die Hauptübertragung zu starten. Die Engine arbeitet mit diesem Expert Advisor.
Wenn eine Person die Schaltfläche "Umschalten" drückt, analysiert die Maschine die erlaubten Ratgeber und sie werden unter Nummern indiziert. Weist den aktuellen EA an, in den Zustand der Adresseinstellung zu wechseln, so als ob er aus dem Arbeitsablauf ausgeschaltet würde, er wählt einen Code-String mit Index 1 mehr und wartet auf die Ankunft des gleichen Code-Strings von einem anderen EA. Wenn die Adresse übereinstimmt, sendet er ein Signal an den Expert Advisor, damit dieser die Adresse nicht mehr preisgibt und den Austausch beginnt. Der einzige Expert Advisor und die Kopierserie, die sich nicht im Abrechnungsmodus befindet, wird den Austausch erhalten. Kurz gesagt, etwas wie.

Wenn die Maschine eine Adresse empfängt, führt sie eine Zeitüberschreitung durch, um den Empfang von Adressen zu verhindern. Damit sich die Adressen nicht überschneiden.

 
Oleg Papkov:

Wie wäre es damit. Die Expert Advisors, die jeweils eine bestimmte Frequenz haben (OnTimer), senden der Engine ihren eigenen Code-String. Alle Codezeilen sind unterschiedlich. Die Engine analysiert intern die eingehenden Strings und "erkennt" einen, zum Beispiel von Expert Advisor Nummer 3. Als Antwort auf diesen EA sendet er ein "Signal", um die Hauptübertragung zu starten. Die Engine arbeitet mit diesem Expert Advisor.
Wenn eine Person auf die Schaltfläche "Umschalten" drückt, analysiert die Maschine die erlaubten Ratgeber, und sie werden unter Nummern indiziert. Weist den aktuellen EA an, in den Zustand der Adresseinstellung zu wechseln, als ob er aus dem Arbeitsablauf ausgeschaltet würde, er wählt einen Code-String mit dem Index um 1 mehr und wartet auf das Eintreffen des gleichen Code-Strings von einem anderen EA. Wenn die Adresse übereinstimmt, sendet er ein Signal an den Expert Advisor, damit dieser die Adresse nicht mehr preisgibt und den Austausch beginnt. Der einzige Expert Advisor und die Kopierserie, die sich nicht im Abrechnungsmodus befindet, wird den Austausch erhalten. Kurz gesagt, etwas wie.

Wenn der Motor eine Adresse empfängt, wird die Adresssperre aufgehoben. Damit sich die Adressen nicht überschneiden.

Dies ist nicht der richtige Ansatz. Lassen Sie mich das erklären:

Jedes Exemplar von EA hört nicht auf, seine Nachrichten an die Engine in eine eigene, separate Ressource zu schreiben. Gleichzeitig initialisiert jede Kopie des EA die Werte ihrer eigenen Elemente in ihrer Kopie der Kernelparameter. Das heißt, dass alle Kopien des EA ordnungsgemäß funktionieren sollten, auch wenn sie nicht mit dem Motor verbunden sind.

Wenn die Engine die Verbindung zwischen den Kopien des EA umschaltet, muss sie ihre Kernelparameter mit dem Kernel des verbundenen EA synchronisieren. Zeichnen Sie anschließend die Elemente in den Fenstern neu, damit sie die aktuellen Informationen anzeigen.

Was die Kommunikation mit dem ausgewählten Expert Advisor angeht, ist alles ganz einfach. Die Ressource für den Empfang von Nachrichten von der Engine (sowie die Ressource für Nachrichten für die Engine), jeder EA wird seine eigene haben. Das heißt, dass die Engine ihre Meldungen einfach in der anderen Ressource aufzeichnet und die Meldungen der anderen Ressource liest. Diese Ressource gehört dem angeschlossenen EA.

Grund der Beschwerde: