Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 54
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
Merkmale der vererbten Strukturen
Wenn Sie wissen wollen, ob das "Unbegrenzt"-Flag in Einstellungen --> Diagramme --> Maximale Balken im Fenster aktiviert ist, verwenden Sie diese Konstruktion:
Wenn ich nicht möchte, dass eine öffentliche Methode aufleuchtet (wenn ich zum Beispiel einen Punkt nach dem Objektnamen eingebe), mache ich diese Methode zu einem öffentlichen Operator. Es ist jedoch nicht immer möglich, eine solche Krücke zu benutzen.
Wenn ich nicht möchte, dass eine öffentliche Methode aufleuchtet (wenn ich zum Beispiel einen Punkt nach dem Objektnamen eingebe), mache ich diese Methode zu einem öffentlichen Operator. Allerdings ist es nicht immer möglich, eine solche Krücke zu benutzen.
Gibt es ein Beispiel im Code? Ich bitte Sie.
Gibt es ein Beispiel im Code? Ich bitte Sie.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Eigenheiten der mql5-Sprache, Feinheiten und Tricks
fxsaber, 2017.09.08 13:20
Ist das nicht
Ist das nicht das Gleiche?Und dies.
Ist das nicht das Gleiche?Nein, natürlich nicht. Die Felder Wert1, Wert2, ... sind viele; GetValue1() und GetValue2() sind dasselbe. Es ist nicht sinnvoll, bei jedem GetValue zusätzliche Berechnungen durchzuführen. Es macht keinen Sinn, Berechnungen auch nur in einem mehrfach aufgerufenen GetValue durchzuführen.
Ich konnte nicht herausfinden, wie man die Größe eines Array-Feldes einer einfachen Struktur festlegen kann. Also habe ich diese Krücke gebaut.
Ich habe Makros verwendet, um es kurz zu machen. In MQL5 gibt es wahrscheinlich keine andere Möglichkeit. Ist dies eine normale Lösung in C++? Wie Vorlage <typesize S>.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Bibliotheken: MT4Orders
fxsaber, 2017.09.14 08:52
Der SL/TP-Trigger wurde bereits vor den MQL5 Reason-Flags im Forum veröffentlicht. Seine Logik zeigte deutlich, dass, wenn SL/TP/SO-Niveaus einer offenen Position vom Handelsserver akzeptiert werden, ein entsprechender Marktauftrag generiert wird, der in der MT5-Tabelle der offenen Aufträge steht, bis er ausgeführt wird.
Daher ist im MT5 selbst bei reinem MQL5 die Änderung/Löschung solcher Aufträge nicht möglich, und die Handelslogik im MT5 erfordert die Überprüfung, ob ein offener Auftrag tatsächlich eingefroren ist oder nicht.
...Wir können sehen, dass der TP-Auftrag mehr als eine Viertelsekunde lang zwischen den offenen Aufträgen hing. Jeder Versuch, sie zu ändern oder zu löschen, hätte zu Fehlern geführt.
Seien Sie sich dieser Funktion des MT5 bewusst.
Wenn ich nicht möchte, dass eine öffentliche Methode aufleuchtet (wenn ich zum Beispiel einen Punkt nach dem Objektnamen eingebe), mache ich diese Methode zu einem öffentlichen Operator. Allerdings ist es nicht immer möglich, eine solche Krücke zu benutzen.
Eigentlich ist es eine Art Mega-Krücke. Wie wollen Sie später Ihren Code analysieren, der so uninformative Operatoren enthält, dass Sie nicht verstehen, was sie tun?
Das muss ein Konstruktionsfehler sein. Wenn eine Klasse zunächst nicht von außen verändert werden soll, sondern nur Get-Methoden enthält, sollte sie gleich bleiben. Alle Änderungen werden über die von ihr geerbten Klassen durchgeführt.
Eine weitere praktische Variante wäre die geschützte Vererbung, bei der die Basisklasse alle Methoden enthält und die geerbte Klasse nur die Get-Methoden anzeigt. Und bei Bedarf können Sie sie auf die Basisklasse übertragen. Aber Metaeditor hat den Fehler immer noch nicht behoben, alle diese Methoden werden in die Liste aufgenommen, auch wenn sie nicht verfügbar sind.
Es ist nicht sinnvoll, für jeden GetValue zusätzliche Berechnungen durchzuführen. Selbst bei einem mehrmaligen Aufruf von GetValue sind die Berechnungen nutzlos.
Was hindert Sie also daran, die Methode Recalculate() zu verwenden? Wenn das der Grund ist, warum die Klasse logisch funktioniert, weil die Klasse selbst nicht definieren kann, wann eine Neuberechnung notwendig ist, bedeutet das, dass die Klasse von einem Benutzer gesteuert wird.