Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 508
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
ist das kürzer? bool barup=... WindowRedraw(); wird trotzdem ausgeführt - übernommen aus if
es kann auch kürzer sein ... siehe meine Datei
Irgendwie ist die Aussage der Frage doch klar, oder? Es geht darum, dieselbe Sache zu initialisieren.
Wie wollen Sie etwas initialisieren, das noch nicht existiert? Nachdem das Objekt erstellt wurde, beginnt es zu existieren, und erst dann kann es initialisiert werden.
Ich habe es Ihnen gleich gesagt: Machen Sie aus einem Objekt einen parametrischen Konstruktor, und übergeben Sie ihm die erforderlichen Parameter, die zur Initialisierung des neu erstellten Objekts verwendet werden sollen.
Sie können Parameter über eine Struktur übergeben, die Sie in OnInit() des Programms mit den erforderlichen (für alle derartigen Objekte konstanten) Daten füllen. Dann erstellen Sie beispielsweise in OnTick() oder in jedem anderen Standard-Handler Ihre Objekte, aber wenn Sie sie erstellen, schreiben Sie Folgendes:
CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
Oder, wenn sich die Objektdaten von Programm zu Programm nicht ändern und immer die gleichen Werte haben, dann initialisieren Sie sie explizit mit den erforderlichen Parametern im Konstruktor über die Initialisierungsliste, wie Igor oben sagte:
Forum über Handel, automatisierte Handelssysteme und Strategietests
Alle Fragen von Neulingen zu MQL4, Hilfe und Diskussion über Algorithmen und Codes
Ihor Herasko, 2018.03.28 17:31
Dies geschieht in der Initialisierungsliste, die sich im Klassenkonstruktor befindet:
Wie wollen Sie etwas initialisieren, das noch nicht existiert? Nachdem das Objekt erstellt wurde, beginnt es zu existieren, und erst dann kann es initialisiert werden.
Ich habe es Ihnen gleich gesagt: Machen Sie aus einem Objekt einen parametrischen Konstruktor, und übergeben Sie ihm die erforderlichen Parameter, die zur Initialisierung des neu erstellten Objekts verwendet werden.
Sie können Parameter über eine Struktur übergeben, die Sie in OnInit() des Programms mit den erforderlichen (für alle derartigen Objekte konstanten) Daten füllen werden. Dann erstellen Sie z. B. in OnTick() oder in jedem anderen Standard-Handler Ihre Objekte, aber bei der Erstellung schreiben Sie Folgendes:
CMyObject object = new CMyObject(a_here_structure_with_set_parameters);
Ja, ich verstehe. Ich danke Ihnen. Nun, irgendwie dachte ich, es gäbe eine Lösung, damit ein Objekt, wenn es erstellt wird, sofort einige voreingestellte Parameter hat, ohne sie an den Konstruktor oder was auch immer übergeben zu müssen. Durch einen Elternkurs oder so.
In meiner Klasse habe ich alle möglichen Dinge wie Indikatorparameter usw. als Parameter. Im Allgemeinen sind es Dinge, die statisch und gleich bleiben. Warum also sollte ich diese Werte jedes Mal übergeben, wenn ich ein Objekt erstelle?
Geben Sie es also nicht weiter. Initialisieren in der Initialisierungsliste, wie ich gezeigt habe. Bei der Erstellung einer Instanz der Klasse wird automatisch der Klassenkonstruktor aufgerufen, der alle in der Initialisierungsliste angegebenen Mitglieder der Klasse initialisiert. Fügen Sie die Funktion Print in die CCandle-Methode ein, und Sie werden sehen, dass der Konstruktor ohne einen Verweis auf ihn aufgerufen wird.
Ja, ich verstehe. Ich danke Ihnen. Nun, irgendwie dachte ich, es gäbe eine Lösung, so dass, wenn ein Objekt erstellt wird, würde es einige voreingestellte Parameter sofort haben, ohne sie an den Konstruktor oder was auch immer zu übergeben. Über eine übergeordnete Klasse oder so.
Nochmals. Sie können dies tun, ohne die Daten an den Konstruktor zu übergeben.
Geben Sie es also nicht weiter. Initialisieren in der Initialisierungsliste, wie ich gezeigt habe. Bei der Erstellung einer Instanz der Klasse wird automatisch der Klassenkonstruktor aufgerufen, der alle in der Initialisierungsliste angegebenen Mitglieder der Klasse initialisiert. Legen Sie die Print-Funktion in die CCandle-Methode, und Sie werden sehen, dass der Konstruktor ohne Verweis auf ihn aufgerufen wird.
Ich verstehe es nicht, welchen Unterschied macht es, ob man sie durch den Konstruktor oder durch die Initialisierungsfunktion übergibt?
Geben Sie es also nicht weiter. Initialisieren in der Initialisierungsliste, wie ich gezeigt habe. Bei der Erstellung einer Instanz der Klasse wird automatisch der Klassenkonstruktor aufgerufen, der alle in der Initialisierungsliste angegebenen Mitglieder der Klasse initialisiert. Fügen Sie die Print-Funktion in die CCandle-Methode ein und sehen Sie, wie der Konstruktor aufgerufen wird, ohne dass ein Verweis darauf besteht.
Womit sollen sie initialisiert werden? Mit welchen Werten? Das verstehe ich nicht.
Angenommen, ich habe Anfangswerte in den Eingabeparametern des Expert Advisors. Ich muss sie also an jedes Objekt der Klasse weitergeben. Aber nicht, um sie an jedes neu erstellte Objekt zu übergeben.
Wie kommt es, dass in diesem Zyklus meine Limit-Order nur dann gelöscht wird, wenn nach der Platzierung einer Limit-Order auf dem nächsten Balken keine weitere Limit-Order platziert wurde, d. h. eine Limit-Order wird nur dann gelöscht, wenn sie platziert wird und dann zwei Balken ohne Limit-Order folgen?
Womit werden sie initialisiert? Mit welchen Werten? Nicht klar
Die, die Sie in die Initialisierungsliste schreiben.
Angenommen, ich habe Werte in den Eingabeparametern des Expert Advisors initialisiert. Ich muss sie also an jedes Objekt dieser Klasse übergeben. Aber nicht, um sie an jedes neu erstellte Objekt zu übergeben.
Hier ist sie:
Wenn wir es ausführen, erhalten wir: