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

 
Karlson:

Soll das heißen, der Code ist vom Typ

if (Saldo < 3000) ExpertRemove();

nicht funktioniert?

Doch, es funktioniert. Ich habe es schon verstanden. Es unterbricht die Optimierung, zeigt aber trotzdem die Ergebnisse an, deshalb dachte ich, es funktioniert nicht.


Karlson:

Aber das habe ich nicht gesagt. Dass eine solche Unterbrechung (hat zumindest früher funktioniert) dazu führt, dass die Genetik am Ende weg ist.

Karlson: Das tut es.

Aber wenn man die OnTester()-Ergebnisse auf Null zurücksetzt oder wie oben (Minuswert -777 zuweisen), dann kann sich die Genetik wirklich unvorhersehbar verhalten, weil die Selektion auf den Ergebnissen nur durch den Rückgabewert von OnTester() durchgeführt wird.

 
bleibt die Frage, wie unnötige Ergebnisse aus dem Bericht entfernt werden können.

So etwas gab es in MT4:

MT4


Sicherlich lässt sich das mit Hilfe der MQL5-Tools bewerkstelligen, da die Entwickler solche Funktionen komplett entfernt haben.

Natürlich kann alles in Excel kopiert werden, aber ich möchte die Vorteile der neuen Plattform nutzen.

Wir haben die Einschränkungen gelöst - wir können es mit ExpertRemove() machen.

Was ist mit dem Überspringen unbrauchbarer Ergebnisse im Bericht?

 
sigma7i:

Was ist mit dem Überspringen unbrauchbarer Ergebnisse im Bericht?

Das ist im Standardbericht nicht möglich und auch nicht nötig (ich bin dagegen). Erstellen Sie Ihren eigenen Bericht.

Jetzt können Sie in der Optimierungsphase einen Bericht(https://www.mql5.com/de/docs/optimization_frames) in jedem gewünschten Format erstellen.

Und bald (huhu) wird es auch möglich sein, die Genetik selbst zu verwalten.

 

Ausgezeichnet.

Bei meiner früheren Arbeit auf dem Gebiet der Neuronalen Netze und Genetischen Algorithmen zur Vorhersage von Futures habe ich erkannt, wie wichtig eine einigermaßen gerade Aktienkurve ist.

und schrieb einige Routinen, um dies zu berücksichtigen. Das ist wirklich ein Maß für die "Robustheit" eines Vorhersagesystems.

 
Und jetzt habe ich endlich damit begonnen, die Möglichkeiten zu testen und zu erforschen. Und ich stimme zu. Es eröffnet sich eine ganz neue Welt. Es ist ein sehr mächtiges Werkzeug. Nochmals vielen Dank für den Artikel
 

Erkenntnisse aus der praktischen Arbeit.

Das Modul Geradheit ist ein guter Anfang, aber unvollständig. Es ist möglich, eine sehr gute Bewertung mit null Gewinn zu erhalten. Der Gewinn muss also in die Gleichung einfließen. Es reicht nicht aus, eine Art von Maß für den Gesamtgewinn zu addieren

funktioniert nicht. Man könnte eine sehr gerade Linie mit einem guten Wert erhalten, wenn man am Anfang einige Gewinne, in der Mitte einige Drawdowns und am Ende einige bessere Gewinne hätte. Das würde eine gerade Linie ergeben, die gut passt und einen gewissen Gewinn ausweist. Aber das ist nicht das, wonach wir wirklich suchen.

Wir wollen eine Regressionslinie, die mit guter Anpassung nach oben steigt. Um also die Idee einer Regressionsgeraden mit möglichst geringer Abweichung zu verwirklichen, muss der Koeffizient für die Steigung in die Gleichung aufgenommen werden. Das ist es, was

wir sehen wollen. Eine aufwärts geneigte Regressionsgerade mit guter Anpassung. Ich werde versuchen, das einzubauen. Vorschläge und Unterstützung sind willkommen :-)

 
Der Wert des benutzerdefinierten Kriteriums wird in der Ergebnisliste zusammen mit dem "Standard"-Kriterium angezeigt. Ist es möglich, 2 Werte für die benutzerdefinierten Kriterien zu erstellen? Ich habe keinen guten Weg gefunden, um Geradheit und Neigung zu kombinieren.
 

Ich versuche es mit dem CSTS-Code.

Ich finde dieses Ergebnis ein wenig seltsam:


Ergebnis Profit #Trades Frofit factor DrawDown Expected Payoff Recovery Factor

0.58 1237 84 1.26 12.70 14.74 0.93

0.57 1598 90 1.38 8.69 17.36 1.76


Hier ein weiteres Beispiel

0.61 3175 123 1.33 21.04 25.82 1.48

0.60 4460 145 1.49 11.32 30.77 2.56

In jeder Hinsicht sind die Werte für die zweite Zeile besser, aber die Punktzahl ist niedriger.

Das Einzige, was ich daraus ableiten kann, ist, dass es bei vielen Geschäften einen Nachteil gibt. Ich würde es andersherum haben

Und als letzter Punkt. Es scheint genau eine Person zu geben, die sich für dieses Thema interessiert: mich.


Weiter zu diesem Thema. Ich habe einen Fehler in meinem Code gemacht, der dazu führte, dass schwebende Aufträge nicht gelöscht wurden. Es führte auch dazu, dass nur 5 Aufträge für den Testzeitraum über 12 Monate erteilt wurden. Mit einem guten Gewinn.

Dies steigerte das Optimierungsergebnis auf über 100. Offensichtlich war der Wert des "durchschnittlichen Gewinns" extrem hoch, was zu diesem extremen Ergebnis führte. Technisch gesehen ist das korrekt, aber im Kontext des Backtestings ist es bedeutungslos.

im Kontext des Backtestings. Wie wahrscheinlich ist es, dass lange Trends wie dieser repräsentativ sind? Also dachte ich mir, dass die Anzahl der Trades auf irgendeine Weise in die Gleichung einfließen muss.

Nach einigen Versuchen, den Code zu ändern, bin ich zu einer Methode gelangt, die Ergebnisse liefert, die ich für nützlich halte.

Änderungen:

// CSTS:
double tssf=real/teor;
if(tssf <= 0) return 0;

work = TesterStatistics( STAT_TRADES );
if( work <= 0) work = 1;
work = MathSqrt(work/4);

tssf = tssf * work;
if( tssf <= 1 ) tssf = 0;
if(TesterStatistics(STAT_PROFIT) <= 0) tssf = 0;

return(tssf);

Die ursprüngliche Methode ist wahrscheinlich gut, um ein laufendes System zu beurteilen, aber im Grunde nutzlos, um Parameter aus einem Backtest-Lauf zu ermitteln

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Order Properties - Documentation on MQL5
 

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. Das Hinzufügen des Endgewinns

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


//---------------------------------------------------------------------
// Wert des Optimierungsergebnisses abrufen:
//---------------------------------------------------------------------
double  TBalanceSlopeCriterion::GetCriterion()
  {
// Versuchen wir, die Steigung der Gleichgewichtskurve zu berechnen:
   double   current_slope=1000.0*this.balance_Ptr.CalcSlope();

// Wenn sie nach unten geneigt ist:
   if(current_slope<0.0)
     {
      return(-1.0);
     }

   double   temp=this.balance_Ptr.GetCurrentSKO();
   if(temp>0.0)
     {
      
   // return(this.scale/temp); //Dies gibt nur zurück, wie gut die Ergebnisse einer geraden Linie entsprechen, die von einer ebenen Linie bis zu einer nach oben zeigenden Linie alles sein kann
      double temp2 = this.scale/temp;   // fügte Ingvar hinzu
      
      return(temp2 * current_slope);    // fügte Ingvar hinzu
      
     }

   return(0.0);
  }
 
ingvar_e:

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. Das Hinzufügen des Endgewinns

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


ingvar_e, ich bin nicht so allein, ich mag diesen Bereich sehr und war von deiner Entwicklung überrascht, weil ich auch an diesen Gedankengang glaube.

Für genetische Algorithmen muss man zum Beispiel einen guten Fitness-Algorithmus haben, und natürlich ein benutzerdefiniertes Kriterium erstellen, das auf diese Fitness ausgerichtet ist.

Ich bin mir nicht sicher, ob die Berechnung der Steigung der Gleichgewichtskurve der bessere Weg ist, da wir mehrere andere Möglichkeiten haben, trotzdem zähle auf mich, diese Ideen zu erforschen und zu diskutieren.