Diskussion zum Artikel "Kontinuierliche Walk-Forward-Optimierung (Teil 3): Eine Roboters für Autoadaptierung anpassen"
Lieber Autor! Die Arbeit, die Sie geleistet haben, ist kolossal! Auch das Niveau der Programmierung ist beeindruckend. Aber als Ergebnis kann es nicht verwendet werden! Dazu müssen Sie den gesamten Zyklus der Artikel durchlaufen, verschiedene Dateien sammeln, kompilieren, fehlende Dateien finden, darüber nachdenken, ob sie in neuen Artikeln aktualisiert worden sind...? Man kann nicht bezweifeln, dass eine solche Arbeit es wert ist, dass ihre Ergebnisse an einem Ort gesammelt werden.
In der Zwischenzeit hat, soweit ich sehen kann, noch niemand die wirkliche Bedeutung (des Händlers) dieser Arbeit an dieser Ressource gewürdigt. Aber es ist nicht verwunderlich, müssen Sie noch auf ein solches Niveau zu wachsen. Es wäre gut, wenn mt5 zu einem normalen WFO heranwachsen würde, aber das will es nicht.... Und außerdem, welcher Raum öffnet sich für die Erstellung von Add-ons! Am liebsten würde ich eine Kreuzvalidierung implementieren, die Geschichte in K Teile zerlegen, jeden von ihnen der Reihe nach verwerfen, auf den verbleibenden optimieren, dann den verworfenen überprüfen und so weiter K Mal. Jede Hypothese, die vom einfachsten "stabilen Parametersatz" ausgeht, kann mit viel größerer Zuverlässigkeit getestet werden als mit dem üblichen "sliding opt-in".
Lieber Autor! Die Arbeit, die Sie geleistet haben, ist kolossal! Auch das Niveau der Programmierung ist beeindruckend. Aber als Ergebnis kann es nicht verwendet werden! Dazu müssen Sie den gesamten Zyklus der Artikel durchlaufen, verschiedene Dateien sammeln, kompilieren, fehlende Dateien finden, darüber nachdenken, ob sie in neuen Artikeln aktualisiert worden sind...? Man kann nicht bezweifeln, dass eine solche Arbeit es wert ist, an einem Ort gesammelt zu werden.
In der Zwischenzeit hat, soweit ich sehen kann, noch niemand die wirkliche Bedeutung (des Händlers) dieser Arbeit an dieser Ressource gewürdigt. Aber es ist nicht verwunderlich, müssen Sie noch auf ein solches Niveau zu wachsen. Es wäre gut, wenn mt5 zu einem normalen WFO heranwachsen würde, aber das will es nicht.... Und außerdem, welcher Raum öffnet sich für die Erstellung von Add-ons! Am liebsten würde ich eine Kreuzvalidierung implementieren, die Geschichte in K Teile zerlegen, jeden von ihnen der Reihe nach verwerfen, auf den verbleibenden optimieren, dann den verworfenen überprüfen und so weiter K Mal. Jede Hypothese, die vom einfachsten "stabilen Parametersatz" ausgeht, kann mit viel größerer Zuverlässigkeit getestet werden als mit dem üblichen "sliding opt-in".
Ich danke Ihnen für diese schmeichelhafte Kritik. Ich habe 3 weitere Artikel geplant, in denen der Auto-Optimierer selbst beschrieben werden soll. In einem der Artikel wird es eine genaue Anleitung für die Benutzung und das Programm selbst geben. So viele Artikel aus der Tatsache, dass es nicht wahr ist, wird nur das Ergebnis der Arbeit getan, ohne zu erklären, wie es erreicht wird. Im Moment wird der Teil der Optimierungsberichte, die hochgeladen werden und wie sie gebildet werden, beschrieben, in den nächsten Artikeln (gerade jetzt arbeite ich daran) wird der Optimierer selbst beschrieben - es ist ein in C# geschriebenes Programm, das die Optimierung im Terminal ausführt. Übrigens, in diesem Programm ist der Optimierungsalgorithmus selbst im Schnittstellenteil untergebracht, so dass Sie, sobald der Zyklus der Artikel abgeschlossen ist, in der Lage sein werden, Ihre Idee zu implementieren, dazu müssen Sie die IOptimiser-Schnittstelle in C# implementieren und den Konstruktor des benutzerdefinierten Optimierers anschließen, wie das gemacht wird, wird in einem der nächsten Artikel ausführlich beschrieben.
In Bezug auf die Tatsache, dass alles in disparaten Orten ist - Ich werde versuchen, in den Artikeln, auf denen ich arbeite, um den gesamten Code zu legen, obwohl es den Faden der Erzählung zu brechen und vielleicht werde ich den Code auf github, aber kompilierte Dateien noch nicht posten, weil der Prozess der Kompilierung ist nicht so schwierig. Wenn jemand irgendwelche Fragen über die Kompilierung und die Verwendung des Projekts hat, bin ich immer bereit zu helfen.
Ich habe noch 3 weitere Artikel geplant, in denen der Auto-Optimierer selbst beschrieben werden soll.
Vor kurzem bin ich an den Punkt gekommen, an dem ich den Prozess automatisieren muss. Ich habe eine Optimierungsmethode entwickelt, die ein stabiles positives Ergebnis für die OOS-Historie liefert, aber sie erfordert lange Berechnungen und viel manuelle Einzelarbeit. Und sliding opta ist nicht die einzige Lösung für das Problem. Eine der dringlichsten Herausforderungen besteht darin, den Genetiker dazu zu bringen, die Wertebereiche, in denen er die besten Ergebnisse erzielt, zu erweitern, die Bereiche, in denen er sie einschränkt, zu verfeinern und eine neue opta durchzuführen. Das ist weit davon entfernt, für alle Parameter auf einmal einen ausreichend großen Bereich festzulegen und nur die besten auszuwählen. Bei meinen Robotern ist die Anzahl der Parameter so groß, dass ein solches Opta entweder Wochen dauern würde oder nicht in der Lage wäre, den Parameterraum detailliert genug zu untersuchen.
Deshalb überlege ich jetzt: Soll ich auf Sie warten oder selbst nach Lösungen suchen?) Auf jeden Fall sollte ich mich mit Ihrem Projekt befassen.
Im Moment stürzt mein Terminal beim Starten eines Expert Advisors, der das Panel aufruft, einfach ab und lässt den letzten Eintrag stehen:
2020.02.02 22:45:07.187 Terminal exit with code 0
Abgesehen davon beginnt jeder Start des Terminals mit dem Hinweis:
2020.02.02.02 23:35:17.747 IPC konnte den IPC nicht initialisieren, mit der Meldung:
2020.02.02.02 23:35:17.748 Terminal IPC Dispatcher nicht gestartet
Vor kurzem bin ich zu der Erkenntnis gelangt, dass ich den Prozess automatisieren muss. Ich habe eine Optimierungsmethode entwickelt, die ein stabiles positives Ergebnis für die OOS-Historie liefert, aber sie erfordert lange Berechnungen und viel monotone Handarbeit. Und sliding opta ist nicht die einzige Lösung für das Problem. Eine der dringlichsten Herausforderungen besteht darin, den Genetiker dazu zu bringen, die Wertebereiche, in denen er die besten Ergebnisse erzielt, zu erweitern, die Bereiche, in denen er sie einschränkt, zu verfeinern und eine neue Opta durchzuführen. Das ist bei weitem nicht dasselbe, wie wenn man für alle Parameter auf einmal einen ausreichend großen Bereich festlegt und nur die besten auswählt. Bei meinen Robotern ist die Anzahl der Parameter so groß, dass ein solches Opta entweder Wochen dauern oder den Parameterraum nicht detailliert genug untersuchen würde.
Jetzt überlege ich: auf Sie warten oder selbst nach Lösungen suchen?) Auf jeden Fall sollte ich anfangen, mich mit Ihrem Projekt zu beschäftigen.
Im Moment, wenn ich einen Expert Advisor starte, der das Panel aufruft, stürzt mein Terminal einfach ab und verlässt den letzten Eintrag:
2020.02.02 22:45:07.187 Terminal exit with code 0
Gleichzeitig beginnt jeder Start des Terminals mit dem Hinweis:
2020.02.02.02 23:35:17.747 IPC konnte den IPC nicht initialisieren, mit der Meldung:
2020.02.02.02 23:35:17.748 Terminal IPC Dispatcher nicht gestartet
Wenn Sie Ihr System von Hand optimieren, können Sie es auf jeden Fall in meinem Auto-Optimierer programmieren.
Was den Fehler betrifft - trat er auf, nachdem ich meine Dateien verbunden hatte, oder sind es Ihre Roboter, die das Terminal so beeinflussen? Ich habe ein solches Problem nicht beobachtet, und ich habe bereits Roboter auf mehr als einem Computer mit den Ergänzungen gestartet, die bereits in den Artikeln enthalten sind. Ich habe auch ein 64-Bit-System.
Wenn Sie über meine letzte Artikelserie (über Optimierungsmanagement) schreiben, ist es besser, sich direkt auf Ihrem Computer im Debugging-Modus damit zu befassen, da es unwahrscheinlich ist, dass ich das Problem reproduzieren kann, auf jeden Fall ist es beim letzten Start des Projekts nicht aufgetreten.
Was den Fehler betrifft - trat er auf, nachdem ich meine Dateien verbunden hatte, oder sind es Ihre Roboter, die das Terminal auf diese Weise beeinflussen?
Es kam nicht einmal zu Robotern, ich versuche nur, Ihr Panel aus den ersten beiden Artikeln aufzurufen, indem ich den OptimisationManagerExtention Expert Advisor ausführe. Danach stürzt das Terminal ab.
Es ist nicht einmal zu Robotern gekommen, ich versuche nur, Ihr Panel aus den ersten beiden Artikeln aufzurufen, indem ich den OptimisationManagerExtention Expert Advisor ausführe. Danach stürzt das Terminal ab.
Dann - wie gesagt, man muss sich einen bestimmten Rechner und ein Beispiel anschauen. Ich kann auf den ersten Blick nicht sagen, was das Problem sein könnte, ich habe mich schon lange nicht mehr mit diesem Projekt beschäftigt. Zumindest müssen Sie mehr als ein Terminal auf Ihrem Computer installiert haben, und die dll mit der grafischen Oberfläche befand sich im Verzeichnis MQL5/Libraries.
Im aktuellen Auto-Optimierer-Projekt habe ich die Grafiken aus dem Terminal entfernt, und es sollte als reguläres Programm laufen, nicht als Roboter, so dass es keine derartigen Probleme geben wird, zumindest habe ich es drei Monate lang oder länger getestet und mehr als einen Roboter laufen lassen. Und das alte Projekt, wie ich schon sagte, müssen Sie sich ein konkretes Beispiel ansehen, ich kann Ihnen nicht sagen, was der Grund dafür ist.
Es ist nicht einmal zu Robotern gekommen, ich versuche nur, Ihr Panel aus den ersten beiden Artikeln aufzurufen, indem ich den OptimisationManagerExtention Expert Advisor ausführe. Danach stürzt das Terminal ab.
Absichtlich jetzt neu kompiliert und das alte Projekt von Grund auf ausgeführt. Bei mir hat alles funktioniert. Ich kann den Fehler also nicht reproduzieren.
Vor allem möchte ich eine Kreuzvalidierung implementieren, um die Geschichte in K Teile zu zerlegen, von denen jeder nacheinander weggeworfen wird, um die verbleibenden Teile zu optimieren und dann den weggeworfenen Teil zu überprüfen, und so weiter und so fort.
Die Auswahl wird im allgemeinen Fall nicht funktionieren. Sie müssen in Ihrem TS zwei Eingangsparameter festlegen, die ein Nicht-Handelsintervall (das herausgeworfen wird) definieren. Dann ist es real.
Für den allgemeinen Fall können Sie ein benutzerdefiniertes Symbol erstellen, das aus dem ursprünglichen Symbol durch Herauswerfen des Intervalls gewonnen wird.
Die hervorgehobene Option wird im allgemeinen Fall nicht funktionieren. Sie müssen in Ihrem TS zwei Eingangsparameter festlegen, die ein Nicht-Handelsintervall (Rauswurf) definieren. Dann ist es realistisch.
Für den allgemeinen Fall können Sie ein benutzerdefiniertes Symbol erstellen, das sich aus dem ursprünglichen Symbol ergibt, indem Sie das Intervall wegwerfen.
Genau so wollte ich es auch machen. Ein einziger Parameter reicht aus, weil die Teilung in gleiche Teile geht. Der Parameter gibt die Nummer des zu verwerfenden Segments an. Nun, man kann auch den Parameter "Anzahl der Teile" hinzufügen.
Mit den Werkzeugen von Andrew können Sie dem Master-Terminal eine Aufgabe zur Durchführung von k Optimierungen geben, von denen jede ihren eigenen Parameter "Anzahl der Validierungsabschnitte" hat. Dann müssen Sie allerdings ein Add-on schreiben, um die Statistiken zusammenzuführen.
Alles wäre hundertmal einfacher, wenn der Tester die Möglichkeit hätte, einige Parameter während der Genetik zwangsweise vollständig aufzuzählen. Dann können die Opta-Ergebnisse analysiert werden, indem sie durch den Parameter "Plotnummer" geteilt werden.
Eine weitere Möglichkeit ist die Funktion OnTesterDeinit(). Ich habe darin bereits ein vollwertiges WFO implementiert, und man kann dort problemlos eine Kreuzvalidierung nach beliebigen Kriterien durchführen. Allerdings wird sie nur im Falle einer vollständigen Suche "korrekt" sein, da sie durch Aufzählung der Frames des gesamten Testabschnitts durchgeführt wird. Eine vollständige Aufzählung ist in den meisten Fällen unrealistisch. Und wenn wir Genetik betreiben, wird die Menge der Frames unfair sein, weil im Prozess von opta die Ergebnisse auch nach den Abschnitten selektiert werden, die wir zu Testabschnitten machen wollen. Obwohl, wie viel wirklichen Schaden dies tun wird, ist eine Frage. Wenn das Verhältnis der Länge der Teststelle zur Gesamtlänge klein ist, sollte die Genetik immer noch eine ausreichende Anzahl von Varianten haben, bei denen sich die Teststelle als schlecht erweist. Und nach einer so häufigen Variante ist es möglich, eine weitere Stelle zu belassen, die nicht daran beteiligt war, und das Ergebnis an dieser Stelle zu überprüfen.
Das ist genau das, was ich vorhatte. Ein einziger Parameter reicht aus, weil er in gleiche Teile aufgeteilt ist. Der Parameter gibt die Nummer des zu verwerfenden Abschnitts an. Sie können auch den Parameter "Anzahl der Teile" hinzufügen.
Mit den Werkzeugen von Andrew können Sie dem Master-Terminal eine Aufgabe zur Durchführung von k Optimierungen geben, von denen jede ihren eigenen Parameter "Anzahl der Validierungsabschnitte" hat. Dann müssen Sie allerdings ein Add-on schreiben, um die Statistiken zusammenzuführen.
Alles wäre hundertmal einfacher, wenn der Tester die Möglichkeit hätte, einige Parameter während der Genetik zwangsweise vollständig aufzuzählen. Dann könnte man die Opta-Ergebnisse analysieren, indem man sie durch den Parameter "Plotnummer" dividiert.
Es gibt auch das fxsaber-Tool, es wird beim Rest helfen.
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Kontinuierliche Walk-Forward-Optimierung (Teil 3): Eine Roboters für Autoadaptierung anpassen :
Der dritte Teil dient als Brücke zwischen den beiden vorhergehenden Teilen: Er beschreibt den Mechanismus der Interaktion mit der DLL, der im ersten Artikel besprochen wurde, und die Objekte zum Laden von Berichten, die im zweiten Artikel beschrieben wurden. Wir werden den Prozess der Wrapper-Erstellung für eine Klasse analysieren, die aus der DLL importiert wird und die eine XML-Datei mit der Handelshistorie bildet. Wir werden auch eine Methode für die Interaktion mit diesem Wrapper in Betracht ziehen.
Im ersten Artikel wurde der Mechanismus des Betriebs mit XML-Berichtsdateien und die Erstellung der Dateistruktur analysiert. Das Erstellen von Berichten wurde im zweiten Artikel betrachtet. Der Mechanismus der Berichterstellung wurde untersucht, beginnend mit dem Objekt zum Herunterladen der Geschichte und endend mit den Objekten, die den Bericht generieren. Bei der Untersuchung der Objekte, die am Prozess der Berichtserstellung beteiligt sind, wurde der Berechnungsteil detailliert analysiert. Der Artikel enthielt auch die wichtigsten Koeffizientenformeln sowie die Beschreibung möglicher Berechnungsprobleme.
Wie bereits in der Einführung zu diesem Artikel erwähnt, dienen die in diesem Teil beschriebenen Objekte als Brücke zwischen dem Mechanismus zum Herunterladen von Daten und dem Mechanismus zur Erstellung des Berichts. Zusätzlich zu den Funktionen, mit denen Handelsberichtsdateien gespeichert werden können, enthält der Artikel die Beschreibung der Klassen, die am Entladen von XML-Berichten teilnehmen, sowie die Beschreibung von Robotervorlagen, die diese Funktionen automatisch nutzen können. Der Artikel beschreibt auch, wie die erstellten Funktionen zu einem bestehenden Algorithmus hinzugefügt werden können. Das bedeutet, dass Nutzer des Autooptimierungsprogramms sowohl die alten als auch die neuen Algorithmen optimieren können.
Autor: Andrey Azatskiy