Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 225
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
Was bedeutet das? Können Sie das näher erläutern?
Ich hatte Zeit zu prüfen: ja, der Trick ist fehlgeschlagen, ChartID()=12345 für visuelle und nicht-visuelle...(so eine konstante ChartID des Testers).
Aber ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS) gibt eine ehrliche -1, wenn es keinen Bildschirm gibt. Sie können es verwenden, um die Physik zu bestimmen - ob es einen Platz gibt, um etwas auszugeben oder nicht. Denn es gibt eine Menge Flags, und wir wissen nicht, was auf dem VPS überhaupt vorhanden ist
Eine weitere plötzliche MQL-Nuance - virtuelle Methoden werden nicht von Konstruktoren aufgerufen.
im Code
kann man das nicht so machen :-)) OnAttach der Elternklasse wird vom Konstruktor aufgerufen; und während des normalen Zugriffs - von der Kindklasse.
mankann es nicht verstehen, man muss es sich merken:-)
Eine weitere plötzliche Nuance von MQL - virtuelle Methoden werden nicht von Konstruktoren aufgerufen.
im Code
kann man das nicht so machen :-)) OnAttach der Elternklasse wird vom Konstruktor aufgerufen ; Und beim normalen Zugriff - der Kindklasse.
mankann es nicht verstehen, man muss es sich merken:-)
Warum ist es nicht zu verstehen? Die Initialisierung eines Zeigers auf eine Methode in der Tabelle der virtuellen Methoden findet im Konstruktor statt. Zuerst wird der Konstruktor der Elternklasse aufgerufen, dann der Konstruktor des Nachfolgers. Wenn also der Körper des Konstruktors der Elternklasse ausgeführt wird, zeigt der Zeiger in der Tabelle der virtuellen Methoden auf die Adresse der Methode der Basisklasse.
PS. Dies ist für den ewigen Cholivar, ob man C++ lernen sollte. Wenn man es studiert, zum Kern der Dinge vordringt und nicht paukt, werden solche Dinge selbstverständlich).
Warum ist das unmöglich zu verstehen? Die Initialisierung eines Zeigers auf eine Methode in der Tabelle der virtuellen Methoden findet im Konstruktor statt. Zuerst wird der Konstruktor der Elternklasse aufgerufen, dann der Konstruktor des Nachfolgers. Dementsprechend zeigt der Zeiger auf die Adresse der Basisklassenmethode in der Tabelle der virtuellen Methoden, wenn der Körper des Konstruktors der Elternklasse ausgeführt wird.
PS. Dies ist für den ewigen Cholivar, ob man C++ lernen sollte. Wenn man es studiert, zum Kern der Dinge vordringt und nicht paukt, werden solche Dinge selbstverständlich).
Nach den Skripten, wo alles möglich ist, ist es ein bisschen überraschend, dass "ein Konstruktor nicht virtuell sein kann" :-))
nach Skripten, in denen alles möglich ist, ist es ein wenig überraschend, dass "ein Konstruktor nicht virtuell sein kann" :-)
Für Ihr "Problem" gibt es eine solche Lösung: https: //habr.com/ru/post/64369/.
PS. Natürlich nicht genau dasselbe, aber als allgemeine Denkrichtung
nach Skripten, in denen alles möglich ist, ist es ein wenig überraschend, dass "ein Konstruktor nicht virtuell sein kann" :-)
unerwartet?
Stellen Sie sich vor, HiLow::OnAttach würde aufgerufen. Wenn es neue Felder in HiLow gäbe und OnAttach sie lesen würde, gäbe es "Verwendung von nicht initialisierten Variablen" (weil der HiLow-Konstruktor noch nicht mit der Ausführung begonnen hat).
POSITION_TIME_UPDATE ist nur bei der Änderung des Lots einer Position relevant. Zum Beispiel bei der teilweisen Schließung einer Position auf einem beliebigen Konto oder bei einer Auffüllung durch Netting.
Änderungen der SL/TP-Levels haben keinen Einfluss auf POSITION_TIME_UPDATE.
Mit anderen Worten: POSITION_TIME_UPDATE wird nur von Änderungen beeinflusst, die sich in der Trading History - Trades widerspiegeln. SL/TP-Levels gehören nicht zu solchen Änderungen, also haben sie keinen Einfluss darauf.
Ja, in der Tat, es ist so auf einem realen Konto.
Aber nachdem ich den Expert Advisor erstellt habe, probiere ich ihn im Testprogramm aus, und es stellt sich heraus, dass im Testprogramm die Änderungen der SL/TP-Levels POSITION_TIME_UPDATE beeinflussen.
Hier ist ein Auszug aus den Protokollen.
Hier habe ich den Zeitpunkt der Positionseröffnung gelb hervorgehoben, und dann (beim nächsten Tick) in rot den Zeitpunkt der Änderung (Platzierung) von SL und TP dazu. Dann überprüfe ich die Zeitpunkte POSITION_TIME und POSITION_TIME_UPDATE mit dem Druck -sie sind unterschiedlich.
Wenn die Änderung von SL und TP innerhalb derselben Sekunde erfolgt, sind die Zeiten von POSITION_TIME und POSITION_TIME_UPDATE natürlich gleich.
Vielen Dank für die Informationen!
Das Feld ORDER_TIME_SETUP_MSC ändert sich, wenn Aufträge teilweise ausgeführt werden.
Infolgedessen kann DEAL_TIME_MSC kleiner sein als ORDER_TIME_SETUP_MSC des jeweiligen Auftrags.
Beispiel.