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

 
fxsaber:
Ich bitte den Autor, ein Video aufzunehmen, das die verschiedenen Einsatzmöglichkeiten dieses Projekts zeigt.

Wenn Sie freie Zeit haben. Aber im Allgemeinen ist die Bitte von Ihnen ein wenig unerwartet, Sie haben meine Veröffentlichungen seit dem allerersten Artikel gesehen (auch wenn vielleicht nicht alle von ihnen befolgt wurden).

 

Hallo,

Erstaunliches Projekt. Vielen Dank für dieses Projekt.

Ich habe ein Problem mit der Kompilierung der DealHistoryGetter.mqh und die Fehlermeldung lautet: 'calcContracts' - member function not defined line 488.


Nochmals vielen Dank.

 

Hallo,

Erstaunliches Projekt.Vielen Dank für dieses Projekt.

Ich habe ein Problem mit der Kompilierung der DealHistoryGetter.mqh und die Fehlermeldung lautet: ' calcContracts' - memberfunction not defined line 488.


Nochmals vielen Dank.

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Franco87:

Hallo,

Erstaunliches Projekt,vielen Dank dafür.

Ich habe ein Problem mit der Kompilierung der DealHistoryGetter.mqh und die Fehlermeldung lautet: ' calcContracts' - memberfunction not defined line 488.


Ich danke Ihnen nochmals sehr.

Hallo, ich habe vor kurzem mein Experte, der diese Datei verwendet und alles war ok.

 
Wenn ich die .mq5-Dateien kompiliere, die Sie von Ihrem Expert Advisor mit dem Namen "Neue Hochladevariante" geschickt haben, werden viele Fehler angezeigt, wie Sie auf dem Bild unten sehen können. Ich habe gerade die neueste Version heruntergeladen (8. Artikel).

Was soll ich tun, um dieses Problem zu lösen?





Grüße
 

Hallo Andrei. Ich habe beschlossen, mich wieder auf die Suche nach dem Gral zu begeben und war froh, deinen Optimierer funktionierend und fertiggestellt vorzufinden. Lösungen, die vollständig auf Mql5 aufgebaut sind, erwiesen sich als anspruchsvoll für den Support des Autors und liefen aus dem Ruder. Und Ihr Optimierer wird funktionieren, solange es C# gibt, und das Fenster des Strategietesters im MT5 wird unverändert bleiben. Seltsam, dass es keine Massennachfrage nach derBack-Forward-Optimierung gibt. Wie auch immer, vielen Dank für Ihre harte Arbeit!


Der Tester funktioniert bereits, aber ich werde ein paar Wünsche äußern. Vielleicht entwickelt ja noch jemand das Projekt weiter und nimmt es in die Codebasis auf.
1. Ich hätte gerne Tooltips mit Erklärungen in der Kopfzeile von Tabellen mit Ergebnissen. Was sind: var 90, var 95, mx....
2. Die Werte von PL und DD in den Fenstern 1 und 3 der Registerkarte "Ergebnisse" stimmen nicht überein. Und die Maßeinheiten?
3. Die Funktion OnTester() wird nicht kompiliert, weil sie in den Optimierungsdateien definiert ist, so dass völlig benutzerdefinierte Kriterien nicht mehr funktionieren. Das Programm erlaubt es Ihnen, aus den Standardkriterien einen beliebigen Satz einzugeben.
4. Wie können wir auf Bilanztabellen verzichten? Man kann alle Vorwärtsbewegungen zusammenkleben und sie z.B. auf einem Tester laufen lassen. Oder besser - gleich eine grobe Grafik im Optimierer-Fenster, um zu beurteilen, ob der EA für weitere Zeitverschwendung taugt. Zumindest sollte der Optimierer das Endergebnis aller Forward-Durchläufe anzeigen.
5. Die Berechnung des Gewinns in Pips ist notwendig. Besonders wenn man bedenkt, wie der Tester mit Krypto arbeitet. Fügen Sie eine Checkbox hinzu.
6. Und zu guter Letzt würde ich gerne von der Möglichkeit träumen, mehrere TFs hinzuzufügen. Ähnlich wie die Möglichkeit, mehrere Vermögenswerte hinzuzufügen.
Nun, und viel, viel Geld....

 
Good Beer Back-Forward-Optimierung gibt. Wie auch immer, vielen Dank für Ihre Arbeit!


Der Tester funktioniert bereits, aber ich werde ein paar Wünsche äußern. Vielleicht entwickelt ja noch jemand das Projekt weiter und nimmt es in die Codebasis auf.
1. Ich hätte gerne Tooltips mit Erklärungen in der Kopfzeile von Tabellen mit Ergebnissen. Was sind: var 90, var 95, mx....
2. Die Werte von PL und DD in den Fenstern 1 und 3 der Registerkarte "Ergebnisse" stimmen nicht überein. Und die Maßeinheiten?
3. Die Funktion OnTester() wird nicht kompiliert, weil sie in den Optimierungsdateien definiert ist, so dass völlig benutzerdefinierte Kriterien nicht mehr funktionieren. Das Programm erlaubt es Ihnen, aus den Standardkriterien einen beliebigen Satz einzugeben.
4. Wie können wir auf Bilanztabellen verzichten? Man kann alle Vorwärtsbewegungen zusammenkleben und sie z.B. auf einem Tester laufen lassen. Oder besser - gleich eine grobe Grafik im Optimierer-Fenster, um zu beurteilen, ob der EA für weitere Zeitverschwendung taugt. Zumindest sollte der Optimierer das Endergebnis aller Forward-Durchläufe anzeigen.
5. Die Berechnung des Gewinns in Pips ist notwendig. Besonders wenn man bedenkt, wie der Tester mit Krypto arbeitet. Fügen Sie eine Checkbox hinzu.
6. Und zu guter Letzt würde ich gerne von der Möglichkeit träumen, mehrere TFs hinzuzufügen. Ähnlich wie die Möglichkeit, mehrere Vermögenswerte hinzuzufügen.
Nun, und viel, viel Geld....

Danke für Ihr Feedback, ich unterstütze dieses Projekt nicht, aber ja, es sollte für eine lange Zeit funktionieren.

Wenn jemand den Wunsch hat, das Projekt zu verfeinern, zu optimieren - dann tun Sie es)
https://github.com/AndreyKrivcov/MetaTrader-Auto-Optimiser.

GitHub - AndreyKrivcov/MetaTrader-Auto-Optimiser
GitHub - AndreyKrivcov/MetaTrader-Auto-Optimiser
  • AndreyKrivcov
  • github.com
Experts mast use class CAutoUploader (CustomInclude/History manager/AutoLoader.mqh)
 
EDUARDO RODRIGUES NASCIMENTO #:
Wenn ich die .mq5-Dateien kompiliere, die Sie von Ihrem Expertenberater mit dem Namen "Neue Hochladevariante" geschickt haben, zeigt er eine Menge Fehler an, wie Sie im Bild unten sehen können. Ich habe gerade die neueste Version heruntergeladen (8. Artikel).

Was soll ich tun, um dieses Problem zu lösen?





Grüße

So. Laden Sie das an den Artikel angehängte Archiv herunter und sehen Sie zwei Ordner darin:

So. Wir laden das dem Artikel beigefügte Archiv herunter und sehen darin zwei Ordner:


Verschieben Sie den Ordner MetaTrader-Auto-Optimiser aus dem Archiv in das Stammverzeichnis, in dem sich MetaTrader 5 befindet:

Verschieben Sie den Ordner MetaTrader-Auto-Optimiser aus dem Archiv in das Stammverzeichnis, in dem sich MetaTrader 5 befindet:


Es gibt zwei Ordner im MQL5-Ordner des Archivs - kopieren Sie diese in den MQL5-Ordner Ihres Terminals. Dementsprechend wird der Ordner Test Expert in den Ordner MQL5 kopiert, und zwei Ordner: CustomGeneric und History Manager werden in den Ordner MQL5 kopiert.

Kompilieren Sie die Datei SimpleMA.mq5 im Ordner Experts\Test Expert\New uploading variant:

Es gibt zwei Ordner im Archiv, im MQL5-Ordner - kopieren Sie diese in den MQL5-Ordner Ihres Terminals. Dementsprechend wird der Ordner Test Expert in den Ordner MQL5\Experts kopiert, und zwei Ordner werden in den Ordner MQL\Include kopiert: CustomGeneric und History manager.

Kompilieren Sie die Datei SimpleMA.mq5, die sich im Ordner Experts\Test Expert\New uploading variant befindet:


Wir erhalten 100 Fehler und 60 Warnungen:

Wirerhalten 100 Fehler und 60 Warnungen:


Sehen wir uns den ersten Fehler an und stellen fest, dass es sich nicht um einen geschlossenen Import handelt:

Gehen wir zum allerersten Fehler und sehen wir, dass es sich nicht um einen abgeschlossenen Import handelt:


Doppelklicken Sie auf die Aufschrift über den Fehler und gehen Sie zur Datei UploadersEntities.mqh in der Zeile mit dem Fehler:

Doppelklicken Sie auf die Beschriftung über den Fehler und gehen Sie in die Datei UploadersEntities.mqh in der Zeile mit dem Fehler:


Was sehen wir? Und wir sehen einen wirklich nicht geschlossenen Import. Beheben wir das:

Was sehen wir? Und wir sehen wirklich nicht geschlossen importieren. Wir korrigieren:

//+------------------------------------------------------------------+
//|UploadersEntities.mqh |
//| Copyright 2020, MetaQuotes Software Corp. | |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

#include "ReportCreator.mqh"
#import "ReportManager.dll"
#import
//+------------------------------------------------------------------+
//| Struktur zur Speicherung von Daten über Eingabeparameter |
//+------------------------------------------------------------------+
struct BotParams
  {
   string            name,value;
  };

// Hinzufügen eines neuen Wertes zum dynamischen Array
#define ADD_TO_ARR(arr, value) \
{\
   int s = ArraySize(arr);\
   ArrayResize(arr,s+1,s+1);\
   arr[s] = value;\
}

// Hinzufügen eines neuen Roboterparameters zum dynamischen Parameterfeld
#define APPEND_BOT_PARAM(Var,BotParamArr) \
{\
   BotParams param;\
   param.name = #Var;\
   param.value = (string)Var;\
   \
   ADD_TO_ARR(BotParamArr,param);\
}

//+------------------------------------------------------------------+
Funktion, die die Liste der Arrays kopiert //||
//+------------------------------------------------------------------+
void CopyBotParams(BotParams &dest[], const BotParams &src[])
  {
   int total = ArraySize(src);
   for(int i=0; i<total; i++)
     {
      ADD_TO_ARR(dest,src[i]);
     }
  }

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
double GetAverageCoef(CoefChartType type, CReportCreator &report_manager)
  {
   CoefChart_item coef_chart[];
   report_manager.GetCoefChart(false,type,coef_chart);

   double ans= 0;
   int total = ArraySize(coef_chart);
   for(int i=0; i<total; i++)
      ans+=coef_chart[i].coef;

   ArrayFree(coef_chart);
   return (ans/(double)total);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
string get_path_to_expert(void)
  {
   string arr[];
   StringSplit(MQLInfoString(MQL_PROGRAM_PATH),'\\',arr);
   string relative_dir=NULL;

   int total= ArraySize(arr);
   bool save= false;
   for(int i=0; i<total; i++)
     {
      if(save)
        {
         if(relative_dir== NULL)
            relative_dir=arr[i];
         else
            relative_dir+="\\"+arr[i];
        }

      if(StringCompare("Experts",arr[i])==0)
         save=true;
     }

   return relative_dir;
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
typedef void(*TCallback)();
typedef double(*TCustomFilter)();
typedef int (*TOnTesterInit)();


//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void EmptyCallback() {}
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
double EmptyCustomCoefCallback() {return 0;}
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int EmptyOnTesterInit() {return(INIT_SUCCEEDED);}

enum ENUM_CALLBACK_TYPE
  {
   CB_ON_TICK,
   CB_ON_TESTER_DEINIT
  };

struct Data
  {
   int tf, // ReportItem.TF
       laverage, // ReportReader.Laverage
       totalTrades, // BerichtElement.Optimierungskoeffizienten.GesamtGeschäfte
       totalProfitTrades, // ReportItem.OptimisationCoefficients.MaxPLDD.Profit.TotalTrades
       totalLooseTrades, // ReportItem.OptimisationCoefficients.MaxPLDD.DD.TotalTrades
       consecutiveWins, // ReportItem.OptimisationCoefficients.MaxPLDD.Profit.ConsecutivesTrades
       consequtiveLoose, // ReportItem.OptimisationCoefficients.MaxPLDD.DD.ConsecutivesTrades
       numberProfitTrades_mn, // BerichtElement.Optimierungskoeffizienten.Handelstage[Mn].Gewinn.Trades
       numberProfitTrades_tu, // ReportItem.Optimierungskoeffizienten.Handelstage[Tu].Gewinn.Trades
       numberProfitTrades_we, // BerichtElement.Optimierungskoeffizienten.Handelstage[Wir].Gewinn.Trades
       numberProfitTrades_th, // BerichtElement.Optimierungskoeffizienten.Handelstage[Th].Gewinn.Trades
       numberProfitTrades_fr, // BerichtElement.Optimierungskoeffizienten.Handelstage[Fr].Gewinn.Trades
       numberLooseTrades_mn, // ReportItem.OptimisationCoefficients.TradingDays[Mn].DD.Trades
       numberLooseTrades_tu, // ReportItem.OptimisationCoefficients.TradingDays[Tu].DD.Trades
       numberLooseTrades_we, // ReportItem.OptimisationCoefficients.TradingDays[We].DD.Trades
       numberLooseTrades_th, // ReportItem.OptimisationCoefficients.TradingDays[Th].DD.Trades
       numberLooseTrades_fr; // BerichtElement.Optimierungskoeffizienten.Handelstage[Fr].DD.Trades
   ulong startDT, // ReportItem.DateBorders.From
         finishDT; // ReportItem.DateBorders.Till
   double payoff, // ReportItem.Optimierungskoeffizienten.Payoff
          profitFactor, // BerichtPunkt.OptimierungsKoeffizienten.GewinnFaktor
          averageProfitFactor, // ReportItem.OptimizationCoefficients.AverageProfitFactor
          recoveryFactor, // BerichtPunkt.Optimierungskoeffizienten.Wiederherstellungsfaktor
          averageRecoveryFactor, // ReportItem.OptimisationCoefficients.AverageRecoveryFactor
          pl, // BerichtElement.Optimierungskoeffizienten.PL
          dd, // BerichtElement.Optimierungskoeffizienten.DD
          altmanZScore, // ReportItem.Optimierungskoeffizienten.AltmanZScore
          var_90, // BerichtPunkt.Optimierungskoeffizienten.VaR.Q_90
          var_95, // BerichtPunkt.Optimierungskoeffizienten.VaR.Q_95
          var_99, // BerichtPunkt.Optimierungskoeffizienten.VaR.Q_99
          mx, // BerichtPunkt.Optimierungskoeffizienten.VaR.Mx
          std, // BerichtElement.Optimierungskoeffizienten.VaR.Std
          max_profit, // ReportItem.OptimisationCoefficients.MaxPLDD.Profit.Value
          max_dd, // BerichtElement.Optimierungskoeffizienten.MaxPLDD.DD.Wert
          averagePl_mn, // ReportItem.OptimisationCoefficients.TradingDays[Mn].Profit.Value
          averagePl_tu, // ReportItem.OptimisationCoefficients.TradingDays[Tu].Profit.Value
          averagePl_we, // ReportItem.OptimisationCoefficients.TradingDays[We].Profit.Value
          averagePl_th, // ReportItem.OptimisationCoefficients.TradingDays[Th].Profit.Value
          averagePl_fr, // ReportItem.OptimisationCoefficients.TradingDays[Fr].Profit.Value
          averageDd_mn, // ReportItem.OptimisationCoefficients.TradingDays[Mn].DD.Value
          averageDd_tu, // ReportItem.OptimisationCoefficients.TradingDays[Tu].DD.Value
          averageDd_we, // ReportItem.OptimisationCoefficients.TradingDays[We].DD.Value
          averageDd_th, // ReportItem.OptimisationCoefficients.TradingDays[Th].DD.Value
          averageDd_fr, // BerichtElement.Optimierungskoeffizienten.Handelstage[Fr].DD.Wert
          balance; // ReportReader.Balance
   char              currency[100];
  };
//+------------------------------------------------------------------+

Kompilieren Sie erneut. Der Importfehler ist verschwunden, aber jetzt sieht der Compiler keine Funktionen und Methoden aus der importierten Datei:

Wir kompilieren noch einmal. Der Importfehler ist verschwunden, aber jetzt sieht der Compiler die Funktionen und Methoden aus der importierten Datei nicht:


Denken Sie daran, dass wir Methoden und Klassen aus einer Drittanbieter-DLL importieren. Sie sollte sich im Ordner MQL5/Libraries befinden.

Öffnen Sie den Ordner MetaTrader-Auto-Optimiser, den Sie aus dem Archiv in das Stammverzeichnis von MetaTrader 5 kopiert haben. Darin finden Sie die Datei Metatrader-Auto-Optimiser.sln:

Wir erinnern uns, dass wir Methoden und Klassen aus einer Drittanbieter-DLL importieren. Und diese sollte sich im Ordner MQL5\Libraries befinden.

Öffnen Sie den Ordner MetaTrader-Auto-Optimiser, der aus dem Archiv in das MetaTrader 5-Stammverzeichnis kopiert wurde. Darin befindet sich die Datei Metatrader-Auto-Optimiser.sln:


Doppelklicken Sie auf diese Datei, um das Projekt in MS Visual Studio zu öffnen.

Beim Öffnen des Projekts sehen wir, dass es für eine veraltete Plattform ist:

Doppelklicken Sie auf diese Datei, um das Projekt in MS Visual Studio zu öffnen.

Wenn Sie das Projekt öffnen, sehen Sie, dass es für eine veraltete Plattform ist:


Lassen Sie das Kontrollkästchen "Upgrade target to .NET Framefork 4.8 platform" aktiviert und klicken Sie auf die Schaltfläche "Continue".

Dann noch einmal für das zweite Projekt:

Lassen Sie das Kontrollkästchen "Upgrade target to .NET Framefork 4.8 platform" aktiviert und klicken Sie auf die Schaltfläche "Continue".

Dann wieder für das zweite Projekt:


Nach dem Laden der Projekte wählen Sie "Release" und Any CPU:

Nachdem Sie die Projekte geladen haben, wählen Sie "Freigeben" und "Beliebige CPU":


Und drücken Sie Strg+F5, um die Projekte zu kompilieren und zu erstellen.

Nachdem Sie das Projekt in MS Visual Studio kompiliert haben, wechseln Sie in das Stammverzeichnis des Terminals und dort in den Ordner \MetaTrader-Auto-Optimiser\ReportManager\bin\Release. Kopieren Sie die Datei der erstellten ReportManager.dll Bibliothek aus diesem Ordner in das MQL5/Libraries Verzeichnis des Terminals.

Kompilieren Sie nun erneut die Datei SimpleMA.mq5 aus dem Ordner MQL5\Experts\Test Expert\New uploading variant.

Geschafft, keine Fehler:

Drücken Sie Strg+F5, um die Projekte zu kompilieren und zu erstellen.

Nachdem Sie das Projekt in MS Visual Studio kompiliert haben, gehen Sie zum Stammverzeichnis des Terminals und darin zum Ordner \MetaTrader-Auto-Optimiser\ReportManager\bin\Release. Kopieren Sie die kompilierte Bibliotheksdatei ReportManager.dll aus diesem Ordner in das Verzeichnis MQL5\Libraries des Terminals.

Jetzt kompilieren wir wieder die Datei SimpleMA.mq5 aus dem Ordner MQL5\Experts\Test Expert\New uploading variant.

Fertig, keine Fehler:


Viel Spaß

Dateien:
 
Artyom Trishkin #:

So. Laden Sie das dem Artikel beigefügte Archiv herunter und sehen Sie darin zwei Ordner:

So. Wir laden das Archiv herunter, das dem Artikel beigefügt ist, und sehen darin zwei Ordner:


Übertragen Sie den Ordner MetaTrader-Auto-Optimiser aus dem Archiv in das Stammverzeichnis, in dem sich MetaTrader 5 befindet:

Verschieben Sie den Ordner MetaTrader-Auto-Optimiser aus dem Archiv in das Hauptverzeichnis, in dem sich MetaTrader 5 befindet:


Es gibt zwei Ordner im MQL5-Ordner des Archivs - kopieren Sie diese in den MQL5-Ordner Ihres Terminals. Dementsprechend wird der Ordner Test Expert in den Ordner MQL5 kopiert, und zwei Ordner: CustomGeneric und History Manager werden in den Ordner MQL5 kopiert.

Kompilieren Sie die Datei SimpleMA.mq5, die sich im Ordner Experts\Test Expert\New uploading variant befindet:

Es gibt zwei Ordner im Archiv, im MQL5-Ordner - kopieren Sie diese in den MQL5-Ordner Ihres Terminals. Dementsprechend wird der Ordner Test Expert in den Ordner MQL5\Experts kopiert, und zwei Ordner werden in den Ordner MQL\Include kopiert: CustomGeneric und History manager.

Kompilieren Sie die Datei SimpleMA.mq5, die sich im Ordner Experts\Test Expert\New uploading variant befindet:


Wir erhalten 100 Fehler und 60 Warnungen:

Wir erhalten 100 Fehler und 60 Warnungen:


Gehen Sie zum allerersten Fehler und stellen Sie fest, dass es sich nicht um einen geschlossenen Import handelt:

Gehen wir zum allerersten Fehler und stellen fest, dass es sich nicht um einen abgeschlossenen Import handelt:


Danke, ich habe die dem Artikel beigefügten Quellen aktualisiert