Der genetische Algorithmus und seine Anwendungsmöglichkeiten - Seite 4

 
Edgar Akhmadeev:

Ich habe schon vor langer Zeit darüber geschrieben, als ich noch Frames in EA verwendete. Ich kann mich nicht mehr genau an den Punkt erinnern, aber ich scheine nicht alle Bilder (und die besten Ergebnisse) zu bekommen. Ich werde nach alten Beiträgen suchen und versuchen, das zu klären.

Aber ich erinnere mich genau, dass es in meinem Expert Advisor eindeutig reproduzierbar war - sobald die Anzahl der Überschreitungen eine bestimmte Zahl überstieg und in wissenschaftlicher Form angezeigt wurde, war meine Genetik kaputt. Wichtig war nicht nur, dass die Variable eine große Anzahl von Schritten hatte, sondern dass auch die Anzahl der Variablen groß war.

Es macht alles Sinn.

Es gibt ein Problem mit Rahmen für "große" Genetik.

Wir werden es in Ordnung bringen.

 
Slava:

Was meinen Sie mit "es funktioniert überhaupt nicht richtig"?

Wie können wir die Störung reproduzieren?

https://www.mql5.com/ru/forum/321656/page17#comment_13569022

Ich schaue nicht mehr bei den Rahmen nach, ich habe es aufgegeben.

Aber mit normaler Genetik habe ich es beim letzten Build überprüft. Hier ist das Ergebnis ohne "Ziffernüberlauf".


Nach Unterbrechung:

2020.03.16 20:50:57.436 Tester  genetic optimization finished on pass 646 (of 160164854439975000)
2020.03.16 20:50:57.436 Statistics      optimization done in 8 minutes 36 seconds
2020.03.16 20:50:57.436 Statistics      shortest pass 0:00:00.002, longest pass 0:00:23.060, average pass 0:00:06.276

Mit "Überlauf":


Nach mehreren unterbrochenen Durchläufen durch EA (Überprüfung, ob die Eingabevariablen korrekt sind), blieb die Genetik für immer stehen. Nach Unterbrechung:

2020.03.16 20:59:08.235 Tester  genetic optimization finished on pass 18
2020.03.16 20:59:08.235 Statistics      optimization done in 6 minutes 10 seconds
2020.03.16 20:59:08.235 Statistics      shortest pass 0:00:00.003, longest pass 0:00:05.978, average pass 0:00:01.339

Kein einziges echtes Ergebnis.

Ich habe Advisors/MAPSARSizeOptimized.ex5 als Beispiel ausprobiert, es funktioniert. Es ist klar, dass das Problem mit "digit overflow" und mit Frames nur mit meinem EA reproduziert wird, aber wie findet man das Problem... Dort ist alles sehr kompliziert, OnTradeTransaction usw. Ich habe auch Rahmen entfernt. Ich kann Ihnen den Code nicht zeigen und er ist riesig, etwa ein Megabyte. Und sie auf ein reproduzierbares Beispiel zu reduzieren, würde hoffnungslos viel Zeit kosten. Wenn ich Zeit habe, werde ich versuchen, OnTradeTransaction und vielleicht einige andere Tricks zu entfernen.

Wenn wir die Anzahl der Durchgänge nicht überschreiten, funktioniert alles einwandfrei.

Und Frames funktionierten bis einschließlich Build 2286 problemlos (ohne Überschreitung).

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2019.10.16
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 
Igor Makanu:

...

ein Problem bisher - GAs können nach einer Weile beginnen, um eine kleine Gruppe von Optimierungsparametern zu konvergieren - dies scheint mir normal zu sein, alle GAs arbeiten auf diese Weise und dies ist ein Problem ihrer Verwendung

...

Konvergenz zu einem Extremwert ist ein ganz normales Phänomen für jeden Optimierungsalgorithmus, es gibt keine Annahme, dass dieser Abschnitt nicht global oder lokal ist.

Es ist eine andere Sache, dass AO einen Mechanismus haben sollte, der es erlaubt, den Prozentsatz der Mutation zu erhöhen (oder ein anderes Äquivalent in der Logik, das es erlaubt, die Ausdehnung der Suchumgebung zu erhöhen), wenn man anfängt, auf einem Segment herumzutrampeln, wird das Extremum besser gefunden oder nicht - es ist vorher unbekannt, aber es ist definitiv notwendig, an anderen Stellen zu suchen.

Zum Beispiel wird ein Kriterium des maximalen Saldos festgelegt, und mehrere oder viele Punkte können absolut gesehen diesem Kriterium entsprechen, aber nur einige von ihnen sind von echtem Wert, d.h. der Saldo 98756423 wurde bei 1523 Geschäften mit einem Drawdown von 11% erreicht und derselbe Saldo wurde bei 12 Geschäften mit einem Drawdown von 95% erreicht, was ist der Unterschied zwischen den beiden?

 
Edgar Akhmadeev:

Nach mehreren unterbrochenen Durchläufen durch den Prüfer (Überprüfung der Richtigkeit der Eingabevariablen) ist die Genetik für immer stehen geblieben. Nach der Unterbrechung:

Kein einziges echtes Ergebnis.

Ich weiß nicht mehr, ob ich im Forum darüber geschrieben habe, aber es ist wirklich ein Problem und es ist nicht klar, warum es in MT implementiert ist. Wenn der Experte den Fehlercode "falsche Parameter" zurückgibt, ist der Prüfer verpflichtet, stattdessen eine andere Instanz zu erzeugen, damit die Population vollständig ist.

 
Stanislav Korotky:

Ich weiß nicht mehr, ob ich im Forum darüber geschrieben habe, aber es ist wirklich ein Problem und es ist nicht klar, warum es in MT implementiert ist. Wenn der Experte den Fehlercode "falsche Parameter" zurückgibt, ist der Prüfer verpflichtet, stattdessen eine andere Instanz zu erzeugen, damit die Population vollständig ist.

Wenn ich INIT_PARAMETERS_INCORRECT für alle fehlerhaften Parameterkombinationen zurückgebe, gibt es zu viele davon und die Generierung endet mit einem Fehler. Ich gebe also nur dann INIT_PARAMETERS_INCORRECT zurück, wenn ein bestimmter Parameter falsch ist, d. h. wenn er außerhalb des Bereichs liegt. Und wenn die Kombination falsch ist (ein Parameter sollte den anderen nicht übersteigen), stoppe ich den Durchlauf, gebe INIT_SUCCEEDED und Custom = -N zurück. Das bringt wahrscheinlich die Genetik durcheinander, aber ich sehe keine andere Möglichkeit. Es gibt zwar eine Möglichkeit, falsche Kombinationen zu beseitigen (im konkreten Fall, indem man einen Parameter zu einem Delta eines anderen macht: v1=X, v2=Y+v1), aber das ist ein zu starkes Mutagen. Die beiden Parameter sind fest miteinander verbunden, und wenn Sie einen ändern, verschiebt sich alles. Ich habe diese Option zugunsten eines gefälschten Ergebnisses anstelle eines Fehlers aufgegeben.

 
Edgar Akhmadeev:

Wenn Sie INIT_PARAMETERS_INCORRECT für alle falschen Parameterkombinationen zurückgeben, gibt es zu viele davon und die Generierung wird mit einem Fehler beendet. Ich gebe also nur dann INIT_PARAMETERS_INCORRECT zurück, wenn ein bestimmter Parameter falsch ist, d. h. wenn er außerhalb des zulässigen Bereichs liegt. Und wenn die Kombination falsch ist (ein Parameter sollte den anderen nicht übersteigen), stoppe ich den Durchlauf, gebe INIT_SUCCEEDED und Custom = -N zurück. Das bringt wahrscheinlich die Genetik durcheinander, aber ich sehe keine andere Möglichkeit. Oder es gibt eine Möglichkeit, falsche Kombinationen loszuwerden (im speziellen Fall - einen Parameter zu einem Delta zu einem anderen zu machen: v1=X, v2=Y+v1), aber das ist ein zu starkes Mutagen. Die beiden Parameter wären fest miteinander verknüpft, und die Änderung eines Parameters würde alles in Bewegung setzen. Ich habe diese Option zugunsten eines gefälschten Ergebnisses anstelle eines Fehlers aufgegeben.

Eine gute Option ist die Rückgabe von -DBL_MAX bei ungültiger Variante anstelle eines Fehlers.

Im Allgemeinen ist es mir gelungen, externe Ga zu implementieren und dabei alle Vorzüge der MT-Tester-Mehrwährungstreue beizubehalten, während ich in der Lage bin, alle Prozessorkerne und/oder Netzwerk-Agenten, einschließlich Cloud-Agenten, zu nutzen und gleichzeitig Situationen zu vermeiden, in denen Agenten aufgrund von vorzeitigen Abschlüssen oder unterbesetzten Ga-Populationen im Leerlauf sind.

es gibt Informationen, nur tSSSSS...., dass es Pläne gibt, mehrere Arten von AOs in den regulären Optimierer zu implementieren, und sogar mit Parametern, aber dies ist ungenau.

 
Andrey Dik:

eine gute Option ist es, bei einer ungültigen Variante -DBL_MAX anstelle eines Fehlers zurückzugeben.

und wenn Sie einen Zufallswert zurückgeben - wäre es dann schlechter für AO?

 
Igor Makanu:

und wenn Sie einen gerenderten Wert zurückgeben, ist es dann schlechter für die AO?

viel schlimmer.

Wenn das Ziel ist, AO durcheinander zu bringen, ist es am besten, eine Zufallszahl zurückzugeben.

 
Andrey Dik:

eine gute Möglichkeit ist, bei einer ungültigen Variante -DBL_MAX anstelle eines Fehlers zurückzugeben.

Das ist zu viel, die Grafik ist so skaliert, dass man die nützlichen Ergebnisse nicht sehen kann. Ich gebe einen geringfügig höheren Wert als den des ungünstigsten Falls an. Das Wichtigste ist jedoch, die richtigen Weichen für Verbesserungen zu stellen.

Igor Makanu:

Und wenn Sie einen gerenderten Wert zurückgeben - ist es dann schlechter für AO?

Was soll das bringen? Die Hauptsache ist, die richtige Richtung vorzugeben, also müssen Sie GA zeigen, dass er hier das schlechteste Ergebnis gezeigt hat, nicht nur ein schwaches.

 
Slava:

Was meinen Sie mit "es funktioniert überhaupt nicht"?

Wie kann ich die Fehlerhaftigkeit des Vorgangs nachvollziehen?

OnTradeTransactionentfernt, hat nicht geholfen. Ich werde weiter nachdenken.