Diskussion zum Artikel "Erstellen benutzerdefinierter Optimierungskriterien für Expert Advisors"

 

Neuer Artikel Erstellen benutzerdefinierter Optimierungskriterien für Expert Advisors :

Das MetaTrader 5 Client Terminal bietet eine Vielzahl von Optimierungsmöglichkeiten für die Parameter von Expert Advisors. Zusätzlich zu den im Strategietester enthaltenen Optimierungskriterien erhalten Entwickler die Möglichkeit, ihre eigenen Kriterien zu erstellen. Dies führt zu einer fast unbegrenzten Menge an Möglichkeiten zum Testen und Optimieren von Expert Advisors. Dieser Beitrag beschreibt praktische Möglichkeiten zum Erstellen solcher Kriterien, sowohl komplexer als auch einfacher.

Um das Optimierungskriterium auf Basis der Bilanzkurve umzusetzen, brauchen wir die Klasse TBalanceSlope aus dem oben erwähnten Beitrag. Wir werden diese Klasse anpassen, indem wir (aus Bequemlichkeitsgründen) Konstruktoren mit Parametern nutzen und die Berechnung der Standardabweichung zur Berechnung der linearen Regression hinzufügen. Dieser Code befindet sich in der an diesen Beitrag angehängten Datei BalanceSlope.mqh.

Die Abfolge der Schritte zum Hinzufügen dieses Optimierungskriteriums zum Expert Advisor ist die gleiche wie die oben beschriebene. Nun sehen die Optimierungskriterien so aus:

criterion_Ptr.Add(new TBalanceSlopeCriterion(Symbol( ), 10000.0));

Zusätzlich zum Kriterium der Bilanzkurve können wir weitere von uns entwickelte Kriterien hinzufügen. Ich lasse den Lesern die Möglichkeit, mit verschiedenen Sätzen statistischer Testparameter zu experimentieren.

Führen wir nun die Optimierung nach den festgelegten Kriterien durch. Um mehr Abschlüsse zu erhalten, führen Sie die Optimierung mithilfe des H4-Timeframes, des Zeitraums 2010.01.01 - 2011.01.01 und des Symbols EURUSD aus. Wir erhalten einen Satz von Ergebnissen:

Ergebnis der Optimierung nach Bilanzkurve

Abb. 10. Ergebnis der Optimierung nach Bilanzkurve

Nun müssen wir die Qualität der Optimierung bewerten. Ich bin der Meinung, dass das Hauptkriterium die Arbeit des Expert Advisors außerhalb des Optimierungszeitraums ist. Um dies zu prüfen, führen Sie einen einzelnen Test innerhalb des Zeitraums 2010.01.01 - 2011.06.14 durch.

Vergleichen Sie zwei Ergebnisse (mit fast identischem resultierendem Gewinn) aus dem Satz der optimalen Parameter – das beste Ergebnis mit einem Ergebnis aus dem Mittelfeld. Die Ergebnisse außerhalb des Optimierungszeitraums sind durch die rote Linie abgetrennt:

Bestes Optimierungsergebnis

Abb. 11. Bestes Optimierungsergebnis

Autor: Dmitriy Skub

 
Sie wissen, die Multi-Paare EA hat unterschiedliche Testergebnis in verschiedenen Symbol. Ich teste EA in EURUSD, es nicht öffnen, lange Trades für AUDUSD, dann testen Sie es in AUDUSD, es nicht öffnen, kurze Trades für EURUSD!!! Wie kann ich das Problem lösen? Danke
 

Danke für den tollen Artikel, Dmitriy,

Gibt es irgendeinen Weg oder Raum, um Pardos Perfect Profit-Kriterien http://www.breakoutfutures.com/Newsletters/Newsletter0605.htm zusätzlich zu Ihren Kriterien zu berücksichtigen?

 

Sehr nützlicher Artikel, alles ist einfach zu benutzen.....

Es werden jedoch nur die Kriterien für den Aufruf der Funktion OnTester() beschrieben, d.h. wenn die Optimierung mit diesem Parameter beendet ist.

Ist es möglich, die Optimierung vorzeitig abzubrechen, z.B. wenn der Drawdown mehr als 50% beträgt oder der Saldo kleiner als n-Wert ist, um keine CPU-Zeit zu verschwenden!

 
sigma7i:

Sehr nützlicher Artikel, alles ist einfach zu benutzen.....

Es werden jedoch nur die Kriterien für den Aufruf der Funktion OnTester() beschrieben, d.h. wenn die Optimierung mit diesem Parameter beendet ist.

Ist es möglich, die Optimierung vorzeitig abzubrechen, z.B. wenn der Drawdown mehr als 50% beträgt oder der Saldo kleiner als der n-Wert ist, um keine CPU-Zeit zu verschwenden!

ExpertRemove
 
MetaDriver:
ExpertRemove
Genau richtig!!! Dankeschön!
 

Könnten Sie mir bitte sagen, ob es eine Möglichkeit gibt, unnötige Ergebnisse nach dem Ende der Optimierung (OnTester-Aufruf) herauszufiltern, zum Beispiel mit einem Minus-Ergebnis, um die Registerkarte"Optimierungsergebnisse" nicht zu überladen? ?

 

Die Sortierung kann durch Klicken auf...

auf eine beliebige Spalte.

PS. Nicht immer wissentlich schiefe Ergebnisse, im Prozess der genetischen Optimierung können Sie ExpertRemove() "abreißen".

Auch in OnTester() zurücksetzen.

Ich persönlich, manchmal Genetik ging den falschen Weg.

 
Karlson:

Die Sortierung erfolgt durch Anklicken der...

auf eine beliebige Spalte.

Sie können sie auch in OnTester() auf Null setzen.

Bei mir persönlich ging die Genetik manchmal in die falsche Richtung.

Es ist also eine Sortierung, ich möchte, dass unerwünschte Ergebnisse überhaupt nicht angezeigt werden ...

mit der Sortierung ist es einfach, zum Beispiel:

double  OnTester()
double  balance = TesterStatistics(STAT_PROFIT);
double  trades_number = TesterStatistics(STAT_TRADES);

if(balance < 5000 || trades_number < 20) return(-777);

....бла бла return(свой критерий оптимизации);

und dann sortieren wir es...

aber das ist ein bisschen "ungeschickt", ich möchte, dass die unerwünschten Ergebnisse gar nicht angezeigt werden.

 

Karlson:

PS: Es ist nicht immer möglich, ExpertRemove() im Verlauf der genetischen Optimierung "abzubauen".

Hier haben Sie Recht, dass ich es nicht schaffe, die Ergebnisse während der Optimierung (nicht nur genetisch) mit ExpertRemove().... zu "abreißen".

vielleicht weiß ich nicht, wie ich es vorbereiten soll:) ...ich habe es in den OnTick() Handler mit einer Bedingung eingefügt...

 

Wollen Sie damit sagen, dass ein Code wie :

if (balance < 3000) ExpertRemove();

nicht funktioniert?

Aber das ist nicht das, was ich gesagt habe. Dass eine solche Aufschlüsselung (die zumindest in der Vergangenheit funktionierte) am Ende zur genetischen Flucht führte.