Errori, bug, domande - pagina 2672

 
fxsaber:

Ci sono solo i dati nel file opt. Il formato è disponibile.

Non voglio leggere da un file, ho già fatto quello che volevo - nome unico del file - parametri di input MD5, come questo:

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
}

i file vengono scritti e in un solo passaggio vedo il nome del file: fname = 04a19580d36f0a749143211b57efbebc

è un po' ripetitivo, ma per non riempire la struttura dell'ottimizzatore con parametri di input se il test non ha successo .... ma probabilmente lo riscriverò, non è un bel codice, non capirò perché l'ho fatto in quel modo )))
 
Igor Makanu:

è possibile ottenere il numero di pass dall'agente tester?


HH: o bisogno di un identificatore unico da ogni passaggio durante il test per il nome del file - voglio salvare le impostazioni di interesse EA durante il test nel file, ma bisogno di qualcosa di unico per formare un nome di file con le impostazioni

Il numero di pass può essere di 1024-bit.

Perché avete bisogno di un numero di passaggio quando avete già una serie di parametri su quella linea?

 
Igor Makanu:

Non voglio leggere dal tester dal file, penso di aver già fatto quello che volevo - nome unico del file - MD5 dei parametri di input, circa questo:

i file vengono scritti e in un solo passaggio vedo il nome del file: fname = 04a19580d36f0a749143211b57efbebc

è un po' ripetitivo, ma per non riempire la struttura dell'ottimizzatore con parametri di input se il test non ha successo .... ma probabilmente lo riscriverò, non è un bel codice, non capirò perché l'ho fatto in quel modo )))

L'MD5 dei parametri di ingresso è già stato calcolato ed è nel record di passaggio nel file opt

 
Slava:

Perché avete bisogno di un numero di passaggio se avete già una serie di parametri in questa linea?

Voglio resettare immediatamente i passaggi di successo dell'ottimizzatore al file delle impostazioni EA e caricare automaticamente un file .bin invece di .set quando si avvia EA - è necessario per il funzionamento simultaneo di diversi TC

Slava:

L'MD5 dei parametri di ingresso è già stato calcolato ed è nel record di passaggio nel file opt

Ho lottato per quasi 3 mesi per la velocità di ottimizzazione, penso di averla raggiunta, quindi una contro domanda:

che è più veloce:

1. dall'ottimizzatore per leggere opt-file con MD5 ?

2. o calcolare con il mio codice MD5


Ho il sospetto che sia più veloce da calcolare, soprattutto perché tutti i parametri di input sono utilizzati all'interno del codice come un array di strutture (ottimizzo circa 40 parametri)

 
Igor Makanu:

Voglio resettare immediatamente i passaggi di successo dell'ottimizzatore al file delle impostazioni EA e caricare automaticamente un file .bin invece di .set quando si avvia EA - è necessario per il funzionamento simultaneo di diversi TC

Ho lottato per quasi 3 mesi per la velocità di ottimizzazione, penso di averla raggiunta, quindi una contro domanda:

che è più veloce:

1. dall'ottimizzatore per leggere opt-file con MD5 ?

2. o calcolare con il mio codice MD5


Ho il sospetto che sia più veloce da calcolare, soprattutto perché tutti i parametri di input sono utilizzati all'interno del codice come un array di strutture (ottimizzo circa 40 parametri).

MD5 è più veloce da calcolare.

Se non hai intenzione di usare il file opt in futuro, calcola MD5

Se avete intenzione di usarlo, è meglio usare un MD5 già calcolato, poiché il vostro calcolo potrebbe non corrispondere (e probabilmente non lo farà) al nostro

 
Slava:

MD5 è più veloce da leggere.

Se non intendete usare il file opt in futuro, leggete MD5

Se hai intenzione di usare, è meglio usare MD5 già calcolato, poiché il tuo calcolo potrebbe non corrispondere (e molto probabilmente non lo farà) al nostro

Grazie!

non usare un file opt

SZS: un paio di settimane fa stavo cercando di inizializzare MathSrand() da un testerhttps://www.mql5.com/ru/forum/1111/page2657#comment_15165819

non sarebbe male ottenere uchar[] con MD5 (bene o stringa) nel tester agent - è un valore unico, potete inizializzare MathSrand() e qui voglio un nome di file unico, date il vostro MD5 in TesterStatistics()

 
Sergey Dzyublik:
Bug MT5(build 2323), lo stesso oggetto template B<int> può essere creato dopo l'oggetto di classe B<void*>, ma se fatto prima, si verifica un errore di compilazione.
Probabilmente la ragione è il lavoro della cache del generatore di classi template.

Grazie per il post, risolto

 

Come si usano le macro?

Orrore. Un errore di compilazione.

Piccolo script:

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

Come si usano le macro?

è così che usiamo
#define  m 1000;
 
Igor Makanu:
questo è il modo in cui usiamo

La differenza è la presenza di parentesi.