Antwort

[Bug + Fix] Exit am Freitag nicht korrekt berechnet

18 Antworten

geektrader

Customer, bbp_participant, community, 522 replies.

Profil besuchen

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;)


🚀 Unlock Your Edge in Automated Forex Strategy Development 🚀

Historical Forex Data Starting From 1987, 28 Pairs, M1, 99% Error-Free, Lifetime Free Updates

0

Fluke

Abonnent, bbp_participant, Gemeinschaft, 43 Antworten.

Profil besuchen

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

0

Matusiak Adrian

Kunde, bbp_participant, Gemeinschaft, 300 Antworten.

Profil besuchen

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?

btn_viewmy_160x33.png

0

Mark Fric

Administrator, sq-ultimate, 2 Antworten.

Profil besuchen

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

0

Ansicht von 3 Antworten - 16 bis 18 (von insgesamt 18)

1 2