Librerías: MultiTester - página 40

 
klycko resultados de la optimización en una tabla de Excel y en el archivo caché de optimización?
Véase lectura de archivos opt.
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 resultados de la optimización a una hoja de cálculo Excel

Más información sobre el trabajo con marcos.

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

Con la ayuda de las librerías TesterCache, MultiTester, TypeToBytes.
He desarrollado un programa de optimización, pero tiene algún error insalvable.

Lo he localizado:
Después de ejecutar el procedimiento Run(Contr);
Las siguientes líneas intentan leer los mejores parámetros de la Caché encontrados durante esta ejecución Run.
Y luego estos parámetros se imprimen y el script se detiene.

Este es el código

inNum=0;

Run(Contr); // Ejecutar la optimización sobre los valores del parámetro seleccionado

prWrite = MTTESTER::SetSettings2(Sohran); // Restaurar la configuración guardada en el robot
prRead = MTTESTER::GetSettings(Contr); // Leer los ajustes del robot para controlarlos
Print("prEscribirConfiguración = ",prEscribir," prLeerConfiguración = ",prLeer);
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr);

if(prRead && TypPar == 0) // Leer caché de optimización para parámetro doble

{ // Leer los parámetros de entrada optimizados correspondientes


int GLOC = MTTESTER::GetLastOptCache(Bytess);

Print("GLOC = ",GLOC);


const int Tamaño = Cache.GetInputs(inNum,Paramas);
Print(Cache[inNum].ToString()); // Imprimir estadísticas del registro solicitado
Print(Cache.Header.ToString()); // Imprimir los datos principales de la optimización de la Caché
Print("Paramas\n");
ArrayPrint(Paramas); // Imprimir sus parámetros de entrada optimizados
Print(Cache[GetMaxProfitPos(Cache)].ToString()); // Imprimir las estadísticas del registro con máximo beneficio

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Beneficio máximo
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Número de la pasada con beneficio máximo
int IndexMaxProfit = GetMaxProfitPos(Cache); // Índice de la matriz con el valor del parámetro
Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // El valor del parámetro en el que se alcanza el beneficio máximo

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



¡¡¡¡Sin embargo, los parámetros encontrados e impresos corresponden a algún fichero opt anterior, no al obtenido al ejecutar Run !!!!
¿Quizás estoy accediendo a Cache.GetInputs(inNum,Paramas) incorrectamente?

El procedimiento Run en sí funcionó bien, se deduce de las impresiones de registro anteriores.

¿Por qué sigue sin ser posible obtener datos frescos de Cache?

Gracias de antemano por cualquier consejo.

Saludos, Alexander
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess);
Ha recibido el archivo opt en una matriz de bytes. A continuación, debe introducirlo en la caché.

Foro sobre trading, sistemas automatizados de trading y testeo de estrategias de trading.

Librerías: TesterCache

fxsaber, 2019.11.11 04:45 pm.

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

  if (Cache.Load(Bytes)) // Leer la caché de optimización.
  {
 
fxsaber #:
Ha recibido un fichero opt en una matriz de bytes. A continuación, debe introducirlo en Caché.

Lo he corregido como has dicho


string Sohran,Contr;

MTTESTER::GetSettings(Sohran); // Se leen los ajustes iniciales actuales del robot para guardarlos temporalmente en Sohran.

prWrite = MTTESTER::SetSettings2(Odinar); // Configura Odinar a los ajustes del robot

prRead = MTTESTER::GetSettings(Contr); // Leer los ajustes del robot que se acaban de establecer.

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

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


Run(Contr[0]); // Ejecuta la optimización sobre los valores del parámetro Y seleccionado

int GLOC = MTTESTER::GetLastOptCache(Bytess); // Obtener el archivo opt en la matriz de bytes Bytess

TESTERCACHE<ExpTradeSummary> Caché;

bool CL = Cache.Load(Bytess); // Introducir la matriz de bytes Bytess en Cache

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Beneficio máximo

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Número de la pasada con beneficio máximo

int IndexMaxProfit = GetMaxProfitPos(Cache); // Índice de la matriz con el valor del parámetro https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // Valor del parámetro en el que se ha alcanzado el beneficio máximo


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

devolver;



El resultado sigue siendo erróneo.

Por alguna razón los datos ProfitNow y ParamMax de alguna ejecución anterior se leen de la caché.

Saludos, Alexander

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

Por alguna razón, los datos de ProfitNow y ParamMax de alguna ejecución anterior se leen de la caché.

¿Muestra este script los valores correctos después de la optimización?

Si es así, el problema es que el archivo opt no está listo justo después de la optimización. Puede intentar poner Sleep después de Run. O Run no funciona correctamente.

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

¿Muestra este script los valores correctos tras la optimización?

Si es así, lo más probable es que el archivo opt no esté listo justo después de la optimización. Puede intentar poner Sleep después de Run. O Run no funciona correctamente.

Gracias. Voy a comprobar todo esto mañana.

Pero ahora he descubierto que si configuro la optimización con un nuevo parámetro, todo funciona correctamente.

Así que me parece que la cuestión es que el comprobador, si vuelve a configurar una optimización que ya funcionaba antes, en realidad no la procesa de nuevo, sino que sólo recupera el resultado anterior de la memoria.

¿No se podría inventar algo para destruir de antemano esta memoria del comprobador?

 
klycko #:

Así que me parece que la cuestión es que el comprobador, si vuelve a ajustar una optimización ejecutada previamente, en realidad no la procesa de nuevo, sino que simplemente recupera el resultado anterior de la memoria.

Tus hipótesis son erróneas. El problema está en el código que has escrito.

 
fxsaber #:

Tus hipótesis son erróneas. El problema es el código que has escrito.

Buenas tardes.


Estoy de acuerdo contigo en que "El problema está en el código que escribí". El error está en él, y aún no sé cómo solucionarlo.

Sin embargo, he comprobado experimentalmente que si eliminas manualmente todos los archivos opt antes de ejecutar Run.

de la carpeta "C:\sers\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

entonces mi código funciona correctamente y realiza la optimización en el parámetro seleccionado.

Si no se limpia esta carpeta, el Probador no realiza optimizaciones repetidas (con los mismos datos sin modificar), sino que lee de esta carpeta

archivo opt ya existente de esta carpeta. Esto puede verse claramente cuando se ejecuta repetidamente la misma optimización de forma manual.

Puede verse que la optimización real sólo se realiza la primera vez, y entonces sólo lee el archivo opt de la carpeta.

Esta lectura repetida no parece actualizar el contenido de la caché, y esto es lo que está causando el error en mi código.


Borrar dicha carpeta podría ayudar a resolver el error. Por supuesto, esta es una mala solución, y sería más elegante poder restaurar los datos correctos en la caché.

Pero no sé cómo hacerlo. Por ahora, los datos de la optimización real anterior están colgados en la caché (no coinciden con la relectura de la carpeta).


Desafortunadamente, esta carpeta no se puede limpiar desde el script usando FolderClean, porque está prohibido en MQL5.

Está fuera de la "caja de arena" y se llena sólo por el Probador de Estrategias.


Tal vez deberías crear algún complemento externo mediante C++ y ejecutarlo desde el script.


Saludos, Alexander

 
El procedimiento Ejecutar funciona perfectamente. Escribe Settings y pulsa el botón Start. Todo es normal.