Die Ankunft einer neuen Generation von Handelssoftware. Wie sollte die EA-Schnittstelle aussehen? - Seite 12

 
Yury Kulikov:
Wie chaotisch alles ist :)
Ich sprach über ein Beispiel für die Erstellung einer Schnittstelle mit Ihrem Datei-Navigator-Indikator, implementiert in Expert Advisor. Aber klammern Sie sich nicht an die Worte "Datei-Navigator", es ist ein Beispiel für eine Aufgabe, und es kann viele ähnliche Aufgaben in Expert Advisors geben: Navigator von Terminal-Fenstern, Objekte auf dem Chart, Indikatoren im Terminal ... Und dies ist nur eine kleine Schicht von Aufgaben, die durch eine Liste (Tabelle) von Zeichenfolgen, die Sie in Ihrem Indikator über globale Variablen erhalten möchten, implementiert werden kann.
Ich bin im Moment etwas verwirrt, und mir entgeht einiges von dem, was Sie schreiben. Ich bitte um Entschuldigung. Etwas später werde ich das Konzept der Engine, des Studios, der Schnittstelle und des EA im Detail beschreiben. Danach können wir darüber diskutieren. :)
 

1. Das Konzept der Grafik-Engine.

2. Konzept des Grafikkerns.

3. die Phasen der Erstellung eines visuellen Studios für die MT-Plattform.

4. eine Beschreibung des Mechanismus zur Erstellung von EA-Schnittstellen.


1. Der grafische Motor ist ein Programm, das als Indikator dient. Dieses Programm ist ausschließlich für die Verwaltung der Benutzeroberfläche bestimmt. Sie erfüllt eine Reihe von Grundfunktionen:

  • Laden des Kerns der grafischen Oberfläche aus einer Datei.
  • Speichern der Einstellungen der Benutzeroberfläche.
  • Einführung einer einheitlichen und kohärenten Verwaltung aller Prozesse an der Schnittstelle. Es implementiert die "Mechanik" der Schnittstelle, einschließlich: Öffnen und Schließen von Fenstern, Größenänderung von Fenstern, Verschieben von Fenstern, Zusammenführen von Fenstern, Zoomen, Abspielen von Skripten, Ändern von Objektzuständen, Binden von Objekten, Steuern von Parameterwerten von Steuerelementen entsprechend ihrer Typen und Eigenschaften, Erstellen und Löschen von globalen Variablen.

Die Grafik-Engine wird dem Diagramm wie jeder andere Indikator hinzugefügt. Sie umfasst die folgenden Fenster:

  • Taskleiste, auf deren rechter Seite mehrere Symbole hinzugefügt werden, um die Dienstfenster des Motors selbst aufzurufen.
  • Dateinavigator, mit dem Sie die Bootdatei aus einer Liste von Dateien mit Schnittstellen auswählen können, die sich in einem speziellen Ordner befinden.
  • Optionale Setup-Fenster, die in diesem Stadium keine wesentliche Rolle spielen.

Dies ist im Prinzip das Ende des grafischen Motorenkonzepts. Wichtig ist, dass die Schnittstelle ohne sie nicht funktioniert.



2. Ein grafischer Kernel ist ein Informationsblock, der die Daten aller Objekte und Fenster in einer Schnittstelle enthält, die in einem Array aufgezeichnet und in einer Datei gespeichert werden.

Dieser Block ist eine digitale Darstellung der grafischen Schnittstelle. Sie wird von der Grafikmaschine auf Anweisung des Benutzers geladen. Die Grafik-Engine selbst verfügt über einen eigenen, internen grafischen Kern, der den Betrieb der eigenen Fenster sicherstellt, und innerhalb dieses Kerns wird der freie Platz für die Integration der Benutzeroberfläche (in digitaler Form) in ihn zugewiesen. Die Integration erfolgt durch das Laden des grafischen Kerns aus einer Datei.


3. Die Erstellung eines Visual Studios auf der MT-Plattform ist meines Wissens nach in zwei Phasen unterteilt:

  • In der ersten Phase wird eine dateibasierte Version des Interface Builders erstellt. Darin wird der Benutzer mit Tabellenvorlagen arbeiten. In die Tabellen schreibt der Benutzer die Typen und Namen der Schnittstellenelemente und legt die Eigenschaften ihrer Parameter fest. Die Erstellung wird für den Benutzer extrem einfach sein, er wird sich nicht um die korrekte Positionierung seiner Elemente in den Fenstern kümmern müssen (die Engine wird alles automatisch berechnen) und es wird ausreichen, die Elemente in der gewünschten Reihenfolge anzuordnen.
  • In der zweiten Phase wird eine visuelle Umgebung geschaffen, die die gleiche Methode zur Konstruktion der Schnittstelle wie der Dateikonstruktor implementiert, nur dass sie einfacher und bequemer zu benutzen ist. Außerdem können Sie das Aussehen der Steuerelemente ändern. Im Allgemeinen hat der Benutzer mehr grafische Optionen.


4. Ich möchte den Mechanismus zur Erstellung der Schnittstelle in allgemeiner Form skizzieren und den Schleier über die Technologie etwas lüften. Erläutern Sie, woher die Einfachheit der Erstellung einer Schnittstelle über eine Datei kommt.

Dies ist der Fall: Die Engine verfügt über eine spezielle Funktion, die einen vollständigen grafischen Kernel auf der Grundlage einer einzigen Datei mit einem Minimum an Ladeinformationen erstellt. Die Boot-Informationen in dieser Datei sind selbsterklärend und für den Menschen lesbar. Er ist leicht zu schreiben und zu bearbeiten. Zum Beispiel müssen Sie "_CREATE_NEW_WINDOW" schreiben, um ein Fenster zu erstellen, und "_CHECKBOX" und den Namen des Kontrollkästchens (die Engine erkennt automatisch den Namen des Elements, den Namen des Elements selbst und den Namen seines Parameters).

Diese Funktion heißt "G_CORE_BUILDER()" und baut den grafischen Kern auf, indem sie Daten aus zwei Hauptquellen übernimmt: eine vom Benutzer erstellte Bootup-Datei und das Array "CONTENT[]", das alle in Fensterplattformen und Steuerelementen enthaltenen Standardobjektgruppen enthält. "CONTENT[]" enthält auch Zustände und Skripte von Objekten. Alles in einer Reihe. Im Allgemeinen wird das Quellmaterial aus "CONTENT[]" + der vom Benutzer erstellten Loader-Datei von "G_CORE_BUILDER()" verwendet, um den grafischen Kern zu erstellen, mit dem die Engine arbeitet.

 

Um Verwirrung zu vermeiden, möchte ich hinzufügen, dass die Boot-Datei in zwei Formaten vorliegen kann:

1. In Form einer Reihe von benutzerdefinierten Anweisungen, die Fenster, Steuerelemente und Eigenschaften ihrer Parameter beschreiben. In diesem Fall wird in der Phase des Ladens die Funktion "G_CORE_BUILDER()" gestartet, die den grafischen Kern aufbaut.

2. In Form des fertigen Grafikkerns, der direkt in die Engine geladen wird. Bei dieser Variante ist es nicht notwendig, die Funktion "G_CORE_BUILDER()" zu verwenden.

Die erste Option wird im Schnittstellenkonstruktor verwendet, die zweite, um die vorgefertigte Schnittstelle einer beliebigen Anwendung auszuführen.

Eine vereinfachte Version der Engine lädt den fertigen grafischen Kernel, aus dem das Kernelkonstruktionssystem ("G_CORE_BUILDER()" und das "CONTENT[]"-Array entfernt werden) um seine Bedienung zu vereinfachen.
 
Реter Konow:
Ein Bild zu zeichnen ist noch keine Schnittstelle, die wichtigste Frage, die Sie nicht erwähnen, ist, wie der Expert Advisor mit dem Indikator interagieren wird, die"globalen Variablen" klingt irgendwie vage.
 
Yury Kulikov:
Zeichnen eines Bildes ist nicht die Schnittstelle noch, die wichtigste Frage, die Sie verpassen - wie der EA mit dem Indikator interagieren wird, durch die"globalen Variablen" klingt irgendwie vage.
Im Moment ist das System der Interaktion des Expert Advisors mit der Schnittstelle, die im Indikator mit globalen Variablen implementiert ist, nur auf dem Papier, und ich habe keine Erfahrung in seiner Erstellung. Ich werde versuchen, meine Idee ausführlicher zu beschreiben, und wenn Sie Widersprüche oder Fehler darin finden, kommentieren Sie bitte.

1. Ich möchte Sie daran erinnern, was jeder weiß: Jede globale Variable gilt für alle Programme, die in das Diagramm geladen werden. Um eine globale Variable zu erstellen, müssen Sie die spezielle Funktion aufrufen und ihr den Namen der Variablen und ihren Wert übergeben.

2. Globale Variablen werden von der Engine in der Phase des Ladens der Schnittstelle erstellt, die die Boot-Datei liest. Die Namen der globalen Variablen und ihre gespeicherten (oder voreingestellten) Werte werden in die Boot-Datei selbst geschrieben.

3. Innerhalb der Engine gibt es einen speziellen Block, der für die Steuerung der Parameterwerte der Steuerelemente entsprechend dem Elementtyp, dem Wertetyp und den Parametereigenschaften verantwortlich ist. Wenn der Benutzer ein Kontrollkästchen ankreuzt oder einen Wert in einem "Spin-Edit"-Element umschreibt, führt der Parameter-Interaktionsblock des Steuerelements bestimmte Aktionen für einen bestimmten Wert, eine bestimmte Variable, durch.

4. Da es sich um eine globale Variable handelt, wird ihr Wert vom Expert Advisor ständig "beobachtet", und er reagiert auf Änderungen des Wertes jeder der globalen Variablen gemäß den darin enthaltenen Algorithmen.

5. Der Expert Advisor "beobachtet" die globalen Variablen nicht nur, sondern arbeitet von seiner Funktionalität her vollständig mit deren Werten. In diesem Fall ist es wichtig zu verstehen, dass die globalen Variablen bedingt in zwei Typen unterteilt werden: vom Benutzer "kontrollierte" Variablen, deren Werte vom Benutzer über die Steuerelemente in der Schnittstelle gesetzt werden, und von der EA-Funktionalität "kontrollierte" Variablen, deren Werte von den Benutzerfunktionen gesetzt werden.

6. Die Engine wiederum arbeitet mit beiden bedingten globalen Variablentypen. Ich habe das Prinzip der Arbeit mit Werten von Variablen "unter Kontrolle" des Benutzers beschrieben, und das Prinzip der Arbeit mit Werten "unter Kontrolle" der EA-Funktionalität wird wie folgt sein: derselbe Block teilt die Steuerelemente bedingt in zwei Kategorien: diejenigen, die den Wert kontrollieren, und diejenigen, die den Wert anzeigen (Anzeige in irgendeiner Weise). Jedes dieser Steuerelemente (Eingabefeld, Fortschrittsbalken usw.) ist auf das Ereignis der Wertänderung seiner Variablen abonniert. Sobald sich der Wert einer Variablen ändert, verweist der Block auf das entsprechende Element und führt eine Manipulation mit diesem Element durch, das standardmäßig im Elementtyp enthalten ist.

Man beachte, dass der Block alle globalen Variablen mit der Frequenz des Zeitgebers durchläuft und somit dem Verhalten der Werte der funktional gesteuerten Variablen "folgt".

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.S. Was die Frage betrifft, wie die EA-Einstellungen von der Benutzeroberfläche geladen werden können, so wird dies meiner Meinung nach auf folgende Weise geschehen:

Die Werte aller globalen Variablen, mit denen der EA arbeitet (einschließlich derjenigen, die die Einstellungen des EA darstellen), werden in der Ladedatei gespeichert, bevor sie beim Entladen des EAs zerstört werden. Bei jedem Laden der Schnittstelle werden dieselben globalen Variablen neu angelegt und erhalten ihre ursprünglichen Werte. Dann wird der Expert Advisor geladen und greift auf seine Variablen zu.
 
Реter Konow:

Wie kann Text (z. B. Dateiname) über eine globale Variable übergeben werden?

Wie kann der Expert Advisor ein Fenster aktivieren/deaktivieren?

Wie kann der Expert Advisor ein neues Fenster erstellen, während der Expert Advisor läuft?

...

 
Yury Kulikov:

1. Wie übergebe ich Text (z.B. Dateiname) durch eine globale Variable?

2. Wie kann der Experte das Fenster aktivieren/deaktivieren?

3. Wie kann der Expert Advisor ein neues Fenster erstellen, während der Expert Advisor läuft?

...

1. diese Aufgabe ist noch nicht gelöst. Ich kann ein paar Varianten vorschlagen:

a) Übergabe der Zeichenkette durch den Namen der globalen Variable selbst. Da die Variablen indiziert sind, müssen die Engine und der Expert Advisor immer den Index der zu löschenden und neu anzulegenden Glob-Variablen "kennen", um den Text zu übertragen, indem sie jedes Mal ihren Namen ändern und die Zeichenkette durch sie hindurchleiten. Auf den ersten Blick sieht die Option unübersichtlich aus, aber wer weiß, vielleicht lässt sie sich ja noch verbessern...

b) Übermittlung einer Zeichenkette mit dem Wert einer Variablen, fortlaufend mit Buchstaben, wobei anstelle der Buchstaben selbst die entsprechenden Zahlen übermittelt werden und der Vorgang der Übermittlung in n-fachen Zeitabständen erfolgt.

2. Im Moment fehlt in meinem Konzept eine Methode zur Aktivierung/Deaktivierung von Fenstern auf der EA-Seite. Um ehrlich zu sein, bin ich mir nicht ganz sicher, was Sie meinen. Die Fenster werden nur vom Benutzer und dem Motor bearbeitet. Der Expert Advisor arbeitet nur mit Variablen und seinen eigenen Funktionen. Er hat noch keinen Zugriff auf die Schnittstelle. (Und was soll das bringen?).

3. Neue (zusammengesetzte) Fenster, in denen der Benutzer nach eigenem Ermessen Gruppen von (Komponenten-)Fenstern zusammenstellen kann, werden von der Engine und nicht vom Experten erstellt, z. B. durch Anklicken des Hauptmenüpunkts "Neues Fenster". Wichtig ist, dass alle gruppierten Fenster bereits in der Schnittstelle angelegt sind und die Anzahl der zusammengesetzten Fenster, die zur Gruppierung der vom Benutzer gewünschten Informationen verwendet werden, (bedingt) unbegrenzt sein kann. Die Fenstersätze und ihr Inhalt werden in einer Datei gespeichert.

 
Реter Konow: Es hat noch keinen Zugriff auf die Schnittstelle. (Und was soll das bringen?)

Der Punkt ist grundlegend. Ereignisse ereignen sich nicht nur auf der Schnittstelle.

Mehr als ein Eisberg wird sich Ihrer Titanic in den Weg stellen. Sie haben das Projekt von der falschen Seite aus begonnen, und globale Variablen werden hier nicht helfen.

 
Yury Kulikov:

Der Punkt ist grundlegend. Ereignisse ereignen sich nicht nur auf der Schnittstelle.

Mehr als ein Eisberg wird sich Ihrer Titanic in den Weg stellen. Sie haben das Projekt auf der falschen Seite begonnen und globale Variablen werden Ihnen nicht helfen.

Auf welcher Seite sollte ich Ihrer Meinung nach mit dem Projekt beginnen, und was kann mir helfen?
 
Реter Konow:
OK, aber wo sollte ich Ihrer Meinung nach mit dem Projekt beginnen, und was kann mir helfen?

Ich denke, wir sollten mit dem Experten beginnen. Ich habe drei Arten von Aufgaben genannt, die für den Sachverständigen relevant sind, aber es stellt sich heraus, dass sie in Ihrer Schnittstelle nicht machbar sind.

Was könnte helfen? Vielleicht eine tiefere Integration oder die Beschränkung des Projekts auf "Fernsteuerung".