Nicht für MT-Entwickler! Wodurch soll INIT_PARAMETERS_INCORRECT ersetzt werden? - Seite 4

 
fxsaber:

Ich habe einen Test Expert Advisor für den Optimizer's Matte Mode erstellt

So sieht ein Optimierungsdiagramm für 8 parallele Agenten im Brute-Force-Modus ohne Verschachtelung von Durchgängen aus (Rand = false)

Hier ist deutlich zu erkennen, dass die Agenten Aufgaben in Stapeln ausführen.


Um die Abhängigkeit von den Parametern zu sehen, schalten wir den Anzeigemodus um

Hier ist sie - eine einheimische Parabel, deren Spitze (Einheit) wir über GA suchen werden.


Im Shuffle-Modus (Rand = true) wird unser Vertex natürlich mit roher Gewalt gefunden


 
fxsaber:

Hier ist die einheimische Parabel, deren Spitze (eins) durch GA gesucht wird.

Ohne GA-Mischung habe ich das Extremum nicht gefunden, bin ihm aber nahe gekommen

Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 1
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 2
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 3
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 4
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 5
Tester  Best result 0.999424 produced at generation 5. Next generation 6
Tester  Best result 0.99987456 produced at generation 6. Next generation 7
Tester  Best result 0.99987456 produced at generation 6. Next generation 8
Tester  Best result 0.99987456 produced at generation 6. Next generation 9
Tester  Best result 0.99987456 produced at generation 6. Next generation 10
Tester  Best result 0.99987456 produced at generation 6. Next generation 11
Tester  Best result 0.99987456 produced at generation 6. Next generation 12
Tester  Best result 0.99987456 produced at generation 6. Next generation 13
Tester  Best result 0.99987456 produced at generation 6. Next generation 14
Tester  Best result 0.99987456 produced at generation 6. Next generation 15
Tester  Best result 0.99987456 produced at generation 6. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 973 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 00 seconds
Statistics      local 179 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Es waren 179 Durchgänge nötig. Ich möchte daran erinnern, dass der gesamte Aufgabenkomplex 10001 Durchgänge umfasst. Ja, das Problem ist sehr einfach, aber dennoch.


Versuchen wir nun die Variante mit Mischen (Rand = true).

Tester  Best result 0.99949824 produced at generation 0. Next generation 1
Tester  Best result 0.99949824 produced at generation 0. Next generation 2
Tester  Best result 0.99949824 produced at generation 0. Next generation 3
Tester  Best result 0.99949824 produced at generation 0. Next generation 4
Tester  Best result 0.99992256 produced at generation 4. Next generation 5
Tester  Best result 0.99992256 produced at generation 4. Next generation 6
Tester  Best result 0.99992256 produced at generation 4. Next generation 7
Tester  Best result 0.99992256 produced at generation 4. Next generation 8
Tester  Best result 0.99992256 produced at generation 4. Next generation 9
Tester  Best result 0.99992256 produced at generation 4. Next generation 10
Tester  Best result 0.99992256 produced at generation 4. Next generation 11
Tester  Best result 0.99992256 produced at generation 4. Next generation 12
Tester  Best result 0.99992256 produced at generation 4. Next generation 13
Tester  Best result 0.99992256 produced at generation 4. Next generation 14
Tester  Best result 0.99992256 produced at generation 4. Next generation 15
Tester  Best result 0.99992256 produced at generation 4. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 970 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 01 seconds
Statistics      local 182 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Wieder schließen. Aus dem Log geht klar hervor, dass 182 Durchläufe vollständig berechnet und 970 aus dem Cache genommen wurden.


Ein gutes Ergebnis, daher sollten wir versuchen, die Anzahl der Punkte im Intervall zu erhöhen.

 
fxsaber:

Das ist ein gutes Ergebnis, also versuchen wir, die Anzahl der Punkte im Intervall zu erhöhen.

Die Anzahl der Punkte in diesem Intervall beträgt eine Million.


Rand = false

Tester  Best result 0.9999999424 produced at generation 3. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7533 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1171 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Rand = true (von einer Million Punkten wurden zufällig ausgewählte Paare 100 Millionen Mal vertauscht)

Tester  Best result 0.999998294364 produced at generation 10. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7452 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1252 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Das Ergebnis zeigt, dass meine selbstbewusste Aussage

Forum über den Handel, automatisierte Handelssysteme und das Testen von Handelsstrategien

Nicht für MT-Entwickler! Wodurch ist INIT_PARAMETERS_INCORRECT zu ersetzen?

fxsaber, 2018.07.10 16:27

Offensichtlich, wenn Sie eine vollständige Aufzählung von y = x^2 verfolgen. Dann mischen Sie die Optimierungszeilen nach dem Zufallsprinzip und erstellen eine neue Menge auf der Grundlage dieser Mischung. Dann wird die GA den Scheitelpunkt der Parabel nicht finden.

Ist eher falsch als wahr.


Andererseits war die Wahl der Fitnessfunktion als Parabel anfangs extrem kurzsichtig, da die Anzahl der Punkte nahe bei eins nicht mehr zu überbieten ist.


Es bleibt nur eine Frage für die GA, warum das exakte Extremum nicht ohne Vermischung gefunden wurde, da die gewählte Funktion dafür ideal ist?

 
fxsaber:

Andererseits war die Wahl einer Fitnessfunktion in Form einer Parabel anfangs extrem kurzsichtig, da die Anzahl der Punkte nahe der Eins nicht mehr zu überbieten ist.

Ich nehme an, wenn Sie eine Funktion mit einer scharfen Spitze wählen, wird die GA nach dem Mischen immer noch brechen. Und eine solche Funktion ist viel näher an TC.

 
fxsaber:

Ich habe einen Test-EA für den Mathe-Modus des Optimierers veröffentlicht

Leider reichen meine Kenntnisse nicht aus, um das alles zu verstehen ))))

Ich habe beschlossen, es einfacher zu machen. Im Allgemeinen habe ich meinem Expert Advisor einen Datensatz in der Datei der legitimen Ketten hinzugefügt. Ich habe 1953 mögliche Varianten von 117649 gefunden. Übrigens habe ich 3 Tage gebraucht, um die vollständige Suche mit einem Intervall von 3 Tagen, nur offenen Preisen und 0 Trades durchzuführen.

Tester	optimization finished, total passes 117649 (successful 114123 passes)
Statistics      optimization done in 2 hours 36 minutes 36 seconds

Ich habe jetzt eine Datei. Ich weiß noch nicht, wie ich sie zur Optimierung einsetzen kann. Ich werde morgen darüber nachdenken...

Und warum gibt es weniger erfolgreiche? Müssen wir es wieder tun?
 
fxsaber:

Ich gehe davon aus, dass bei der Auswahl einer Funktion mit einer scharfen Spitze der GA nach dem Mischen immer noch bricht. Und eine solche Funktion ist viel näher an TC.

Die Genetik ist also nicht dazu da, Spitzenwerte zu erfassen, sondern stabile Regionen zu finden, wie es die TZ verlangt. Und Spitzenwerte sind in der Regel Rauschen.

Falsche Parameterkombinationen sollten bereits bei der Bildung der Population eliminiert werden, d. h. wenn ein Gentausch oder eine Mutation zu einem falschen Individuum führt, muss die Generation so lange wiederholt werden, bis das richtige Individuum entstanden ist. Dann ist alles in Ordnung.

Wenn die Aussonderung durchINIT_PARAMETERS_INCORRECT erst nach der Bildung der Population erfolgt und dadurch die Größe dieser Population reduziert wird, dann verstößt das natürlich gegen den normalen Mechanismus der genetischen Selektion. Offenbar hat MQ diese Variante. Und in diesem Fall ist die Aufgabe des Themenstarters kaum lösbar (im allgemeinen Fall), da hilft auch kein Tamburintanz.

 
Сергей Таболин:

Danke für Ihre Meinung, aber es gibt hier keine Diskussion über die Architektur des Programms. Falls Sie es noch nicht bemerkt haben...

Falsch, falsch.

Ich stimme zu, dass Ihr Problem genau in der falschen Architektur des Programms liegt. Ich denke, man kann das Maximum nur mit brachialer Gewalt erreichen, und das wird höchst instabil sein.

 
Nun, ich lege noch 5 Kopeken drauf.
Höchstwahrscheinlich werden bei jedem Tick volle Überschwinger verwendet. Dies führt an sich schon zu einer Verlangsamung des Betriebs. Wenn dies der Fall ist, sollten wir in Erwägung ziehen, die vollständige Suche nur beim Start/bei der Eröffnung des Expert Advisors zu verwenden und dann nach den neuesten Daten zu suchen. Eine solche Optimierung reduziert immer den Ressourcenverbrauch.
 
Alexey Navoykov:

Die Genetik ist nicht dazu da, Spitzenwerte zu erfassen, sondern stabile Regionen zu finden, wie es die TZ verlangt. Und Spitzenwerte sind in der Regel Rauschen.

Außerdem sind selbst stabile Bereiche des Optimierungsraums immer noch Bereiche mit Einbrüchen und Spitzen, der FF ist alles andere als glatt.

Genetics ist ein vielseitiges Werkzeug, es könnte optimiert werden, um eine beschädigte FF zu optimieren, aber in diesem Fall wird es länger dauern, eine glatte FF zu optimieren.

Imho sollte die Standardgenetik Sätze mit der Hälfte von INIT_PARAMETERS_INCORRECT verdauen, ohne überhaupt darüber nachzudenken. Zumal diese Gebiete in der Regel sehr dicht beieinander liegen.

aber im Allgemeinen besteht die beste Lösung darin, den Raum der Eingabeparameter zu transformieren.

 
Georgiy Merts:

Vergeblich, vergeblich.

Ich stimme zu, dass Ihr Problem in der falschen Architektur des Programms liegt. Ich denke, man kann das Maximum nur mit brachialer Gewalt erreichen, und das wird sehr instabil sein.

Es geht nicht um Architektur. Es geht um die Menge der Funktionen und die Reihenfolge, in der sie angewendet werden. Ursprünglich hatten diese Funktionen eine einzige konstante Folge. Dann beschloss ich, dass ich vielleicht mit der Reihenfolge experimentieren sollte, in der ich sie anrufe und einige von ihnen nicht anrufe. Ich habe es durch INIT_PARAMETERS_INCORRECT implementiert. Sie können den Fortschritt sehen. Aber ich habe ein Problem mit der genetischen Optimierung.

Nun zur Sache. Ich habe eine Datei mit legitimen Ketten erstellt. Wie kann man sie jetzt nutzen? Ich vermute, dass ich onTester, Frames verwenden sollte... Ich habe mir die Dokumentation angeschaut, aber irgendetwas passt nicht zusammen. Ich weiß nicht, wie ich damit umgehen soll.

Ich denke daran, es in ein Array zu lesen und Daten daraus zu entnehmen...

Grund der Beschwerde: