Diskussion zum Artikel "Kontinuierliche Walk-Forward-Optimierung (Teil 4): Optimierungsmanager (automatische Optimierung)"
Seriöse Arbeit. Es wäre interessant, die Ergebnisse zwischen verschiedenen Implementierungen der automatischen Optimierung für denselben EA zu vergleichen.
Vielen Dank für das positive Feedback
Es ist eine echte Leistung Ihrerseits, eine solche Arbeit auf freiwilliger Basis zu leisten. Eine Woche Schreibarbeit und etwa ein halbes Jahr Code-Entwicklung sind da drin. Ist die Automatisierung der Optimierung nicht die wichtigste Aufgabe für den Client-Teil des Terminals? Leider kümmert sich MQ nicht darum und schenkt den Anfragen der Makler mehr Aufmerksamkeit (sie zahlen). Es ist seltsam, dass es keine Explosion von begeisterten Kommentaren von Benutzern gibt. Was, niemand optimiert?
Ich hatte noch keine Gelegenheit, das Projekt zu kompilieren, sondern habe mir nur die Schnittstelle im Debug-Modus angesehen und den Artikel gelesen, aber es sieht alles sehr vielversprechend aus. Ich muss eine Anleitung finden, wie man in Visual Studio kompiliert.
Es wäre schön, wenn man die Möglichkeit hätte, in der Marktübersicht für jedes Optimierungsintervall die Tools aufzulisten. Das kostet zwar Energie, aber in kurzen Intervallen kann man das Ergebnis auswerten. Nun, vielleicht eine russische Lokalisierung? Aber so wie es ist, ist alles klar.
Ich schüttle Ihre Hand und verbeuge mich für Ihre Arbeit.
Es ist eine echte Leistung Ihrerseits, eine solche Arbeit auf freiwilliger Basis zu leisten. Eine Woche Schreibarbeit und etwa ein halbes Jahr Code-Entwicklung sind da drin. Ist die Automatisierung der Optimierung nicht die wichtigste Aufgabe für den Client-Teil des Terminals? Leider kümmert sich MQ nicht darum und schenkt den Anfragen der Makler mehr Aufmerksamkeit (sie zahlen). Es ist seltsam, dass es keine Explosion von begeisterten Kommentaren von Benutzern gibt. Was, niemand optimiert es?
Ich hatte noch keine Gelegenheit, das Projekt zu kompilieren, sondern habe mir nur die Schnittstelle im Debug-Modus angesehen und den Artikel gelesen, aber es sieht alles sehr vielversprechend aus. Ich muss eine Anleitung finden, wie man in Visual Studio kompiliert.
Es wäre schön, wenn man die Möglichkeit hätte, in der Marktübersicht für jedes Optimierungsintervall die Tools aufzulisten. Das kostet zwar Energie, aber in kurzen Intervallen kann man das Ergebnis auswerten. Nun, vielleicht eine russische Lokalisierung? Aber so wie es ist, ist alles klar.
Ich schüttle Ihre Hand und verbeuge mich für Ihre Arbeit.
Vielen Dank für Ihren Kommentar, ich hoffe, dass meine Entwicklungen nützlich sein werden. In zukünftigen Artikeln werden wir beschreiben, wie das Projekt in VS erstellt wird und wie Sie Ihre eigene Optimierungslogik implementieren können.
Was die Kompilierung betrifft, so wurde das Projekt bereits kompiliert, wenn Sie es im Debugging-Modus im Studio ausführen. Sie finden es im Verzeichnis MetaTrader Auto Optimiser/bin/Debug
Ich habe Ihr Programm noch nicht begonnen, aber die ersten Fragen sind bereits aufgetaucht:
1. Habe ich das richtig verstanden - es wird kein benutzerdefiniertes Optimierungskriterium unterstützt? Das wäre dringend erforderlich.
2. Wie wird das kontinuierliche Gleiten der Optimierung sichergestellt? Müssen Sie alle Optimierungs- und Vorwärtsbereiche manuell eingeben? Warum wird das nicht so umgesetzt:
Optimierungsstartdatum/Optimierungszeitraum (Monat; Woche; Tag)/Optimierungszeitraum/ Vorwärtszeitraum/Vorwärtsskala. Unterteilen Sie den Zeitraum programmatisch in Durchgänge. Ich habe das im Multitester gemacht. Aber ein Jahr, in dem man auch nur eine Woche am Stück ausschreibt, wird Sie umhauen. Und Scalping kann auch verwendet werden.
3) Nur mal so aus Neugier: Warum brauchen Sie die Makro-Substitution "TESTER_ONLY"? Der Expert Advisor entlädt sich auch ohne sie aus dem Chart.
Ich habe noch nicht mit Ihrem Programm begonnen, aber ich habe schon die ersten Fragen:
1. Habe ich das richtig verstanden - es wird kein benutzerdefiniertes Optimierungskriterium unterstützt? Das wäre sehr wünschenswert.
2. Wie wird das kontinuierliche Gleiten der Optimierung gewährleistet? Müssen Sie alle Optimierungs- und Vorwärtsbereiche manuell eingeben? Warum nicht auf diese Weise?
Optimierungsstartdatum/Optimierungszeitraum (Monat; Woche; Tag)/Optimierungszeitraum/ Vorwärtszeitraum/Vorwärtsskala. Teilen Sie den Zeitraum programmatisch in Durchgänge ein. Ich habe das im Multitester gemacht. Aber ein Jahr, in dem man auch nur eine Woche am Stück ausschreibt, wird Sie umhauen. Und Scalping kann auch verwendet werden.
3. nur mal so aus Neugier: Wozu brauchen Sie die Makro-Substitution "TESTER_ONLY"? Der Expert Advisor entlädt sich auch ohne sie aus dem Chart.
1. Ich habe nicht in der benutzerdefinierten Kriterium zu füllen, wie viele verschiedene andere ersetzt, aber in der Zukunft, wenn ich denke, um das Projekt zu entwickeln (wie alle Artikel in dieser Serie abgeschlossen sein wird, 2 weitere ich planen) - Sie können es hinzufügen, es ist nicht schwer. Auch eine vernünftige Entscheidung, ich danke Ihnen für Ihren Rat.
2. Was die Daten betrifft, so müssen Sie diese nur einmal eingeben, dann in einer Datei speichern und die gespeicherte Datei in der Zukunft einfach laden. Ich habe diese Aufschlüsselung vorgenommen, weil ich sie selbst für Börsentests am Terminmarkt verwende. Futures werden auf Basis von Stapeln getestet, und die Stapeldaten sind nicht festgelegt und werden vom Broker bereitgestellt. Daher stelle ich die Aufteilung der Staples manuell ein, damit der Testzeitraum nicht auf den Zeitpunkt des Staplings fällt. Es genügt, die gewünschten Optimierungsfenster einmal einzugeben, sie in einer Datei zu speichern und dann nur diese Datei zu laden.
3. ein Makro, das nicht versehentlich im echten Leben abläuft. Der Expert Advisor ist ein Test, der für den realen Handel noch nicht fertig ist. Ich beschloss, #define diese ein, so dass jemand nicht versehentlich laufen würde es in den realen Handel zu setzen. Es ermöglicht den Expert Advisor nur im Tester zu arbeiten, und wenn Sie den Roboter auf dem Chart auf einmal zu laden, wird es einfach gelöscht werden.
2. Wie wird eine kontinuierliche Gleitoptimierung gewährleistet? ...
Im letzten Artikel werde ich Schritt für Schritt den gesamten Prozess der gleitenden Optimierung mit dem dazugehörigen Code beschreiben. Der Punkt ist, dass der Optimierungsalgorithmus selbst separat implementiert wird. Und wie ich bereits erwähnt habe, können Sie einen anderen Algorithmus zum aktuellen Optimierungsalgorithmus hinzufügen.
Good Beer:
Ich habe es noch nicht geschafft, das Projekt zu kompilieren ...
Der einfachste und schnellste Weg zum Kompilieren ist, das Projekt zu öffnen und STRG+SHIFT+B zu drücken .
Mehr visuell - klicken Sie auf den grünen Pfeil im Editor, die Anwendung wird im Code-Debugging-Modus gestartet, aber die Kompilierung wird auch stattfinden.
Eine weitere Option - klicken Sie im Dropdown-Menü auf Build
Später auf den PfadMetaTrader Auto Optimiser/bin/Debug (oder MetaTrader Auto Optimiser/bin/Release, je nach gewähltem Build-Typ) - das kompilierte Programm wird erscheinen.
Im Sortierfenster können mehrere Optimierungskriterien eingegeben werden. Wie sollen sie multipliziert werden? Ohne ein benutzerdefiniertes Kriterium geht es ohnehin nicht. Es ist zum Beispiel gut, die Anzahl der Transaktionen als Wurzel zu nehmen oder den Sharpe modulo der Anzahl der Transaktionen zu nehmen. Bitte geben Sie diese Idee nicht auf.
Die Liste der Perioden kann mit MQL-Tools erstellt werden.
Mit #define TESTER_ONLY meinte ich, dass der Ausdruck in Klammern auch ohne TESTER_ONLY funktioniert. Ich verstehe nicht, warum Sie die Substitution verwenden müssen, ich habe das schon oft gesehen.
Im Sortierfenster können mehrere Optimierungskriterien eingegeben werden. Wie sollen sie multipliziert werden? Ohne ein benutzerdefiniertes Kriterium geht es ohnehin nicht. Es ist zum Beispiel gut, die Anzahl der Transaktionen als Wurzel zu nehmen oder den Sharpe modulo der Anzahl der Transaktionen zu nehmen. Bitte geben Sie diese Idee nicht auf.
Die Liste der Perioden kann mit den MQL-Tools erstellt werden.
Mit #define TESTER_ONLY meinte ich, dass der Ausdruck in Klammern auch ohne TESTER_ONLY funktioniert. Ich verstehe nicht, warum Sie die Substitution verwenden müssen, ich habe das schon oft gesehen.
Nun, sobald ich die erste Version des Artikels fertiggestellt habe, werde ich eine Fortsetzung planen, es gibt immer noch einige Ideen, die ich gerne implementieren würde.
Liste der Punkte - genau in der Auto-Optimierer benötigt wird, schaltet es Tests selbst und sollte diese Punkte sehen (nach der Logik des resultierenden Programms).
In Bezug auf die definieren:
#ifdef TESTER_ONLY if(MQLInfoInteger(MQL_TESTER)==0 && MQLInfoInteger(MQL_OPTIMIZATION)==0) { Print("This expert was created for demonstration! It is not anabled for real trading !"); ExpertRemove(); return(INIT_FAILED); } #endif
Der Ausdruck ist in das #ifdef #endif-Konstrukt verpackt - es ist eine Bedingung, die zur Kompilierzeit ausgeführt wird. Wenn Sie das Projekt kompilieren, indem Sie #define TESTER_ONLY definieren, wird der in dieser Bedingung verpackte Ausdruck in den Build aufgenommen, wenn Sie ihn nicht deklarieren, wird er nicht aufgenommen. Ich habe es so eingerichtet, dass, wenn jemand experimentieren und den Roboter auf eigenes Risiko in der Realität laufen lassen will, er nur #define TESTER_ONLY auskommentieren muss - ohne den Quellcode zu ändern.
Die Methode zur Berücksichtigung mehrerer ausgewählter Sorten ist im ersten Artikel dieser Serie beschrieben. Dort geschieht alles über die Normalisierung der Parameter. Wie ich jedoch bereits sagte, können Sie Ihren eigenen Optimierer erstellen und Ihr eigenes System zur Berücksichtigung dieser Parameter entwickeln - dies wird in einem der nächsten Artikel beschrieben.
- 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 4): Optimierungsmanager (automatische Optimierung) :
Der Hauptzweck des Artikels besteht darin, den Mechanismus der Arbeit mit unserer Anwendung und deren Möglichkeiten zu beschreiben. Daher kann der Artikel als eine Anleitung zur Benutzung der Anwendung betrachtet werden. Er behandelt alle möglichen Fallstricke und Besonderheiten bei der Verwendung der Anwendung.
Um mit der Analyse des erstellten Programms fortzufahren, müssen wir zunächst den Zweck dieses Projekts definieren. Wir entschieden uns für einen wissenschaftlichen Ansatz beim Handel und begannen mit der Schaffung klar programmierter Handelsalgorithmen (egal, ob wir es mit indikatorbasierten Robotern oder mit solchen zu tun haben, die Fuzzy-Logik und neuronale Netze anwenden — alle sind programmierte Algorithmen, die bestimmte Aufgaben ausführen). Daher sollte auch der Ansatz für die Auswahl der Optimierungsergebnisse formalisiert werden. Mit anderen Worten, wenn während der Verweigerung der Anwendung von Zufälligkeit im Handelsprozess, dann sollte auch der Prozess der Vorbereitung auf den Handel automatisiert werden. Andernfalls können wir die Ergebnisse, die uns gefallen, nach dem Zufallsprinzip auswählen, was näher an der Intuition als am Systemhandel liegt. Diese Idee ist das erste Motiv, das mich dazu bewogen hat, diese Anwendung zu schaffen. Das Nächste ist die Möglichkeit, Algorithmen zu testen, indem man sie optimiert — mit Hilfe der in der folgenden Abbildung gezeigten kontinuierlichen Walk-Forward Optimierung.
Die kontinuierliche Walk-Forward-Optimierung wechselt zwischen historischen (gelb) und vorwärtsgerichteten (grün) Optimierungsdurchläufen in einem gegebenen Zeitintervall. Angenommen, Sie haben eine 10-jährige Historie. Wir bestimmen, dass die Optimierungsperiode aus einem Intervall von einem Jahr und einem Vorwärtsintervall aus einem Quartal (oder 3 Monaten) bestehen soll. Als Ergebnis haben wir ein Intervall von 1,25 Jahren (1 Jahr + 1 Quartal) für einen Optimierungsdurchgang + einen Vorwärtstest. In der Abbildung charakterisiert jede Zeile dieses Zeitintervall.
Autor: Andrey Azatskiy