Librerie: MultiTester - pagina 41

 
Neanche la sospensione per 10 secondi aiuta. Solo la cancellazione della cartella risolve il problema.
 
klycko sospensione per 10 secondi aiuta. Solo la cancellazione della cartella risolve il problema.

Pubblicare il codice per l'ottimizzazione di MQL5\Experts\Examples\MACD\MACD Sample.mq5. Poi si può provare a riprodurre il problema. Non c'è quasi nessun lavoro costruttivo ora.

 
fxsaber #:

Caricare il codice per l'ottimizzazione di MQL5\Experts\Examples\MACD\MACD Sample.mq5. Poi si può provare a riprodurlo. Non c'è quasi nessun lavoro costruttivo ora.

Grazie! Cercherò di preparare i file e di pubblicarli. Al momento è ancora tutto in disordine.

 
fxsaber #:

Caricare il codice per l'ottimizzazione di MQL5\Experts\Examples\MACD\MACD Sample.mq5. Poi si può provare a riprodurlo. Non c'è quasi nessun lavoro costruttivo ora.

Buon pomeriggio!

Ho preparato i file e li ho allegati.

Ottimizzazione dal 25.03 al 20.05.2024 sul timeframe M1.

Deposito 17000. Leva 40. Massimo del criterio complesso.


Per prima cosa è necessario pulire la cartella "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" per la purezza dell'esperimento.

Lo script Nocturne deve essere eseguito con un parametro alla volta per ottimizzarlo.

Quindi viene emesso:

Per il primo parametro: ProfitNow -1478 ParamMax 0,37 per la prima volta.

Per il secondo parametro: ProfitNow -379 ParamMax 30 per la prima volta.

Per il terzo parametro: ProfitNow -379 ParamMax 6 per la prima volta.


Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente.

Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente

Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente.


Questo mostra il blocco della cache dei dati sul terzo parametro.


Ora dobbiamo cancellare di nuovo la cartella "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache".

E poi si ripete:


Per il primo parametro: ProfitNow -1478 ParamMax 0,37 per la prima volta.

Per il secondo parametro: ProfitNow -379 ParamMax 30 per la prima volta.

Per il terzo parametro: ProfitNow -379 ParamMax 6 per la prima volta.


Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente.

Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente

Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente


Le righe 151-154 dello script Nocturne dicono tutto come mi avete indicato:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Ottenere il file opt in un array di byte Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // Alimenta l'array di byte Bytes nella Cache


Il bug è, ovviamente, nel codice che ho scritto, ma non so ancora come risolverlo.

Tuttavia, ho scoperto sperimentalmente che se si rimuovono manualmente tutti i file opt dalla cartella "C:\ bytes" prima di eseguire Run.

dalla cartella "C:\sers\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

allora il mio codice funziona correttamente ed esegue l'ottimizzazione sul parametro selezionato.


Se questa cartella non viene ripulita, il Tester non esegue ottimizzazioni ripetute (con gli stessi dati invariati), ma legge

file opt già esistente da questa cartella. Ciò è chiaramente visibile quando si esegue ripetutamente la stessa ottimizzazione manualmente.

Si può notare che l'ottimizzazione vera e propria viene eseguita solo la prima volta e poi legge solo il file opt dalla cartella.

Questa lettura ripetuta non sembra aggiornare il contenuto della cache e questo è ciò che causa l'errore nel mio codice.


La cancellazione della cartella potrebbe aiutare a risolvere l'errore. Naturalmente, questa è una cattiva soluzione e sarebbe più elegante poter ripristinare i dati giusti nella cache.

Ma non so come fare. Per ora, i dati della precedente ottimizzazione reale rimangono nella cache (non corrispondono alla rilettura della cartella).

Purtroppo questa cartella non può essere pulita dallo script con FolderClean, perché è vietata in MQL5.

è fuori dalla "sandbox" e viene riempita solo dallo Strategy Tester.


Forse si dovrebbe creare un componente aggiuntivo esterno tramite C++ ed eseguirlo dallo script.


Saluti, Alexander

File:
 

Errore nel testo:



Buon pomeriggio!

Ho preparato i file e li ho allegati.

Ottimizzazione dal 25.03 al 20.05.2024 sul timeframe M1.

Deposito 17000. Leva 40. Massimo del criterio complesso.


Per prima cosa è necessario pulire la cartella "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache" per la purezza dell'esperimento.

Lo script Nocturne deve essere eseguito con un parametro alla volta per ottimizzarlo.

Quindi viene prodotto:

Per il primo parametro: ProfitNow -1478 ParamMax 0,37 per la prima volta.

Per il secondo parametro: ProfitNow -379 ParamMax 30 per la prima volta.

Per il terzo parametro: ProfitNow -379 ParamMax 6 per la prima volta.


Per il primo parametro: ProfitNow -379 ParamMax 6 ripetutamente.

Per il secondo parametro: ProfitNow -379 ParamMax 6 ripetutamente

Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente.


Questo mostra il blocco della cache dei dati per il terzo parametro.


Ora dobbiamo cancellare di nuovo la cartella "C:\Users\ASUS\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache".

E poi si ripete:


Per il primo parametro: ProfitNow -1478 ParamMax 0,37 per la prima volta.

Per il secondo parametro: ProfitNow -379 ParamMax 30 per la prima volta.

Per il terzo parametro: ProfitNow -379 ParamMax 6 per la prima volta.


Per il primo parametro: ProfitNow -379 ParamMax 6 ripetutamente.

Per il secondo parametro: ProfitNow -379 ParamMax 6 ripetutamente

Per il terzo parametro: ProfitNow -379 ParamMax 6 ripetutamente.


Le righe 151-154 dello script Nocturne dicono tutto come mi avete indicato:

Run(Odinar);

int GLOC = MTTESTER::GetLastOptCache(Bytes); // Ottiene il file opt in un array di byte Bytes

TESTERCACHE<ExpTradeSummary> Cache;

bool CL = Cache.Load(Bytes); // Alimenta l'array di byte Bytes nella Cache


Il bug è, ovviamente, nel codice che ho scritto, ma non so ancora come risolverlo.

Tuttavia, ho scoperto sperimentalmente che se si rimuovono manualmente tutti i file opt dalla cartella "C:\ bytes" prima di eseguire Run.

dalla cartella "C:\sers\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

allora il mio codice funziona correttamente ed esegue l'ottimizzazione sul parametro selezionato.


Se questa cartella non viene ripulita, il Tester non esegue ottimizzazioni ripetute (con gli stessi dati invariati), ma legge

file opt già esistente da questa cartella. Ciò è chiaramente visibile quando si esegue ripetutamente la stessa ottimizzazione manualmente.

Si può notare che l'ottimizzazione vera e propria viene eseguita solo la prima volta e poi legge solo il file opt dalla cartella.

Questa lettura ripetuta non sembra aggiornare il contenuto della cache e questo è ciò che causa l'errore nel mio codice.


La cancellazione della cartella potrebbe aiutare a risolvere l'errore. Naturalmente, questa è una cattiva soluzione e sarebbe più elegante poter ripristinare i dati giusti nella cache.

Ma non so come fare. Per ora, i dati della precedente ottimizzazione reale rimangono nella cache (non corrispondono alla rilettura della cartella).

Purtroppo questa cartella non può essere pulita dallo script con FolderClean, perché è vietata in MQL5.

è fuori dalla "sandbox" e viene riempita solo dallo Strategy Tester.


Forse si dovrebbe creare un componente aggiuntivo esterno tramite C++ ed eseguirlo dallo script.


Saluti, Alexander

 

Ho postato il mio robot per l'ottimizzazione, dato che Nocturne è orientato sul suo elenco di parametri.

Ma per MQL5\Experts\Examples\MACD\MACD Sample.mq5 ha bisogno di molte modifiche.


A proposito, perché è necessario il parametro di input int inNum = 0?

O è solo un atavismo?

 
fxsaber #:

Caricare il codice per l'ottimizzazione di MQL5\Experts\Examples\MACD\MACD Sample.mq5. Poi si può provare a riprodurlo. Non c'è quasi nessun lavoro costruttivo ora.

Buon pomeriggio!

Sono riuscito a risolvere tutti i miei problemi grazie all'aiuto di Alexander Slavsky: https://www.mql5.com/it/users/s22aa.

Mi ha inviato il codice per cancellare il contenuto della Cache.

Non ho potuto pulire direttamente la Cache, perché è fuori dalla sandbox.

Forse sarà utile a qualcuno prima di eseguire la procedura Run, in modo che i risultati delle ottimizzazioni passate non interferiscano con quelle nuove.

Allego questo script.

Le vostre librerie e questa procedura di pulizia mi hanno permesso di ottimizzare il robot in modo coerente.

Vi ringrazio molto per questi codici e per il vostro aiuto.

Distinti saluti, Alexander

Aleksandr Slavskii
Aleksandr Slavskii
  • 2024.05.27
  • www.mql5.com
Профиль трейдера
File:
 
klycko ottimizzazioni ripetute (con gli stessi dati invariati), ma le legge

file opt già esistenti da questa cartella. Ciò è chiaramente visibile quando si esegue ripetutamente la stessa ottimizzazione manualmente.

Si può notare che l'ottimizzazione vera e propria viene eseguita solo la prima volta e poi legge solo il file opt dalla cartella.

Questa lettura ripetuta non sembra aggiornare il contenuto della cache e questo è ciò che causa l'errore nel mio codice.

sinput uint Range = 2;

void OnTesterInit( void )
{
  ::MathSrand((int)::TimeLocal());

  const int Start = ::MathRand();
  const int Step = ::MathRand();

  const uint TmpRange = (::Range < 2) ? 2 : ::Range;

  ::ParameterSetRange("Range", true, TmpRange, Start, Step, Start + (TmpRange - 1) * Step);
}
 
klycko #:

per cancellare il contenuto della cache.

In MTTester.mqh c'è una funzione molto richiesta quando si fanno molte esecuzioni singole.

  static bool DeleteLastTST( void )
  {
    const string Path = ::TerminalInfoString(TERMINAL_DATA_PATH)+ "\\Tester\\cache\\";
    string FileNames[];

    const int Size = MTTESTER::GetFileNames(Path, "*.tst", FileNames);

    return(Size && kernel32::DeleteFileW(Path + FileNames[Size - 1]));
  }

Se si sostituisce tst con opt, viene cancellato l'ultimo file opt. Sembra ridondante pulire l'intera cartella Cache.

 
Grazie!