Diskussion zum Artikel "Kontinuierliche Walk-Forward-Optimierung (Teil 8): Programmverbesserungen und Korrekturen" - Seite 2

 
Andrey Azatskiy:

Bezüglich der Fehlermeldung, dass es keine Daten zu erstellen gibt - sind Sie sicher, dass Sie das automatische Hochladen und die Berichterstellung in den EA aufgenommen haben? Hier gibt es zwei Möglichkeiten: Entweder haben Sie die Funktionalität des automatischen Entladens und der Berichtserstellung nicht in den EA-Code aufgenommen, oder die Handelsergebnisse des EA haben die von Ihnen festgelegten Optimierungsfilter nicht bestanden.

Meinem Verständnis nach habe ich das Entladen angeschlossen und dem Expert Advisor Zeilen hinzugefügt:

#include<Trade\Trade.mqh>
#define  CUSTOM_ON_TICK // Teilen Sie dem hochladenden System mit, dass wir den OnTick-Callback selbst implementieren
#include <History manager/AutoUpLoader2.mqh> // CAutoUploader einbeziehen

#define  TESTER_ONLY
Und alles hat gemäß den Parametern funktioniert. Die Optimierung wurde im Tester visualisiert und der Expert Advisor schrieb die Ergebnisse in seine Datei. Aber nur per Historie. Der Vorwärtsdurchlauf wurde nicht aufgezeichnet. Im Ergebnisfenster des Optimierers war überhaupt nichts zu sehen.
 
Good Beer:

In meinem Verständnis habe ich die Entladung verbunden, fügte Strings zu den EA:

Und alles funktionierte gemäß den Parametern. Die Optimierung wurde im Tester visualisiert und der Expert Advisor schrieb die Ergebnisse in seine Datei. Aber nur per Historie. Der Forward Pass wurde nicht aufgezeichnet. Im Ergebnisfenster des Optimierers war überhaupt nichts zu sehen.

Wenn Sie "CUSTOM_ON_TICK" verwendet haben, müssen Sie den folgenden Code zu Ihrer OnTick-Methode hinzufügen (ganz am Anfang):

CAutoUploader2::OnTick(); // Wenn CUSTOM_ON_TICK definiert wurde

Entweder benennen Sie OnTick in MyOnTick oder etwas anderes um, und in OnInit schreiben Sie die Verbindung :

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);
 
Good Beer:

Sie haben sich geirrt. Sie sind derjenige mit der Optimierungszeit von 12:00 bis 12:00 Uhr. Und ich habe nicht gefunden, wo man das ändern kann.

Dadurch verlieren wir 12 Stunden des ersten Tages der Historie und werden für 12 Stunden für den Vorwärtszeitraum optimiert. Dadurch verschiebt sich der Vorlauf um einen Tag nach vorne, weil dieser Tag von der Historie in Anspruch genommen wird.

Da eine Woche 7 Tage hat, muss der Optimierungszeitraum in sieben Tage aufgeteilt werden. Der historische Zeitraum endet am Montag 0-00 und der Forward beginnt am Montag 0-00. Es stellt sich heraus, dass wir am Montag nicht testen, sondern einen Forward machen. Keine Zeitmaschine.

Die Zeit wird im ausländischen Format angezeigt (MM.DD.YYYY HH:MM), ist aber in unserem Format (DD.MM.YYYY) eingestellt.
Wo die Zeit nicht 12:00 Uhr = 00:00 ist.

Und da die von uns angegebene Zeit Po gleich DD.MM.YYYY 00:00:00 ist, wird der Tester nicht verstehen, dass wir ab dem nächsten Datum testen müssen, sondern er wird den Test ab demselben Datum beginnen und wir werden dieselbe Zeitmaschine erhalten. Deshalb werden wir einen Tag zurückgehen. Sie können jedoch die Logik der Zeiteinstellung umschreiben, indem Sie die Methode"public void Calculate(DateTime From, DateTime Till, uint history, uint forward)" ändern, die sich in der Klasse "AutoFrame" befindet. die sich in der Klasse " AutoFillInDateBordersM" befindet. Diese Klasse ist in der Datei beschrieben, die unter dem Pfad "MetaTrader-Auto-Optimiser/Metatrader Auto Optimiser/Model/AutoFillInDateBordersM.cs" zu finden ist.

So ist sie in der aktuellen Version implementiert:
public void Calculate(DateTime From, DateTime Till, uint history, uint forward)
        {
            if (From >= Till)
                throw new ArgumentException("Date From must be less then date Till");

            List<KeyValuePair<OptimisationType, DateTime[]>> data = new List<KeyValuePair<OptimisationType, DateTime[]>>();

            OptimisationType type = OptimisationType.History;

            DateTime _history = From;
            DateTime _forward = From.AddDays(history + 1);

            DateTime CalcEndDate()
            {
                return type == OptimisationType.History ? _history.AddDays(history) : _forward.AddDays(forward);
            }

            while (CalcEndDate() <= Till)
            {
                DateTime from = type == OptimisationType.History ? _history : _forward;
                data.Add(new KeyValuePair<OptimisationType, DateTime[]>(type, new DateTime[2] { from, CalcEndDate() }));

                if (type == OptimisationType.History)
                    _history = _history.AddDays(forward + 1);
                else
                    _forward = _forward.AddDays(forward + 1);

                type = type == OptimisationType.History ? OptimisationType.Forward : OptimisationType.History;
            }

            if (data.Count == 0)
                throw new ArgumentException("Can`t create any date borders with setted In sample (History) step");

            DateBorders?.Invoke(data);
        }
 
Nguyen Tien Duong:

Hallo, Ihre Serienartikel waren wirklich hilfreich, ich bin nicht gut in c #, so dass ich versuche, es von Ihrem Unterricht zu lernen

Ich habe die angehängten Dateien von Teil 4 bis 7 heruntergeladen, aber ich kann das "Metatrade Auto Optimiser"-Projekt nicht erstellen. ich habe eine Fehlermeldung wie im Bild:


Beigefügte Dateienvon Teil 8 das ist mein erstes Mal sehen, Ihr Programm-Interface, es gelang in mt5 zu starten, wenn die Optimierung Modus deaktiviert ist, und wwenn ich es einschalten, wie dieses Bild bekam ich Fehler



Bitte helfen Sie mir, es zu beheben, danke

Verwenden Sie die letzte Vergangenheit, sie enthält alle notwendigen Dateien und Links.

Sie müssen Upload-Optionen in Ihrem Experten hinzufügen. Verwenden Sie dazu die Datei "/Data/MQL5/Experts/Test Expert/New uploading variant/SimpleMA.mq5" als Beispiel, oder kompilieren Sie sie und verwenden Sie sie für die Tests.

 
Andrey Azatskiy:

Wenn Sie "CUSTOM_ON_TICK" verwendet haben, müssen Sie den folgenden Code in Ihre OnTick-Methode einfügen (ganz am Anfang):

Entschuldigen Sie, dass ich so begriffsstutzig bin, aber hätten Sie die Standardmethode "OnTick()" nicht weglassen können?

 
Andrey Azatskiy:

Die Zeit wird im ausländischen Format angezeigt

Sicher, ich werde versuchen, es neu zu schreiben. Das Problem war nicht das Zeitformat, sondern die Tatsache, dass die Vorwärtsperiode weiter rechts war als sie sein sollte. Vielleicht ist mein Terminal auf das 24-Stunden-Format eingestellt und dies verursacht den Fehler.

 
Good Beer:

Verzeihen Sie mir, wenn ich begriffsstutzig bin; war es möglich, mit dem Standard "OnTick()" auszukommen?

Dort ist alles anpassbar. Studieren Sie die Datei "History manager/AutoUpLoader2.mqh" + ein Beispiel mit dem neuen Daten-Upload-Format, dann sollte alles klarer werden.

Wenn die Defyne "CUSTOM_ON_TICK" in Ihrer Nachricht beschrieben ist - bedeutet das, dass Sie sagen, dass OnTick Standard ist, aber es bedeutet auch, dass Sie darauf achten müssen, dass der Code-String

CAutoUploader2::SetCallback(MyOnTick, ENUM_CALLBACK_TYPE::CB_ON_TICK);

am Anfang der OnTick-Methode.

 

Hallo,


vielen Dank für dieses Projekt. Ich bin sicher, dass es sehr nützlich sein wird.

Ich habe gerade angefangen, es zu benutzen und stehe vor einem Problem mit der Auswahl der Währung in "Metatrader Auto Optmiser .exe". Ist es möglich, eine andere Währung anstelle der Standardwerte zu verwenden?

Es gibt keine Option, um eine neue zu schreiben, außer den verfügbaren Optionen (RUR, USD, EUR, GPB, CHF).


Ich danke Ihnen.

 
Marinho10:

Hallo,


vielen Dank für dieses Projekt. Ich bin sicher, es wird sehr nützlich sein.

Ich habe gerade angefangen, es zu benutzen und stehe vor einem Problem mit der Auswahl der Währung in "Metatrader Auto Optmiser .exe". Ist es möglich, eine andere Währung anstelle der Standardwerte zu verwenden?

Es gibt keine Option, eine neue zu schreiben, außer den verfügbaren Optionen (RUR, USD, EUR, GPB, CHF).


Ich danke Ihnen.

Hallo.

Sie müssen den Code des Auto-Optimierers bearbeiten und neu kompilieren.
1. Öffnen Sie das Programm in Visual Studio.
2. Öffnen Sie die Datei "AutoOptimiserVM.cs"
3. In der Zeile #41 - der folgende Code ist für die Sammlung der Währungen verantwortlich. Bearbeiten Sie ihn:

new OptimiserSetting( " Currency", new []{ " RUR", " USD", " EUR", "GBP", " CHF"}),
4. Kompilieren Sie das Programm neu und Sie werden Ihre Währung in der Combobox sehen.

 
Ich fordere den Autor auf, ein Video aufzunehmen, das die verschiedenen Einsatzmöglichkeiten dieses Projekts zeigt.