Errores, fallos, preguntas - página 2672

 
fxsaber:

Sólo están los datos en el archivo opt. El formato está disponible.

No quiero leer desde el archivo, ya he hecho lo que quería - nombre de archivo único - MD5 de los parámetros de entrada, así:

string getMD5(const SSaveStruct &inpstr)
{
   const uchar key[1]= {0};
   uchar data[],md5[];
   StructToCharArray(inpstr,data);
   CryptEncode(CRYPT_HASH_MD5, data, key, md5);
   string result = "";
   for(int i = 0; i < ArraySize(md5); i++)
      result += StringFormat("%02x", md5[i]);
   return(result);
}

void SaveInputParam()
{
   SSaveStruct savestruct;
   FillSaveStruct(savestruct);
   string fname = "EA_TST//" + getMD5(savestruct) + ".bin";
   int handle = FileOpen(fname,FILE_WRITE|FILE_COMMON|FILE_BIN);
   FileWriteStruct(handle,savestruct);
}

double OnTester()
{

   if(!IS_OPTIMIZATION)
   {
      SSaveStruct savestruct;
      FillSaveStruct(savestruct);
      Print("fname = " + getMD5(savestruct));
      return(AccountInfoDouble(ACCOUNT_BALANCE));
   }

#define  BADTEST() { srand((int)TimeCurrent()); return (-(rand() % 1000)); }
   if(EA_STOP || TesterStatistics(STAT_TRADES) < EA_MIN_TRADEES)  BADTEST();
   SaveInputParam();
   return(AccountInfoDouble(ACCOUNT_BALANCE));
#undef  BADTEST
}

los archivos se escriben y en una sola pasada veo el nombre del archivo : fname = 04a19580d36f0a749143211b57efbebc

El código es un poco repetitivo, pero para no llenar la estructura del optimizador con parámetros de entrada si la prueba no tiene éxito .... pero probablemente lo reescribiré, no es un código bonito, no entenderé por qué lo hice así )))
 
Igor Makanu:

¿es posible obtener el número de pase del agente probador?


HH: o necesito un identificador único de cada pase durante las pruebas para el nombre del archivo - quiero guardar los ajustes de interés EA durante las pruebas en el archivo, pero necesito algo único para formar un nombre de archivo con los ajustes

El número de pase puede ser de 1024 bits.

¿Por qué necesitas un número de pase cuando ya tienes un conjunto de parámetros en esa línea?

 
Igor Makanu:

No quiero leer del probador del archivo, creo que ya hice lo que quería - nombre de archivo único - MD5 de los parámetros de entrada, sobre esto:

los archivos se escriben y en una sola pasada veo el nombre del archivo : fname = 04a19580d36f0a749143211b57efbebc

El código es un poco repetitivo, pero para no llenar la estructura del optimizador con parámetros de entrada si la prueba no tiene éxito .... pero probablemente lo reescribiré, no es un código bonito, no entenderé por qué lo hice así )))

El MD5 de los parámetros de entrada ya ha sido calculado y se encuentra en el registro de paso en el archivo opt

 
Slava:

¿Por qué necesita un número de pase si ya tiene un conjunto de parámetros en esta línea?

Quiero restablecer los pases exitosos del optimizador inmediatamente al archivo de configuración de EA y cargar automáticamente un archivo .bin en lugar de .set al iniciar EA - es necesario para la operación simultánea de varios CTs

Slava:

El MD5 de los parámetros de entrada ya ha sido calculado y se encuentra en el registro de paso en el archivo opt

He luchado durante casi 3 meses por la velocidad de optimización, creo que lo he conseguido, así que una contrapregunta:

que es más rápido:

1. ¿desde el optimizador para leer el archivo opt con MD5?

2. o calcular con mi código MD5


Sospecho que es más rápido de calcular, sobre todo porque todos los parámetros de entrada se utilizan dentro del código como una matriz de estructuras (optimizo unos 40 parámetros)

 
Igor Makanu:

Quiero restablecer los pases exitosos del optimizador inmediatamente al archivo de configuración de EA y cargar automáticamente un archivo .bin en lugar de .set al iniciar EA - es necesario para la operación simultánea de varios CTs

He luchado durante casi 3 meses por la velocidad de optimización, creo que lo he conseguido, así que una contrapregunta:

que es más rápido:

1. ¿desde el optimizador para leer el archivo opt con MD5?

2. o calcular con mi código MD5


Sospecho que es más rápido de calcular, sobre todo porque todos los parámetros de entrada se utilizan dentro del código como una matriz de estructuras (optimizo unos 40 parámetros).

MD5 es más rápido de calcular.

Si no va a utilizar el archivo opt en el futuro, calcule el MD5

Si vas a utilizarlo, es mejor que uses un MD5 ya calculado, ya que tu cálculo puede no coincidir (y probablemente no lo hará) con el nuestro

 
Slava:

MD5 es más rápido de leer.

Si no tiene intención de utilizar el archivo opt en el futuro, lea MD5

Si vas a usar, es mejor que uses el MD5 ya calculado, ya que tu cálculo puede no coincidir (y lo más probable es que no coincida) con el nuestro

Gracias.

no va a utilizar un archivo opt

SZS: hace un par de semanas buscaba inicializar MathSrand() desde un probadorhttps://www.mql5.com/ru/forum/1111/page2657#comment_15165819

no estaría mal obtener uchar[] con MD5 (bien o cadena) en el agente tester - es un valor único, puede inicializar MathSrand() y aquí quiero nombre de archivo único, dar su MD5 en TesterStatistics()

 
Sergey Dzyublik:
Bug MT5(build 2323), el mismo objeto de plantilla B<int> puede ser creado después de un objeto de clase B<void*>, pero si se hace antes, se produce un error de compilación.
Probablemente la razón sea el trabajo de la caché del generador de clases de plantillas.

Gracias por el post, arreglado

 

¿Cómo se utilizan las macros?

El terror. Un error de compilación.

Pequeño guión:

void OnStart()
  {
   #define  m 1000;
   ulong n_yes=3*m;  //Тут всё хорошо
   ulong n_no=(3*m); //Тут ошибка: ';' - unexpected token	test2.mq5	27	18
  }
La compilación 2361, la más reciente por el momento.
 
Aliaksandr Hryshyn:

¿Cómo se utilizan las macros?

así es como usamos
#define  m 1000;
 
Igor Makanu:
así es como usamos

La diferencia es la presencia de paréntesis.