Erstellen einer grafischen Benutzeroberfläche für MQLs im grafischen Modus. - Seite 13

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

Maxim, inwiefern ist diese Lösung besser? Denn um den Status einer Flagge zu überprüfen, muss sie auch in MQL periodisch überprüft werden. Es stellt sich also heraus, dass man überall, wo man hinschaut, ständig Veränderungen des Zustands von etwas überwachen muss, um zu verstehen, dass es Zeit ist, die Daten abzuholen. Und dieses Fragment kann in der dll selbst gespeichert und dort überprüft werden - so mache ich es auch. In Ihrem Beispiel haben Sie einen impliziten Aufruf an die DLL, um den Status der Flagge zurückzugeben.

Die Überprüfung der Flagge ist ein sehr schneller Vorgang. Ich meine den schnellsten überhaupt :-)

Und in diesem Beispiel gibt es keine impliziten Aufrufe:

InitDLL empfing int *flags als Eingabe, speicherte sie irgendwo dort, erzeugte einen Trace, der etwas zählt und nach Abschluss atomic_inc(flags) ausführt.

Der Berater muss nur flags[0] überprüfen.

 
Es ist zu überprüfen. Das ist der springende Punkt. Ich schlage vor, dass das Tool benachrichtigt werden sollte, wenn eine "Aufgabe" abgeschlossen ist. Das heißt, Sie müssen nicht ständig Ressourcen für die Kontrolle aufwenden. Die Benachrichtigung kam - Sie haben die Daten erhalten.
 
Maxim Kuznetsov:

Die Überprüfung der Flagge ist ein sehr schneller Vorgang. Das heißt, es ist das schnellste überhaupt :-)

Und in diesem Beispiel gibt es keine impliziten Aufrufe:

InitDLL empfängt int *flags am Eingang, speichert es irgendwo, erzeugt einen Trace, der etwas zählt und macht atomic_inc(flags) nach Abschluss.

Der Berater muss nur die Flaggen[0] überprüfen.

Aber Sie können nicht nichts tun, nur mit der Überprüfung der Flagge - Inter-Thread-Synchronisation erforderlich ist, Barrieren, atomar oder mutex, die eine zu nehmen, natürlich, für nicht jede CPU.


Alexey Barbashin:
Genau zu prüfen. Das ist der springende Punkt. Und ich schlage vor, dem Tool mitzuteilen, dass die "Aufgabe" erledigt ist. Das heißt, Sie müssen nicht ständig Ressourcen für Kontrollen aufwenden. Die Benachrichtigung kam - Sie haben die Daten erhalten.
Und wie sind all diese Mutexe implementiert? Soweit ich weiß, geschieht das alles durch Kontrolle und Setzen von Flaggen. Sie müssen ohnehin irgendwo im µl-Thread ein Flag setzen.
 
Maxim Kuznetsov:

Die Überprüfung der Flagge ist ein sehr schneller Vorgang. Das heißt, es ist das schnellste überhaupt :-)

Und in diesem Beispiel gibt es keine impliziten Aufrufe:

InitDLL empfängt int *flags als Eingabe, speichert sie irgendwo, erzeugt einen Trace, der etwas zählt und führt nach Abschluss atomic_inc(flags) aus.

Der EA muss nur flags[0] überprüfen.

Max, die Situation mit dem Callback ist jetzt klar: Wir nutzen das, was wir haben, und warten darauf, dass die Entwickler die Callback-Funktion hinzufügen.

Ich möchte noch einmal auf die Frage der grafischen Benutzeroberfläche zurückkommen. Es spielt keine Rolle, worauf sie gezeichnet ist. Ich mache es zum Beispiel in Sharp, Sie machen es in Tcl.

Solange das Formular selbst existiert, stellt es kein Problem dar. Aber ich möchte wirklich, dass die Formulare nicht von selbst fliegen, sondern an die entsprechenden Karten gebunden sind.

Wenn Sie das Elternteil des erstellten Formulars festlegen, wird es im erforderlichen Diagramm platziert. Aber es gibt ein Problem beim "Verschmelzen" des Fensters mit dem Diagramm, und das Diagramm zeichnet nur die "geklebte" Form.

Ich schlage vor, dieses Problem vorerst zu lösen, da es noch außerhalb des Aktionsradius der MT-Entwickler liegt.

Haben Sie versucht, Ihre GUI mit den Charts zu verbinden?

 
pavlick_:

Aber es reicht nicht aus, nur die Flaggen zu überprüfen, man braucht eine Synchronisation zwischen den Threads, Barrieren, Atomic oder Mutex, was natürlich nicht für jede CPU relevant ist.


Und wie werden alle Arten von Mutexen implementiert? Soweit ich weiß, geschieht das alles durch Kontrolle und Setzen von Flaggen. Sie müssen ohnehin irgendwo im µl-Thread ein Flag setzen.

Das ist richtig. Aber lassen Sie es auf der sehr niedrigen Anwendungsebene geschehen, wie es zum Beispiel mit OnChartEvent funktioniert. D.h., jetzt programmieren wir es explizit (Prüfungen), aber es könnte alles auf die Anwendungsebene übertragen werden, wie Renat sagte (er hat einige Varianten vorgeschlagen).

 
Maxim Kuznetsov:

Ich bin dabei :-) spenden - können Sie es an MS schicken

066cd265-e2fe-468e-9492-4228e9759e38
8e1040ba-dc3e-4e2a-9208-e3ea8da9ad05
03dcd7cd-4b9b-4ff7-bff0-e0839a0f9d8b
d69f2c8c-de51-4557-8188-4ebb870da7da
a79a8cc6-f785-4268-bc4e-2deda0f1ecd0
f4f59f52-1da8-4f74-a71e-9aec1992674d
85608797-6015-456d-af64-ad7890120372
9289991a-e287-47fb-b595-6d719c1b7dbd
63d3b953-3229-4045-a82a-fc9e7795bb01
c75c4e0f-8320-42df-943c-9aada54b60eb

Wenn es noch etwas gibt, kann ich es vielleicht finden.

Danke, ich habe bestanden und ein Pfund bekommen!

 
Alexey Volchanskiy:

Danke, ich habe bestanden und ein Pfund bekommen!

so ist es profitabler als scalper ! bereit zu geben Einzelhandel für einen Cent, geben Sie ihnen Großhandel für 1$/ten. der Gewinn ist nur durch die Übertragungsrate begrenzt :-) wie viele Kilobytes pro Sekunde
 
Maxim Kuznetsov:
so ist es profitabler als scalper ! bereit, sie für einen Cent zu verkaufen, verkaufen Sie sie in der Masse für 1$/ten. die einzige Grenze ist die Übertragungsgeschwindigkeit :-) einige Kilobytes von GUIDs pro Sekunde

Das ist verdammt verlockend. So werden wir den Markt für gebrauchte GUIDs erobern! Und werden Sie ein Monopol, schaffen Sie einen künstlichen Rausch wie bei Bitcoin und werden Sie reich!

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

Max, gut, die Situation mit Callback ist klar für jetzt. Wir werden verwenden, was wir haben und warten auf die Entwickler, um Callback-Fähigkeit hinzuzufügen.

Ich möchte noch einmal auf die Frage der grafischen Benutzeroberfläche zurückkommen. Es spielt keine Rolle, worauf sie gezeichnet ist. Ich mache es zum Beispiel in Sharp, Sie machen es in Tcl.

Solange das Formular selbst existiert, stellt es kein Problem dar. Aberich möchtewirklich, dass die Formulare nicht von selbst fliegen, sondern an die entsprechenden Karten gebunden sind.

Wenn Sie das Elternteil des erstellten Formulars festlegen, wird es im erforderlichen Diagramm platziert. Aber es gibt ein Problem beim "Verschmelzen" des Fensters mit dem Diagramm und das Diagramm zeichnet nur die "geklebte" Form.

Ich schlage vor, dieses Problem vorerst zu lösen, da es noch außerhalb des Aktionsradius der MT-Entwickler liegt.

Haben Sie versucht, Ihre GUI mit den Charts zu verbinden?

Ich habe keinen Bedarf, Formulare mit Diagrammen zu verknüpfen.

Es gibt operative Grafiken, die direkt mit dem Diagramm verbunden sind (alle Arten von Linien, Beschriftungen, Inschriften usw.), dies wird natürlich von MT-Tools erledigt.

Aber es gibt Verwaltungs-GUIs - Einstellungen, Berichte, Statistiken. Sie sind ziemlich groß und es ist ein Verbrechen gegen den Benutzer, sie in ein Diagramm zu setzen :-)

Sie müssen das Formular aus dem Fenstermanager entfernen und die Änderungen der Diagrammgeometrie und des Fokus verfolgen.
So ein "Sonnenuntergang von Hand" :-) Zumindest werden Sie nicht in die Eingeweide des MetaTrader eindringen und keine neuen Chills und Hooks in seine Fenster einbauen - d.h. Sie werden sich anständig benehmen

Jede GUI, die von einer DLL aufgerufen wird, hat die unangenehmste Eigenschaft, dass Expert Advisors/Indikatoren, die sie aufrufen, regelmäßig neu gestartet werden, wenn sie auch nur niesen. Das führt zur Wiedereröffnung von Formularen und zu Wasserfällen von unflätigen Ausdrücken...
Vielleicht werden die seit langem angekündigten "Dienste" (oder wie auch immer sie genannt werden) diesen Nachteil nicht haben.

Die Aktualisierung/ über die Platzierung eines Formulars - setzen Sie RectLabel auf das Diagramm und in die Diagramm-Ereignisse, um die Änderung der Codinate zu verfolgen. Wenn es sich ändert - setzen Sie seine Form strikt oben drauf :-) Sie brauchen ein Tamburin, wenn Sie die Registerkarte wechseln, minimieren Sie das Fenster, um Ihr Formular rechtzeitig zu verstecken
 
Alexey Volchanskiy:

Sie haben überhaupt nichts erklärt. Wie erhalten Sie die Daten aus MT* in das Sharpe-Panel?

Ich habe das Feedback über Memory Mapping mit zeitgesteuerter Abfrage durchgeführt. Das Panel übermittelte nur verschiedene Einstellungen und langsame Berechnungsergebnisse

Ich habe einen externen TC, ich brauche keine GUI-Rückmeldung an das Terminal.