Bibliotheken: MultiTester - Seite 40

 
klycko Ergebnisse der Optimierung in eine Excel-Tabelle und in die Optimierungs-Cache-Datei ausgeben?
Siehe Lesen von opt-Dateien.
How to open cache optimization file (.opt), MT5
How to open cache optimization file (.opt), MT5
  • 2020.07.30
  • DDamasceno
  • www.mql5.com
Hi, Is there a way to open Metatrader 5 optimization cache file (folder -> tester/cache/) with another software and export the data in...
 
klycko Optimierungsergebnissen in ein Excel-Tabellenblatt

Lesen Sie über die Arbeit mit Frames.

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Функции для организации собственной обработки результатов оптимизации в тестере стратегий. Могут вызываться при оптимизации в агентах тестирования...
 
Guten Tag!

Mit der Hilfe von TesterCache, MultiTester, TypeToBytes Bibliotheken.
Ich habe ein Optimierungsprogramm entwickelt, aber es gibt einen unüberwindbaren Fehler darin.

Ich habe ihn lokalisiert:
Nach dem Ausführen der Prozedur Run(Contr);
Die folgenden Zeilen versuchen, die besten Parameter aus dem Cache zu lesen, die bei diesem Run-Lauf gefunden wurden.
Und dann werden diese Parameter gedruckt und das Skript stoppt.

Hier ist dieser Code:

inNum=0;

Run(Contr); // Optimierung mit den Werten des ausgewählten Parameters durchführen

prWrite = MTTESTER::SetSettings2(Sohran); // Wiederherstellung der gespeicherten Einstellungen für den Roboter
prRead = MTTESTER::GetSettings(Contr); // Lesen der Robotereinstellungen, um sie zu kontrollieren
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);

if(prRead && TypPar == 0) // Optimierungs-Cache für Doppel-Parameter lesen

{ // Einlesen der entsprechenden optimierten Eingabeparameter


int GLOC = MTTESTER::GetLastOptCache(Bytess);

Print("GLOC = ",GLOC);


const int Size = Cache.GetInputs(inNum,Paramas);
Print(Cache[inNum].ToString()); // Statistik des angeforderten Datensatzes drucken
Print(Cache.Header.ToString()); // Druckt die Hauptdaten des optimierten Cache
Print("Paramas\n");
ArrayPrint(Paramas); // Die optimierten Eingabeparameter drucken
Print(Cache[GetMaxProfitPos(Cache)].ToString()); // Statistik des Datensatzes mit maximalem Gewinn drucken

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Maximaler Gewinn
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Nummer des Durchgangs mit maximalem Gewinn
int IndexMaxProfit = GetMaxProfitPos(Cache); // Array-Index mit dem Parameterwert
Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // Der Wert des Parameters, bei dem der maximale Gewinn erreicht wird

Alert("ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);
zurückgeben;



Die gefundenen und ausgedruckten Parameter entsprechen jedoch einer früheren opt-Datei und nicht derjenigen, die durch die Ausführung von !!!! erhalten wurde.
Vielleicht greife ich auf Cache.GetInputs(inNum,Paramas) falsch zu?

Die Run-Prozedur selbst hat gut funktioniert, wie aus den vorherigen Ausdrucken im Protokoll hervorgeht.

Warum ist es trotzdem nicht möglich, neue Daten aus dem Cache zu holen?

Ich danke Ihnen im Voraus für jeden Ratschlag.

Mit freundlichen Grüßen, Alexander
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess);
Sie haben die opt-Datei in einem Byte-Array erhalten. Als nächstes müssen Sie es in den Cache einspeisen.

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

Bibliotheken: TesterCache

fxsaber, 2019.11.11 04:45 pm.

void OnStart()
{
  uchar Bytes[];
  
  MTTESTER::GetLastOptCache(Bytes);
  
  TESTERCACHE<ExpTradeSummary> Cache;

  if (Cache.Load(Bytes)) // Lesen Sie den Optimierungscache.
  {
 
fxsaber #:
Sie haben eine opt-Datei in einem Byte-Array erhalten. Als nächstes müssen Sie sie in den Cache einspeisen.

Ich habe es wie von Ihnen beschrieben korrigiert:


string Sohran,Contr;

MTTESTER::GetSettings(Sohran); // Die aktuellen Anfangseinstellungen des Roboters werden gelesen und in Sohran zwischengespeichert.

prWrite = MTTESTER::SetSettings2(Odinar); // Odinar auf Robotereinstellungen setzen

prRead = MTTESTER::GetSettings(Contr); // Lesen der soeben gesetzten Robotereinstellungen.

Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);

Print("SettingBeg OdinarContr ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);


Run(Contr[0]); // Optimierung mit den Werten des ausgewählten Y-Parameters durchführen

int GLOC = MTTESTER::GetLastOptCache(Bytess); // Opt-Datei in Bytess Byte-Array holen

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytess); // Einspeisen des Bytess-Byte-Arrays in den Cache

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Maximaler Gewinn

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Nummer des Durchgangs mit maximalem Gewinn

int IndexMaxProfit = GetMaxProfitPos(Cache); // Index des Arrays mit dem Wert des Parameters https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // Der Wert des Parameters, bei dem der maximale Gewinn erreicht wurde


Alert("CL=",CL," GLOC = ",GLOC," GLOC," ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber);

zurückgeben;



Das Ergebnis ist immer noch falsch.

Aus irgendeinem Grund werden ProfitNow und ParamMax Daten aus einem früheren Lauf aus dem Cache gelesen.

Mit freundlichen Grüßen, Alexander

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
Dateien:
 
klycko #:

Aus irgendeinem Grund werden die ProfitNow- und ParamMax-Daten aus einem früheren Lauf aus dem Cache gelesen.

Zeigt dieses Skript nach der Optimierung korrekte Werte an?

Wenn ja, dann liegt das Problem höchstwahrscheinlich darin, dass die opt-Datei nicht sofort nach der Optimierung fertig ist. Sie können versuchen, Sleep nach Run zu setzen. Oder Run funktioniert nicht richtig.

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
fxsaber #:

Zeigt dieses Skript nach der Optimierung die richtigen Werte an?

Wenn ja, liegt das Problem höchstwahrscheinlich darin, dass die opt-Datei nicht sofort nach der Optimierung fertig ist. Sie können versuchen, Sleep nach Run zu setzen. Oder Run funktioniert nicht richtig.

Vielen Dank! Ich werde das alles morgen überprüfen.

Aber jetzt habe ich herausgefunden, dass, wenn ich die Optimierung mit einem neuen Parameter einstelle, alles richtig funktioniert.

Es scheint mir also so zu sein, dass das Prüfgerät, wenn man eine Optimierung, die schon vorher funktioniert hat, neu einstellt, diese nicht wirklich neu verarbeitet, sondern nur das vorherige Ergebnis aus dem Speicher abruft.

Könnte man nicht etwas erfinden, um diesen Speicher des Testers vorher zu löschen?

 
klycko #:

Es scheint mir also, dass der Sinn des Ganzen darin besteht, dass das Prüfgerät, wenn Sie eine bereits laufende Optimierung erneut einstellen, diese nicht tatsächlich erneut bearbeitet, sondern lediglich das frühere Ergebnis aus dem Speicher abruft.

Ihre Hypothesen sind falsch. Das Problem liegt in dem Code, den Sie geschrieben haben.

 
fxsaber #:

Ihre Hypothesen sind falsch. Das Problem ist der Code, den Sie geschrieben haben.

Guten Tag!


Ich stimme Ihnen zu: "Das Problem liegt in dem Code, den ich geschrieben habe". Der Fehler liegt im Code, und ich weiß noch nicht, wie ich ihn beheben kann.

Ich habe jedoch experimentell herausgefunden, dass, wenn Sie alle opt-Dateien manuell entfernen, bevor Sie Run.

aus dem Ordner "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" entfernen,

dann funktioniert mein Code korrekt und führt eine Optimierung für den ausgewählten Parameter durch.

Wenn dieser Ordner nicht bereinigt wird, führt der Tester keine wiederholten Optimierungen (mit denselben unveränderten Daten) durch, sondern liest aus

bereits vorhandene opt-Datei aus diesem Ordner. Dies ist deutlich zu erkennen, wenn dieselbe Optimierung wiederholt manuell durchgeführt wird.

Es ist zu erkennen, dass die eigentliche Optimierung nur beim ersten Mal durchgeführt wird, und dann nur die opt-Datei aus dem Ordner gelesen wird.

Dieses wiederholte Lesen scheint den Inhalt des Caches nicht zu aktualisieren, und das ist die Ursache für den Fehler in meinem Code.


Das Löschen des besagten Ordners könnte helfen, den Fehler zu beheben. Natürlich ist dies eine schlechte Lösung, und es wäre eleganter, die richtigen Daten im Cache wiederherzustellen.

Aber ich weiß nicht, wie man das macht. Im Moment bleiben die Daten der letzten echten Optimierung im Cache hängen (sie passen nicht zum erneuten Einlesen aus dem Ordner).


Leider kann dieser Ordner nicht mit FolderClean aus dem Skript bereinigt werden, da dies in MQL5 verboten ist.

Er befindet sich außerhalb der "Sandbox" und wird nur vom Strategy Tester gefüllt.


Vielleicht sollten Sie ein externes Add-on mit Hilfe von C++ erstellen und es vom Skript aus ausführen.


Mit freundlichen Grüßen, Alexander

 
Der Vorgang Ausführen funktioniert einwandfrei. Er schreibt die Einstellungen und drückt die Start-Taste. Alles ist normal.