Backtesting/Optimierung - Seite 82

 

Guter Beitrag über Backtesting, Geld-/Briefkurs:

https://www.mql5.com/en/forum/181204

 

Strategytester: LotSize Limit MT4

Hallo!

Wie kann ich die maximalen Lot Size Einstellungen im MT$ Strategietester ändern? Momentan öffnet der Strategietester keine Potisions >50 Lots.

und gibt es ein Balance Limit im Strategietester?

Wäre dankbar für etwas Hilfe. Danke!!

 
lsteixeira:
Einige anständige Daten, die ich verwendet habe, stammen von hier:

Http://www.histdata.com

Prost!!!

Danke für den Ratschlag...ich verwende die Tickdaten von Ducas mit 99% Modellierqualität atm. Ich kann nicht genau sagen, wie nah das an der Realität ist, aber ich hoffe, es ist nah genug ^^

 

[langtitle=fr]Probl�me sur un backtest[/langtitle]

[lang=fr]Bonjour tout le monde,

Je me tourne vers vous car j'ai un probleme lors du backtest de mon EA.

Comme vous pourrez voir sur le graphique, il y a une chute brutale et je ne sais pas d ou ca vient j ai un stop loss regler sur 10 pips

Dateien:
graphique.jpg  117 kb
rapport.jpg  97 kb
 

Normales Ende des Testerstopps

targetik:
[lang=fr]Guten Tag an alle,

Je me tourne vers vous car j'ai un probleme lors du backtest de mon EA.

Comme vous pourrez voir sur le graphique, il y a une chute brutale et je ne sais pas d ou ca vient j ai un stop loss regler sur 10 pips

Hallo Targetik,

Das ist ein normaler "End Of Strategy Tester" Stop-Out...

Der Tester schließt alle offenen Trades, wenn der Tester endet... und alle Ihre aktiven offenen Trades schließen normalerweise mit einem Verlust.

Ich ignoriere einfach den letzten Handel... oder ich setze die Daten so, dass sie über diesen Handel hinausgehen, damit er ordnungsgemäß geschlossen werden kann... oder ich setze das Datum des letzten geschlossenen Handels so, dass ich am Ende des Tests keine offenen Handelsgeschäfte mehr habe.

Ich hoffe, das hilft,

Robert

 

[lang=fr]Merci beaucoup [/lang]

 

Tolles Thema!

--

 

Abrufen des höchsten Werts von Optimierungen?

Ist es möglich, in MT4 Informationen über den höchsten Wert abzurufen, der bei jedem Durchlauf eines bestimmten Satzes von Optimierungsergebnissen erreicht wurde?

Soweit ich das beurteilen kann, liefert MT4 im Ergebnisfenster keine Informationen über den höchsten Wert, den eine Strategie beim Backtesting erreicht hat - weder in den Optimierungsergebnissen noch im Bericht eines einzelnen manuellen Durchlaufs. (Am nächsten kommt der Drawdown $, für den man meines Erachtens den Wert des jeweiligen Tiefpunkts kennen muss, um zu bestimmen, was der vorherige Höchststand war - und das kann man anhand des Endsaldos nur vermuten). Vermutlich hat der Strategietester diesen höchsten Wert irgendwann während seiner Berechnungen genau gekannt. Gibt es eine Möglichkeit, diese Daten für die Optimierungsergebnisse abzurufen?

Ich kann mir eine teilweise Umgehung vorstellen. Der höchste Wert, der während eines einzelnen manuellen Backtests erreicht wurde, könnte durch das Hinzufügen einer Variablen in den EA ermittelt werden, die als Aufzeichnung der erreichten "höchsten Wassermarke" in Bezug auf den Wert fungiert, und diese dann am Ende des Durchlaufs (oder wann auch immer) in das Journal gedruckt werden. Das Problem ist, dass die Journalinformationen nicht verfügbar zu sein scheinen, wenn die gleiche Strategie als Teil einer Optimierung ausgeführt wird... Dies wäre für eine kleine Anzahl von manuellen Durchläufen in Ordnung, aber nicht für eine größere Anzahl von Optimierungen geeignet.

Die einzige andere Lösung, die mir einfällt, ist die Verwendung eines Indikators, der als EA fungiert, und das Laden in das normale Terminal-Chart. Durch die Eingabe einer "Startzeit" als externe Variable könnte er eine Übersicht über Gewinn und Verlust führen (solange die Positionen nicht innerhalb von Candlesticks eröffnet werden). Das Problem dabei ist jedoch dasselbe. Sie müssten immer noch die verschiedenen externen Variablen für jeden einzelnen Durchlauf der Optimierungsmöglichkeiten manuell eingeben - und das könnten viele sein!

Alternativ könnten Sie eine künstliche Obergrenze für das Eigenkapital in einem EA festlegen und dann alle Positionen schließen und den Handel im EA beenden, sobald ein vorgegebenes Eigenkapital erreicht ist. Dann könnten Sie in den Ergebnissen der Optimierungen eine Liste mit der Anzahl der Durchläufe sehen, die bei diesem Wert endeten. Daraus lässt sich jedoch nicht ablesen, ob ein bestimmter Durchlauf einen höheren Equity-Wert erreicht hätte, es sei denn, Sie führen eine große Anzahl von Durchläufen mit unterschiedlichen Equity-Caps durch. Dies scheint jedoch eine sehr ungeschickte und ineffiziente Lösung zu sein.

(Ein einfaches Diagramm des Saldos im Vergleich zur Handelszahl wäre schon ein Anfang - aber auch das scheint bei den Optimierungen nicht verfügbar zu sein).

Kennt jemand eine bessere Methode, die für Optimierungen effizienter wäre?

 

Ich glaube, ich habe gerade die Antwort auf meine eigene Frage gefunden, also werde ich hier posten, falls noch jemand die Antwort wissen möchte.

Eine Lösung ist die Verwendung von globalen Variablen(Globale Variablen - MQL4 Dokumentation). Wie sich herausstellt, SIND globale Variablen bei jedem Durchlauf einer Optimierung gesetzt oder aktualisiert. Ich beziehe mich hier auf die clientterminalweiten globalen Variablen, nicht nur auf die "globalen Variablen" innerhalb eines EA. Da die Variable global ist, können Sie sie außerhalb des Strategy Testers abfragen. Sie könnten einfach eine normale (doppelte) Variable innerhalb des EA hinzufügen, die sich selbst bei jedem Tick auf den höchsten jemals erreichten Wert aktualisiert, und dann eine globale Variable in der deinit()-Sektion desselben EA auf diesen Wert setzen. Diese globale Variable könnte dann mit GlobalVariableGet() in einem Skript auf einem normalen Chart-Fenster im Terminal abgefragt werden, sobald jeder Durchgang der Optimierung abgeschlossen ist, und der resultierende Wert könnte als Kommentar angezeigt oder mit Print im Terminal-Journal aufgezeichnet werden.

Das einzige Problem bei diesem Ansatz ist, dass Sie das Skript nach jedem Durchlauf der Optimierung manuell ausführen müssten (bevor der nächste Durchlauf abgeschlossen ist) - Sie müssten also immer noch dasitzen und die Optimierungen beobachten. Ich glaube nicht, dass ein EA zur Abfrage der globalen Variablen verwendet werden könnte, da der EA mehrfach laufen müsste, um mehrere Durchläufe der Optimierung zu erfassen. Höchstwahrscheinlich würden Sie während einer Optimierung keine Ticks erhalten, da Sie von den Live-Daten getrennt wären, um Ihre Spread-Einstellungen zu erhalten. Ich vermute, dass die verschiedenen Methoden zum Senden von "gefälschten Ticks" an den EA nicht von einem Optimierungsdurchlauf zum normalen Terminal-Chart funktionieren würden...

Dies ist weniger ein Problem, wenn Sie ein Konto mit einer stabilen Spread-Größe verwenden. In diesem Fall könnten Sie Optimierungen durchführen, während Sie mit eingehenden Live-Daten verbunden sind, ohne ein zu großes Risiko, die Spread-Daten zu verändern. Es wäre jedoch immer noch ein Problem, wenn Sie über das Wochenende optimieren wollten. Wenn Ihr nächster Optimierungsdurchlauf abgeschlossen ist, bevor ein neuer Tick empfangen wurde, würden die Daten des letzten Durchlaufs außerdem nicht aufgezeichnet werden.

Sie könnten dies umgehen, indem Sie für jeden Optimierungsdurchgang eine separate globale Variable setzen und diese dann am Ende durch Drücken von F3 auslesen. Das könnte mit einer Zyklusoperation in der deinit() geschehen, um die aktuelle Anzahl der globalen Variablen ("n") abzurufen und dann die aktuelle globale Variable "n+1" zu nennen und sie auf den entsprechenden Equity-Wert zu setzen. Auf diese Weise könnte man sie alle am Ende durch Drücken von F3 anzeigen, und der Name der Variablen wäre derselbe wie die Nummer des Durchlaufs (solange zu Beginn der Optimierung keine globalen Variablen vorhanden waren - was leicht erreicht werden kann, indem man vor jeder Optimierung ein Skript mit GlobalVariablesDeleteAll() ausführt). Ich bin mir nicht sicher, wie hoch die maximale Anzahl globaler Variablen ist - aber solange man eine vernünftige Anzahl von Optimierungen durchführt, sollte es in Ordnung sein, denke ich. Leider glaube ich nicht, dass die Daten, die Sie durch Drücken von F3 erhalten, exportiert werden können, so dass Sie sie mit einer Bildschirmkopie oder dem guten alten Stift und Papier abschreiben müssen (oder Sie haben einfach eine separate MT4-Installation für jede Optimierung, wenn Sie eine enorme Anzahl von Durchgängen verwenden). Alternativ könnten Sie auch ein Skript schreiben, das nach Abschluss der Optimierung alle Namen und Werte der globalen Variablen in das Terminaljournal druckt, und dieses Journal dann exportieren.

Mit dieser Methode könnte man dann natürlich so gut wie alle Daten aus den Optimierungen abrufen, anstatt sich auf die begrenzten Informationen des Fensters mit den Optimierungsergebnissen des Strategy Testers verlassen zu müssen! Ich hoffe, das hilft jemandem :-)

 

p.s. - Mir ist gerade klar geworden, dass sowohl Print als auch Alert nur 64 Zeichen zulassen, so dass man kein Skript zum Drucken der globalen Variablen schreiben könnte, wenn man mehr als eine Handvoll Optimierungen verwenden würde. (Es sei denn, man druckt jede globale Variable in einer separaten Zeile des Terminaljournals aus und kopiert sie dann per Mausklick nacheinander in Excel o.ä.) Es scheint keine Möglichkeit zu geben, mehr als einen Eintrag im Journal auf einmal auszuwählen).

Um dies zu umgehen, könnten Sie stattdessen eine Zyklusoperation verwenden, um die Werte der einzelnen globalen Variablen nacheinander in eine große Zeichenkette zu schreiben (mit \n, um jeden Wert der globalen Variablen in eine neue Zeile zu setzen), und diese Zeichenkette dann mit SendMail() per E-Mail an sich selbst senden. Es scheint keine Begrenzung für die Anzahl der Zeichen in SendMail zu geben. Sie können diese E-Mail-Daten einfach in ein Textdokument auf Ihrem Computer kopieren und die Schaltfläche Externe Daten importieren in Excel verwenden, um diese Daten in einem beliebigen Format zu importieren. Wenn Sie die Optimierungsergebnisse ebenfalls in ein Textdokument kopieren und dann mit der gleichen Methode in Excel importieren (wählen Sie im ersten Bildschirm "Getrennt", aktivieren Sie dann das Kästchen für "Andere" und geben Sie "=" in dieses Eingabefeld ein, um den Text von den Zahlen zu trennen), können Sie dann einfach die Daten aus Ihrer E-Mail mit den direkt aus der Optimierung exportierten Daten in eine Reihe stellen. Auf diese Weise haben Sie alle Informationen, die Sie mit Hilfe von globalen Variablen aus der Optimierung extrahiert haben, in derselben Zeile wie die entsprechenden Daten, die aus der Optimierung für einen bestimmten Durchgang exportiert wurden. Ganz einfach.