Erros, bugs, perguntas - página 2672

 
fxsaber:

Existem apenas os dados no ficheiro opt. O formato está disponível.

Não quero ler a partir de um ficheiro, já fiz o que queria - nome de ficheiro único - parâmetros de entrada MD5, como este:

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
}

os ficheiros são escritos e num único passe vejo o nome do ficheiro : fname = 04a19580d36f0a749143211b57efbebc

código é um pouco repetitivo, mas para não preencher a estrutura do optimizador com parâmetros de entrada se o teste não for bem sucedido .... mas provavelmente vou reescrevê-lo, não é um código agradável, não vou entender porque o fiz dessa maneira ))))
 
Igor Makanu:

é possível obter o número de passe do agente testador?


HH: ou preciso de um identificador único de cada passe durante os testes para o nome do ficheiro - quero guardar as definições de interesse EA durante os testes no ficheiro, mas preciso de algo único para formar um nome de ficheiro com as definições

O número de passe pode ser de 1024 bits.

Porque precisa de um número de passe quando já tem um conjunto de parâmetros nessa linha?

 
Igor Makanu:

Não quero ler do testador do ficheiro, penso que já fiz o que queria - nome de ficheiro único - MD5 dos parâmetros de entrada, sobre isto:

os ficheiros são escritos e num único passe vejo o nome do ficheiro : fname = 04a19580d36f0a749143211b57efbebc

código é um pouco repetitivo, mas para não preencher a estrutura do optimizador com parâmetros de entrada se o teste não for bem sucedido .... mas provavelmente vou reescrevê-lo, não é um código agradável, não vou entender porque o fiz dessa forma ))))

O MD5 dos parâmetros de entrada já foi calculado e está no registo de aprovação no ficheiro opt

 
Slava:

Porque precisa de um número de passe se já tem um conjunto de parâmetros nesta linha?

Quero reiniciar o optimizador bem sucedido passa imediatamente para o ficheiro de definições EA e carrega automaticamente um ficheiro .bin em vez de .set ao iniciar a EA - é necessário para a operação simultânea de vários TCs

Slava:

O MD5 dos parâmetros de entrada já foi calculado e está no registo de aprovação no ficheiro opt-file

Lutei durante quase 3 meses pela velocidade da optimização, penso que a consegui, por isso uma contra pergunta:

o que é mais rápido:

1. do optimizador para ler ficheiros opt-file com MD5 ?

2. ou calcular com o meu código MD5


Suspeito que é mais rápido de calcular, especialmente porque todos os parâmetros de entrada são utilizados dentro do código como um conjunto de estruturas (optimizo cerca de 40 parâmetros)

 
Igor Makanu:

Quero reiniciar o optimizador bem sucedido passa imediatamente para o ficheiro de definições EA e carrega automaticamente um ficheiro .bin em vez de .set ao iniciar a EA - é necessário para a operação simultânea de vários TCs

Lutei durante quase 3 meses pela velocidade da optimização, penso que a consegui, por isso uma contra pergunta:

o que é mais rápido:

1. do optimizador para ler ficheiros opt-file com MD5 ?

2. ou calcular com o meu código MD5


Suspeito que é mais rápido de calcular, especialmente porque todos os parâmetros de entrada são utilizados dentro do código como um conjunto de estruturas (optimizo cerca de 40 parâmetros).

O MD5 é mais rápido de calcular.

Se não vai utilizar o ficheiro opt-file no futuro, calcule MD5

Se o vai utilizar, é melhor utilizar um MD5 já calculado, pois o seu cálculo pode não corresponder (e provavelmente não corresponderá) ao nosso

 
Slava:

MD5 é mais rápido de ler.

Se não pretende utilizar o ficheiro opt-file no futuro, leia MD5

Se vai utilizar, é melhor utilizar MD5 já calculado, pois o seu cálculo pode não coincidir (e muito provavelmente não coincidirá) com o nosso

Obrigado!

não vai utilizar um ficheiro opt-file

SZS: há um par de semanas atrás eu estava a tentar inicializar MathSrand() de um testadorhttps://www.mql5.com/ru/forum/1111/page2657#comment_15165819

não seria mau obter uchar[] com MD5 (poço ou string) em tester agent - é um valor único, pode inicializar MathSrand() e aqui quero um nome de ficheiro único, dê o seu MD5 em TesterStatistics()

 
Sergey Dzyublik:
Bug MT5(build 2323), o mesmo objecto modelo B<int> pode ser criado após objecto da classe B<void*>, mas se for feito antes, ocorre um erro de compilação.
Provavelmente, a causa está na cache do gerador da classe modelo.

Obrigado pelo correio, fixado

 

Como se utilizam as macros?

Terrível. Um erro de tempo de compilação.

Pequeno guião:

void OnStart()
  {
   #define  m 1000;
   ulong n_yes=3*m;  //Тут всё хорошо
   ulong n_no=(3*m); //Тут ошибка: ';' - unexpected token	test2.mq5	27	18
  }
Construir 2361, o mais tardar no momento.
 
Aliaksandr Hryshyn:

Como se utilizam as macros?

é assim que usamos
#define  m 1000;
 
Igor Makanu:
é assim que usamos

A diferença é a presença de parênteses.