Diskussion zum Artikel "Erstellen benutzerdefinierter Optimierungskriterien für Expert Advisors" - Seite 2
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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.
So etwas gab es in 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?
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.
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 :-)
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
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
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
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.