Che diavolo sta succedendo? - pagina 6

 
Сергей Таболин:

Se fai diverse ottimizzazioni, con gli stessi parametri dell'EA, i risultati delle diverse ottimizzazioni coincidono? se lo fanno, allora il problema è nella differenza tra l'ottimizzatore e il singolo passaggio. se non lo fanno - allora il problema è sicuramente nel codice dell'EA.

 

Lasciatemi spiegare - la scrittura di tendenza qui nel :

if (condition) {

} else if (!condition) {

}

presumibilmente aumentando la leggibilità e la comprensione del codice, è in realtà un male

e in più bisogna lavorare molto, molto attentamente con il doppio

 
Andrey Dik:

Pensate che una variabile globale EA conservi il suo valore dalle passate esecuzioni dell'ottimizzatore e venga riportata a quelle successive?

Sì, è più o meno così. Stavo cercando di farlo.

Solo che non era solo una variabile globale, ma un membro statico della classe o una variabile terminale o qualcos'altro.


Inoltre, un singolo test subito dopo il lancio del terminale e uno ripetuto sullo stesso agente possono essere diversi. Per la stessa ragione.

Tutto sommato, è necessario inizializzare tutto e tenerlo sotto controllo scrupolosamente.


ps: no, questo mi ricorda. Ero a posto con l'inizializzazione, era una delle build che inizializzava la statica in modo glitch. L'ho riparato prontamente.

 
Andrey Dik:

qualsiasi trasferimento del contenuto della variabile EA da una corsa all'altra deve essere considerato come un bug del tester, anche se riguarda le variabili globali del terminale.

Se ci sono diverse copie di un EA in esecuzione sui grafici in tempo reale, l'utente utilizza un mage o altri modi di identificazione, e il processo di ottimizzazione implica corse multiple e indipendenti l'una dall'altra di un EA con lo stesso mage, se non è così, allora non solo è sbagliato dal punto di vista ideologico di ottimizzazione, ma apre la possibilità di influenzare l'ottimizzazione e abusare dei prodotti del mercato ingannando l'acquirente.

Aspettando il rapporto di TC sugli accordi non potati, intriga comunque.

Non è impostato per un santo ladro.

Il punto, come sempre, è semplice - l'EA non viene scaricato per ottimizzare più velocemente. I file EX possono essere grandi.

 

Solo oggi ho avuto il tempo di affrontare il problema. Ho deciso di iniziare in piccolo. Una cosa alla volta. Compreso il controllo dei file aperti. Il codice è il seguente:

      int      h     = FileOpen(filename, FILE_BIN|FILE_READ|FILE_COMMON);
      if(h == INVALID_HANDLE)
      {
         Print("Ошибка открытия файла обученной сети по индикатору >>> ",name);
         writeErrorFile(program_name,program_version,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name);
         writeOptTestFile(file_Opt_Tst,"======= "+IntegerToString(bars_count-1)+" === Ошибка открытия файла обученной сети по индикатору >>> "+name+"\n");
         FileClose(h);
         return(TRADESIGNAL_NO);
      }

Ho eseguito l'ottimizzazione e poi un singolo test. Come risultato, ho ottenuto due file:

1_100_100_300_300_.opt
1_100_100_300_300_.tst

Ho aperto questi due file nel programma WinMerge. E questo è quello che ho visto lì

C'è un problema con l'apertura dei file nell'ottimizzatore. Notate che non c'è questo errore nel tester!

 
Сергей Таболин:

C'è un problema con l' ottimizzatore che apre i file. Notate che non c'è questo errore nel tester!

Più core aprono il file allo stesso tempo. Uno si apre, il resto si incasina.
Serve del codice con attesa, o almeno il flag FILE_SHARE_READ

 

Se voi:

  • stanno accedendo allo stesso file da un EA nell'area comune
  • ottenere errori di accesso
  • non proteggono dall'accesso condiviso da più processi paralleli, non cercano di ripetere con un timeout
Poi, naturalmente, si otterrà la differenza tra l'ottimizzatore e il passaggio singolo. Questo è un errore logico.
 
Andrey Khatimlianskii:

Più core aprono il file allo stesso tempo. Uno si apre, gli altri rimangono fregati.
Ho bisogno di codice con attesa, o almeno con il flag FILE_SHARE_READ

Beh, non ho scritto il codice specificamente per l'ottimizzatore. Ci si aspettava che l'ottimizzatore fosse già consapevole di queste sfumature. Cercherò di aggiungere una bandiera, non peggiorerà la situazione. )))

Renat Fatkhullin:

Se voi:

  • stanno accedendo allo stesso file nella zona comune da un Expert Advisor
  • ottenere errori di accesso
  • non proteggono da accessi multipli simultanei, non cercano di ripeterli con timeout.
Poi, naturalmente, si otterrà la differenza tra l'ottimizzatore e il passaggio singolo. Questo è un errore logico.

  1. Sto includendo la zona di commit solo per la comodità di trovare i file.
  2. ....
  3. Non ho alcun accesso condiviso. Questi file sono accessibili solo da un EA.
 

Dato che non c'è ancora codice, le condizioni di test non sono descritte in alcun modo, e stai facendo affermazioni chiaramente errate, allora occupatene tu stesso.

Se non puoi nemmeno aprire i file, significa che ci sono molti problemi in Expert Advisor.

Avete anche nascosto i nomi di questi file.

 
Renat Fatkhullin:

Dato che non c'è ancora codice, le condizioni di test non sono descritte in alcun modo, e stai facendo affermazioni chiaramente errate, allora occupatene tu stesso.

Se non puoi nemmeno aprire i file, significa che ci sono molti problemi in Expert Advisor.

Avete anche nascosto questi nomi di file.

Non c'è codice perché l'aggiunta del palloncino ha davvero risolto il problema. Ora i risultati dell'ottimizzazione e le corse singole sono completamente coerenti.

È solo che prima non usavo quasi mai i file negli EA (almeno tutte le scritture/letture durante l'ottimizzazione/test erano disabilitate), ma pensavo che l'ottimizzatore avesse risolto il problema dell'accesso da un singolo EA.

Motivazione: