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

 

Ich habe viel experimentiert und bin zu ähnlichen Schlussfolgerungen gekommen. Ich weiß nicht, warum ich so lange gebraucht habe, um diesen Artikel und die Diskussion zu finden.

Ich begann mit einem Problem, bei dem meine Break-Out- und Trend-Riding-Strategien dazu neigten, sich auf einige wenige superprofitable Trades zu beschränken. So viel Gewinn aus diesen wenigen, dass der Optimierer nur "kümmerte" sich um diese wenigen Trades und verwendet breite Haltestellen und weit weg Take-Profit und dafür sorgen, dass sein Signal gefangen und gemolken diese wenigen Trades auf das Maximum. dies trat auch auf 20 Jahre Proben mit 100's von Trades. Selbst bei der Optimierung mit einem Verhältnis von dd zu Gewinn, ging es immer noch nach den Läufen mit diesen Trades um jeden Preis, weil die Läufe 90% seines Gewinns waren. Ich wollte dieses Verhalten irgendwie einschränken, ohne der Breakout/Trend Ride-Strat den Kopf abzuschlagen. Ich fand heraus, dass die Optimierung für relative dd Prozent (NICHT dd Verhältnis zum Gewinn, nur dd relativen Prozentsatz und nichts anderes) gibt gute Ergebnisse nach vorne, solange minimale Trades und minimale Gewinn-Faktor (etwa 1,3) erfüllt sind.


//............... 

sinput double mint; //Mindestanzahl an Gewerben zu Optimierungszwecken. Wird eine Strafe für Läufe mit weniger Gewerben verhängen. 

sinput double minpf; //minimaler Gewinnfaktor für Optimierungszwecke. Erzwingt eine Strafe für Läufe mit weniger pf.

//...............

double OnTester()

{ 

	 double dd=TesterStatistics(STAT_BALANCE_DDREL_PERCENT);//Gleichheit statt Gleichgewicht hat sich auch in Zukunft bewährt

	 double pf=TesterStatistics(STAT_PROFIT_FACTOR);

	 int    tt=TesterStatistics(STAT_TRADES); 

	 double custom=(100-dd);

	 if (mint>t) custom=custom*(tt/mint); // verhängt eine Strafe, wenn die Mindestumsätze nicht erreicht werden

	 if (minpf>minpf) custom=custom*((pf-1)/(minpf-1)) // Diese Linie führt auch dazu, dass verlorene Läufe negativ sind und eine geringere Strafe für pf auferlegt wird.

	 return(custom); 

}

 

 

Es scheint falsch zu sein, den Gewinn nicht mit einzubeziehen, aber durch das Mindestkriterium "pf" erscheinen die meisten recht profitablen Läufe an der Spitze. Das Herausschneiden von dd aus profitablen Läufen erhöht normalerweise die Gewinne. In jedem Fall kann ich durch die Auswahl der profitableren Trades und die sorgfältige manuelle Nachbearbeitung (wie z. B. am Ende dieses ausgezeichneten Artikels https://www.mql5.com/de/articles/156) dem Optimierer einen Großteil der anfänglichen Arbeit überlassen und gleichzeitig eine umfangreiche Kurvenanpassung vermeiden. Ich habe experimentiert und hatte gemischte Ergebnisse mit Code wie dem folgenden. (Bei den Experimenten sollte man auch das Risiko und die Startbilanz ändern, sobald man anfängt, zusätzliche Gewichte zu einer prozentualen Bewertung hinzuzufügen)

//.............

sinput double pfw //Gewicht des Gewinnfaktors 

//.............

        double custom=(100-dd)+(pf-1)*pfw;
//...........
Guide to Testing and Optimizing of Expert Advisors in MQL5
Guide to Testing and Optimizing of Expert Advisors in MQL5
  • 2010.10.12
  • Samuel
  • www.mql5.com
This article explains the step by step process of identifying and resolving code errors as well as the steps in testing and optimizing of the Expert Advisor input parameters. You will learn how to use Strategy Tester of MetaTrader 5 client terminal to find the best symbol and set of input parameters for your Expert Advisor.
 

Kann mir jemand sagen, ob dieser Artikel auch für MT4 gilt? Es scheint, dass es bereits viele Eigenschaften von MT5 übernommen hat.

Im Allgemeinen ist meine Aufgabe, nur die Werte der LR-Korrelation und des LR-Standardfehlers im MT4-Tester zu erhalten, wie sie im MT5-Tester leicht zu sehen sind.

Ich möchte nur diese Werte in der Funktion deinit() am Ende des Testlaufs auslesen und sie zusammen mit dem Wert des optimierten Parameters in eine Datei schreiben.

Vielleicht hat jemand so etwas schon gemacht und kann mir das fertige Ergebnis (die notwendige Funktion zur Berechnung der LR-Korrelation und der LR-Standardfehlerwerte) mitteilen, damit ich das Rad nicht neu erfinden muss?

 
solandr:

Kann mir jemand sagen, ob dieser Artikel auch für MT4 gilt? Es scheint, dass es bereits viele Eigenschaften von MT5 übernommen hat.

Im Allgemeinen ist meine Aufgabe, nur die Werte der LR-Korrelation und des LR-Standardfehlers im MT4-Tester zu erhalten, wie sie im MT5-Tester leicht zu sehen sind.

Ich möchte nur diese Werte in der Funktion deinit() am Ende des Testlaufs auslesen und sie zusammen mit dem Wert des optimierten Parameters in eine Datei schreiben.

Vielleicht hat jemand so etwas schon gemacht und kann mir das fertige Ergebnis (die notwendige Funktion zur Berechnung der LR-Korrelation und der LR-Standardfehlerwerte) mitteilen, damit ich das Rad nicht neu erfinden muss?

Ein Beispiel für die Berechnung der LR-Korrelation und des LR-Standardfehlers für Trades in der Historie ist in AlgLib (MQL4\Scripts\Alglib\UseAlglib.mq4) verfügbar.
 
Automated-Trading:
Ein Beispiel für die Berechnung der LR-Korrelation und des LR-Standardfehlers für Trades in der Historie ist in AlgLib (MQL4\Scripts\Alglib\UseAlglib.mq4) verfügbar.
Ich danke Ihnen! Ich werde es mir ansehen.
 
solandr:
Ich danke Ihnen! Ich werde es mir ansehen.

Ich habe es verstanden. Die Korrelation scheint berechnet zu werden.

Das Einzige, worüber ich nachdenken musste, ist die Tatsache, dass dieser Punkt im MT4 Build 670-Tester nicht funktioniert:

//--- Erlangung des Anfangssaldos
      if(order_type==6) // OP_BALANCE=6
        {
         if(NormalizeDouble(OrderProfit()+OrderSwap(),2)>=0.0)
            if(balance==0.0)
               balance=OrderProfit();
        }

Es gibt einfach keine Orders mit Typ 6 im Tester.

Das heißt, wenn man im MT4-Tester läuft und den Code aus UseAlglib.mq4, der in der heruntergeladenen Zip-Datei enthalten ist, durch einen Aufruf der Funktion deinit() verwendet.

bleibt der Saldo gleich 0. Und dann wird der Fehler"Trading operations with zero balance" ausgegeben.

Ich musste nur den erforderlichen Wert des Anfangssaldos im MT4-Tester in den Code selbst einfügen und dann wurde alles perfekt gezählt.

Vielleicht können die Entwickler diesen Punkt in zukünftigen Versionen der Bibliothek berücksichtigen.

 

Ich habe Kelly Criterion (Strategie) getestet, indem ich den folgenden Code verwendet habe:


double OnTester(void)
  {
   //https://www.investopedia.com/articles/trading/04/091504.asp
   double w=((TesterStatistics(STAT_PROFIT_TRADES)+TesterStatistics(STAT_LOSS_TRADES))>0)?TesterStatistics(STAT_PROFIT_TRADES)/(TesterStatistics(STAT_PROFIT_TRADES)+TesterStatistics(STAT_LOSS_TRADES)):0; // Gewinnwahrscheinlichkeit
   double r=((TesterStatistics(STAT_GROSS_LOSS)!=0)&&(TesterStatistics(STAT_LOSS_TRADES)!=0)&&(TesterStatistics(STAT_PROFIT_TRADES)!=0))?(TesterStatistics(STAT_GROSS_PROFIT)/TesterStatistics(STAT_PROFIT_TRADES))/(-TesterStatistics(STAT_GROSS_LOSS)/TesterStatistics(STAT_LOSS_TRADES)):0; // Gewinn/Verlust-Verhältnis;
   double Kelly=(r!=0)?w-((1-w)/r):0; // Kelly-Kriterium
   return(Kelly);
  }


Ich bin mir nicht sicher, ob der Metatrader Strategy Tester 0 (Null) Profit Trades als Profit Trades berechnet. Jemand?

 
Ingvar Engelbrecht:

Nun, hier bin ich wieder, der einsame Wolf in diesem Universum :-)

Ich habe versucht, die Geradheit Custom Criteria, um die Steigung der berechneten geraden Linie in die Gleichung zu bekommen. So wie es ist, kann man eine sehr hohe Bewertung für einen sehr schwachen Gewinn erhalten. Einfach den Endgewinn hinzufügen

In einem Versuch, die tatsächliche Steigung in die Gleichung einzufügen, habe ich den Code wie unten gezeigt geändert.

Es ist keine perfekte Lösung, aber es ist näher an dem, was ich sehen möchte. Die Verwendung des Ergebnisses zusammen mit dem Saldo oder dem Gewinn funktioniert für mich mit diesem Code gut


Ich weiß, dass es schon so lange her ist, dass Sie dies gepostet haben, aber für den Fall, dass Sie immer noch damit spielen oder jemand anderes nach der gleichen Implementierung der Geradheitskriterien sucht.

Ich habe eine funktionierende öffentliche Lösung hier gefunden https://community.darwinex.com/t/equity-curve-straigthness-optimization-with-metatrader/3976

Equity Curve Straigthness Optimization with Metatrader
Equity Curve Straigthness Optimization with Metatrader
  • 2018.05.16
  • KlondikeFX
  • community.darwinex.com
An underrated feature of Metatrader’s Backtester is its ability to define a custom fitness function for the genetic optimization process. Meaning that you no longer are limited to rather simple metrics like final balance or profit factor but can evaluate the quality of each test run with your own individual calculations. To give a quick...
 

Das zugehörige Tutorial hat zu viele Informationen, wie z. B. speziell über die Programmierung eines EA, die in anderen Tutorial ist, und nicht anwendbar auf durchschnittliche punter, die, wird ihre EA kaufen und hat minimale Programmierung Fähigkeit.

Ich finde, dass standardmäßig die einzige nützliche Kriterien für MT5 in genetischen Algo ist die "Balance max", dann haben zu wiederholen, dass ein paar Mal, und Fisch durch Ergebnisse til finden niedrige Drawdown, wie für den Einsatz auf mehrere Paare.

Welche Kriterien ich brauche: - Max Balance mit <20 Drawdown, MaxBalance mit <10 Drawdown

 
Toll gelesen, einsamer Wolf hier draußen 😁.
 
Vielen Dank für den großartigen Artikel, Dmitriy.

An alle "einsamen Wölfe" da draußen: Sie sind auf dem richtigen Weg, strenge Testkriterien zu schaffen und diese zu automatisieren. Es gibt natürlich verschiedene Möglichkeiten, dieselbe Herausforderung zu betrachten, und wenn man die Kommentare hier liest, scheint der Konsens darin zu bestehen, einen Kompromiss zwischen Gleichgewicht, Drawdown, RRR und einem gewissen Maß an Gewinn (Gewinnfaktor, Kelly-Kriterium usw.) zu finden.
Ich bin auf diesen Artikel gestoßen, weil ich das Gleiche tun wollte und wollte, dass der Strategy Tester das für mich erledigt; ich bin froh, dass ich nicht allein bin :)