Fragen zum MQL5-Assistenten und zur Standardbibliothek der Handelsklassen - Seite 11
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Drei Fragen:
Theoretisch können wir den EA natürlich auch mit dem Assistenten erstellen und dann all diese Funktionen manuell in den Code einfügen. Es ist jedoch wünschenswert, dass all dies in Form von Standardmethoden implementiert wurde, d. h. für Dummies, die den Assistenten verwenden möchten, damit sie nicht in den Code einsteigen und ihn bearbeiten müssen, wenn sie z. B. ein Signalmodul durch ein anderes ersetzen möchten.
Sie haben alle Ihre Fragen selbst beantwortet: "... ...den EA mit Hilfe eines Assistenten erstellen und dann... manuell ...". Es gibt noch keine anderen Optionen. Der Assistent wird höchstwahrscheinlich in naher Zukunft nicht entwickelt werden.
Es ist schade, dass ein so gutes Vorhaben in einer entfernten Ecke aufgegeben wird.
Wäre es auf den neuesten Stand gebracht worden, hätte man viel tun können, d.h. wir hätten fertige Module erstellen können, aus denen Dummies und andere Benutzer verschiedene fertige EAs zusammenstellen können, ohne sich durch Codes arbeiten zu müssen. Aber in diesem Fall entsteht das gleiche Chaos wie beim algorithmischen mql4, d.h. man nimmt einen Algorithmus, steigt in den Code ein und verwendet ihn manuell. Auch hier wird das OOP-Prinzip verletzt. Wenn Sie zum Beispiel ein Modul durch ein anderes ersetzen wollen, müssen Sie wieder in den Code einsteigen und alles von Hand ändern. Man bekommt eine Menge Unsinn, denn nur durch die Codes zu "kriechen", um wenigstens zu verstehen, wo und was zu ändern ist, würde eine Menge Zeit kosten.
Das war ein guter Anfang. Schade. Ich habe gerade gestern ein Signalmodul erstellt, aber ich bin immer noch verwirrt, wie ich den gesamten EA zum Laufen bringen kann, ohne jedes Mal in den Quellcode zu gehen. Ich habe das Modul gerade eingefügt, Positionsmanagement, Geldmanagement und Risikomanagement hinzugefügt, und alles funktioniert. Aber nein, es wird nicht funktionieren. Wenn ein Benutzer einen EA mit Hilfe des Assistenten erstellt, wird er nicht funktionieren. Er wird eine ganze Reihe von Anweisungen schreiben müssen, wo er im Code suchen und was er ändern muss. Ganz zu schweigen davon, dass ich mich mit all dem noch selbst auseinandersetzen muss, bevor ich eine Anleitung schreibe.
Es bleibt den Nutzern also nichts anderes übrig, als mql5, OpenCL usw. zu erlernen, um mit dem Autotrading umzugehen. Andernfalls werden sie kein Glück haben.
Nun, da dieses Projekt aufgegeben wurde, werde ich nun in eine andere Richtung denken.
Es ist schade, dass ein so gutes Vorhaben in der Versenkung verschwunden ist.
Hoffen wir, dass es nicht aufgegeben, sondern verschoben wird. Ich habe selbst eine Menge interessanter Gedanken zur Entwicklung des Zauberers. Aber...
Die Hoffnung stirbt zuletzt (c) Sprichwort
Für die erste Frage, nämlich wie man das Signalmodul mit Eröffnungskursen testen kann und mit Ticks handelt, habe ich eine Lösung gefunden, so dass ich nicht in den Codes wühlen muss, und sogar besser als die allgemein akzeptierte.
Ich habe noch nicht herausgefunden, wie ich die Anzeigen des Signalmoduls in den Modulen Positionsmanagement und Aktien- und Risikomanagement lesen kann. Ich habe den Quellcode durchsucht und mich umgesehen. Das Signalmodul erhält seine Ergebnisse über die Methode direction(), d.h. ich brauche nur eine Instanz eben dieser Modulklasse in den Modulen Positionsmanagement und Kapital- und Risikomanagement anzusprechen und eben diese Methode aufzurufen, um ihre Werte zu lesen. Wie dies ohne Änderung des Codes geschehen kann, ist noch nicht klar.
Die Hoffnung stirbt zuletzt (c) Sprichwort
Für die erste Frage, nämlich wie man das Signalmodul mit Eröffnungskursen testen kann und mit Ticks handelt, habe ich eine Lösung gefunden, so dass ich nicht in die Codes gehen muss, und sogar besser als die allgemein akzeptierte Lösung.
Und ich kann nicht herausfinden, wie ich die Werte des Signalmoduls in den Modulen Positionsmanagement und Aktien- und Risikomanagement ablesen kann, ohne die Codes zu suchen. Ich habe den Quellcode durchsucht und mich umgesehen. Das Signalmodul erhält seine Ergebnisse über die Methode direction(), d.h. ich brauche nur eine Instanz eben dieser Modulklasse in den Modulen Positionsmanagement und Aktien- und Risikomanagement anzusprechen und eben diese Methode aufzurufen, um ihre Werte zu lesen. Wie dies ohne Änderung des Codes geschehen kann, ist noch nicht klar.
Ohne Änderung der Codes wird es wahrscheinlich nicht funktionieren.
Die Codes nicht zu ändern, wird wahrscheinlich nicht funktionieren.
Noch ist nicht alles verloren. Sie können Klassen erstellen, die von CExpert, CExpertMoneu und CExpertTrailing geerbt wurden, und ihnen die erforderlichen Methoden hinzufügen, um auf eine Instanz der Signalmodulklasse zuzugreifen. Aber auch hier gibt es ein Problem, denn der Assistent schreibt in den erstellten EA #include <Expert\Expert.mqh> und nicht dessen Nachkomme.
Darüber müssen wir noch nachdenken.
Hätten die Entwickler gleich geahnt, dass ein Signalmodul für alle anderen Module als Hauptmodul verwendet werden kann und zusätzliche Signale (wie in dieser Version des Assistenten) zu den Modulen Positionsunterstützung und Aktien- und Risikomanagement hinzugefügt werden können, wären die Codes einfacher gewesen. Aber in unserem Fall erfordert jedes Modul die Angabe zusätzlicher Bedingungen für Signale und somit zusätzliche externe Einstellungen, was zu einem solchen Ungetüm mit einer Vielzahl von zu optimierenden Parametern führt. Ganz zu schweigen davon, dass die Signale eines Moduls miteinander in Konflikt geraten können, d.h. ein Signalmodul kann eine Position eröffnen und ein dazugehöriges Modul sie beim nächsten Tick schließen, wenn die Ein- und Ausstiegsbedingungen des Marktes widersprüchlich sind.
Noch ist nicht alles verloren. Schließlich können Sie Klassen erstellen, die von CExpert, CExpertMoneu und CExpertTrailing geerbt wurden, und ihnen die erforderlichen Methoden für den Zugriff auf eine Instanz der Signalmodulklasse hinzufügen. Aber auch hier gibt es ein Problem, denn der Assistent schreibt in den erstellten EA #include <Expert\Expert.mqh> und nicht dessen Nachkomme.
Darüber müssen wir noch nachdenken.
Hätten die Entwickler gleich geahnt, dass ein Signalmodul für alle anderen Module als Hauptmodul verwendet werden kann und zusätzliche Signale (wie in dieser Version des Assistenten) zu den Modulen Positionsunterstützung und Aktien- und Risikomanagement hinzugefügt werden können, wären die Codes einfacher gewesen. Aber in unserem Fall erfordert jedes Modul die Angabe zusätzlicher Bedingungen für Signale und somit zusätzliche externe Einstellungen, was zu einem solchen Ungetüm mit einer Vielzahl von zu optimierenden Parametern führt. Ganz zu schweigen von der Tatsache, dass die Signale eines Moduls miteinander in Konflikt geraten können, d.h. ein Signalmodul kann eine Position eröffnen und ein dazugehöriges Modul kann sie beim nächsten Tick schließen, wenn sich die Ein- und Ausstiegsbedingungen des Marktes widersprechen.
So ist es konzipiert. Der Assistent erstellt den "Fisch" des EA. Weiter:
So war es auch gedacht. Der Meister schafft den "Fisch" des Beraters. Nächste:
Das ist das Hässliche daran, Dinge wie:
Wir wollten das Beste. Es stellt sich heraus, dass es dasselbe ist wie immer (c) Tschernomyrdin
Im Allgemeinen können die meisten Missverständnisse behoben werden, aber dies muss auf der Ebene der übergeordneten Stammklasse geschehen, und dann können die behobenen Klassen durch Plattform-Updates verteilt werden. D.h. Sie müssen den Zugriff auf die Methode Direction() des Signalmoduls von den Modulen Positionsunterstützung und Aktien- und Risikomanagement aus öffnen. Denn wenn einzelne Modulentwickler den Quellcode der übergeordneten Klassen bearbeiten, wird der daraus resultierende inkompatible Quellcode nicht kompatibel sein und die erstellten Module werden auf anderen Computern nicht funktionieren. Wenn Entwickler von Modulen Elternklassen mit überschriebenen Methoden erstellen, wird die Inkompatibilität immer noch auf der Master-Ebene liegen, weil letztere ihre eigenen Inludes schreibt, und folglich müssen die Endbenutzer erneut Anweisungen schreiben, und sie werden kaum in die Quellen einsteigen wollen, und wenn sie es doch tun, dann in einem einzigen Symbol oder irgendwo anders, usw...
Das ist das Problem, denn es gibt Dinge, die von Anfang an nicht bedacht wurden:
Wir wollten das Beste. Es stellt sich heraus, dass es dasselbe ist wie immer (c) Tschernomyrdin
Im Allgemeinen können die meisten Missverständnisse behoben werden, aber es ist wünschenswert, dies auf der Ebene der übergeordneten Wurzelklasse zu tun und dann die korrigierten Klassen durch Updates zu verteilen. Denn wenn der Quellcode der übergeordneten Klassen von den Modulentwicklern korrigiert wird, wird der daraus resultierende inkompatible Quellcode inkompatibel sein und die erstellten Module werden auf anderen Computern nicht funktionieren. Wenn der Entwickler übergeordnete Klassen mit überschriebenen Methoden erstellt, dann ist die Inkompatibilität bereits auf Masterebene gegeben, weil er seine eigenen Einschlüsse schreibt und daher wiederum Anweisungen an die Endbenutzer schreiben muss, und es ist unwahrscheinlich, dass sie in den Quellcode eindringen wollen, und wenn sie eindringen, dann mit einem Fehler in einem einzelnen Zeichen oder irgendwo anders, und so weiter und so fort.
Wir möchten Ihnen einige Vorschläge unterbreiten. Wir werden sie überprüfen.
Bislang gibt es nur eine einzige Lösung für die oben genannten Nachteile:
Offener Zugang zum Lesen der von der Methode Direction() des Signalmoduls zurückgegebenen Werte aus den Modulen Positionsmanagement und Kapital- und Risikomanagement.
Fügen Sie eine weitere Methode hinzu, z. B. identifier double getMainSingnal(), die eine Instanz der Signalmodulklasse aufruft und das Ergebnis der Methode Direction() des Signalmoduls zurückgibt. Da dieser Informationsaustausch im Nur-Lese-Modus erfolgt, wird die Sicherheit in keiner Weise beeinträchtigt.
Zu diesem Zweck
P.S. Die Klasse CExpert hat einen Verweis auf eine Instanz der Klasse Signalmodul.
CExpertSignal *m_signal; // trading signals object
Sie müssen analoge Felder für die Klassen CExpertMoney und CExpertTrailing erstellen und ihnen bei der Initialisierung den gleichen Wert aus dem oben genannten Feld in die Klasse CExpert übergeben