[Bug + Fix] Exit am Freitag nicht korrekt berechnet
18 Antworten
geektrader
vor 8 Jahren #114118
Ich habe also heute Abend auf meinen VPS geschaut und festgestellt, dass keine weiteren Trades mehr laufen (alle meine Strategien verwenden nur Pending Orders). Ein Blick in das Protokoll zeigte mir, dass die neuen Stop-Orders immer alle 30 Minuten hinzugefügt/angepasst wurden, wie es eigentlich vorgesehen ist, aber danach wurden sie jedes Mal direkt gelöscht.
Nach langem Debuggen des MQL4-Codes über "Print", kam es auf die Exit on Friday-Funktionalität, die immer dachte, es sei bereits Ende Freitag und sie müsse alle Pending Orders löschen / alle aktiven Trades schließen. Die Funktion vergleicht das Folgende, um festzustellen, ob es der richtige Zeitpunkt für den Ausstieg ist:
....else if(dow == 5 && TimeCurrent() >= StrToTime(ExitTimeOnFriday)) {
closeActiveOrders();
closePendingOrders();
}
Nachdem ich also "TimeCurrent()" und StrToTime(ExitTimeOnFriday)) über den "Print"-Befehl ausgedruckt hatte, war das Ergebnis, dass "TimeCurrent()" in der Tat größer war als "ExitTimeOnFriday", obwohl meine "ExitTimeOnFriday" 23:57 Uhr ist und der MT4-Handelsserver, den ich verwende (Global Prime Forex), zu diesem Zeitpunkt am Freitag 01:34 Uhr war. Warum ist das passiert? Ganz einfach, man kann "ExitTimeOnFriday" ("23:57") nicht einfach so an die "StrToTime"-Funktion weitergeben, denn die "StrToTime"-Funktion verwendet den aktuellen Tag des LOKALEN COMPUTERS, um einen Tag zu den 23:57 hinzuzufügen, während die "TimeCurrent()"-Funktion immer den aktuellen Tag des MT4-Servers verwendet - und mein lokaler Computer hat eine völlig andere Zeit als der MT4-Handelsserver, da er sich in einer anderen Zeitzone befindet. Im Originalzustand vergleicht die Exit am Freitag Prüfung also Äpfel mit Birnen.
Für die SQ-Programmierer lautet die Lösung wie folgt:
....else if(dow == 5 && TimeCurrent() >= StrToTime(DoubleToStr(TimeYear(TimeCurrent()), 0) + "." + DoubleToStr(TimeMonth(TimeCurrent()), 0) + "." + DoubleToStr(TimeDay(TimeCurrent()), 0) + " " + ExitTimeOnFriday)) {
…..
Dies wird immer den aktuellen Tag des MT4-Servers verwenden (den gleichen Tag, den "TimeCurrent()" zurückgibt), um die Freitags-Exit-Zeit zu berechnen, anstatt den Tag des lokalen Computers. Auf diese Weise ist der Freitags-Exit immer genau und Sie können die Uhr Ihres lokalen Computers so einstellen, wie Sie wollen:)
Und ja, ich kann immer noch eingestellt werden, um weitere Fehler zu finden und zu beheben;)
Fluke
vor 8 Jahren #133103
Mark, mit diesem neuen Fix haben Sie den Quellcode von mql4 beschädigt!!! Der Backtest auf Metatrader gehen in aus dem Speicher!!! bitte reparieren Sie es schnell
Matusiak Adrian
vor 8 Jahren #133294
ÜBRIGENS,
Ist dieser Fehler bereits behoben?
Das letzte Update zerstörte den mql-Code, aber hat das nächste Update die beschädigte Datei behoben und wird es am Freitag beendet?
Mark Fric
vor 8 Jahren #133295
ja, ich habe es in einem anderen Thread geschrieben. Es ist mit dem letzten Autoupdate behoben.
Ich füge das Autoupdate auch hier hinzu, falls Sie es noch nicht bestätigt haben. Sie müssen nur das ZIP-Archiv in den EA Wizard Hauptordner entpacken.
Mark
StrategyQuant Architekt