Librerie: MultiTester - pagina 40

 
klycko risultati dell'ottimizzazione in una tabella Excel e nel file di cache dell'ottimizzazione?
Vedere lettura dei file opzionali.
How to open cache optimization file (.opt), MT5
How to open cache optimization file (.opt), MT5
  • 2020.07.30
  • DDamasceno
  • www.mql5.com
Hi, Is there a way to open Metatrader 5 optimization cache file (folder -> tester/cache/) with another software and export the data in...
 
klycko risultati dell'ottimizzazione a un foglio di calcolo Excel

Leggete come lavorare con le cornici.

Документация по MQL5: Работа с результатами оптимизации
Документация по MQL5: Работа с результатами оптимизации
  • www.mql5.com
Функции для организации собственной обработки результатов оптимизации в тестере стратегий. Могут вызываться при оптимизации в агентах тестирования...
 
Buon pomeriggio!

Con l'aiuto delle librerie TesterCache, MultiTester, TypeToBytes.
Ho sviluppato un programma di ottimizzazione, ma c'è un errore insormontabile in esso.

L'ho localizzato:
Dopo aver eseguito la procedura Run(Contr);
Le righe seguenti cercano di leggere i migliori parametri dalla Cache trovati durante l'esecuzione di Run.
Poi questi parametri vengono stampati e lo script si ferma.

Ecco il codice:

inNum=0;

Run(Contr); // Esecuzione dell'ottimizzazione sui valori del parametro selezionato

prWrite = MTTESTER::SetSettings2(Sohran); // Ripristino delle impostazioni salvate sul robot
prRead = MTTESTER::GetSettings(Contr); // Legge le impostazioni del robot per controllarle
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iterazione ",IterNumber,"\n",Contr);

if(prRead && TypPar == 0) // Lettura della cache di ottimizzazione per il parametro doppio

{ // Leggere i corrispondenti parametri di ingresso ottimizzati


int GLOC = MTTESTER::GetLastOptCache(Bytess);

Print("GLOC = ",GLOC);


const int Size = Cache.GetInputs(inNum,Paramas);
Print(Cache[inNum].ToString()); // Stampa delle statistiche del record richiesto
Print(Cache.Header.ToString()); // Stampa i dati principali dell'ottimizzazione della Cache
Print("Paramas\n");
ArrayPrint(Paramas); // Stampa i suoi parametri di ingresso ottimizzati
Print(Cache[GetMaxProfitPos(Cache)].ToString()); // Stampa le statistiche del record con il massimo profitto

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Profitto massimo
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Numero del passaggio con il massimo profitto
int IndexMaxProfit = GetMaxProfitPos(Cache); // Indice della matrice con il valore del parametro
Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // Il valore del parametro al quale viene raggiunto il profitto massimo

Alert("ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iterazione ",IterNumber);
ritorno;



Tuttavia, i parametri trovati e stampati corrispondono a un file opt precedente, non a quello ottenuto eseguendo Run !!!!.
Forse sto accedendo a Cache.GetInputs(inNum,Paramas) in modo errato?

La procedura di esecuzione in sé ha funzionato bene, come si evince dalle stampe precedenti nel log.

Perché non è ancora possibile ottenere dati freschi dalla Cache?

Vi ringrazio in anticipo per qualsiasi consiglio.

Saluti, Alexander
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess);
Abbiamo ricevuto il file opt in un array di byte. Successivamente, è necessario inserirlo nella Cache.

Forum sul trading, sui sistemi di trading automatizzati e sulla verifica delle strategie di trading.

Librerie: TesterCache

fxsaber, 2019.11.11 04:45 pm.

void OnStart()
{
  uchar Bytes[];
  
  MTTESTER::GetLastOptCache(Bytes);
  
  TESTERCACHE<ExpTradeSummary> Cache;

  if (Cache.Load(Bytes)) // Leggere la cache di ottimizzazione.
  {
 
fxsaber #:
È stato ricevuto un file opt in un array di byte. Quindi, è necessario inserirlo nella Cache.

L'ho corretto come avete detto:


string Sohran,Contr;

MTTESTER::GetSettings(Sohran); // Le impostazioni iniziali correnti del robot vengono lette e salvate temporaneamente in Sohran.

prWrite = MTTESTER::SetSettings2(Odinar); // Imposta Odinar sulle impostazioni del robot.

prRead = MTTESTER::GetSettings(Contr); // Legge le impostazioni del robot appena impostate.

Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead);

Print("SettingBeg OdinarContr ",Kol," PoseY = ",PoseY," Iterazione ",IterNumber,"\n",Contr);


Run(Contr[0]); // Esecuzione dell'ottimizzazione sui valori del parametro Y selezionato

int GLOC = MTTESTER::GetLastOptCache(Bytess); // Ottenere il file opt nell'array di byte Bytess

TESTERCACHE<ExpTradeSummary> Cache;

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

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit; // Profitto massimo

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass; // Numero del passaggio con il massimo profitto

int IndexMaxProfit = GetMaxProfitPos(Cache); // Indice dell'array con il valore del parametro https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas);

ParamMax = Paramas[0,1].double_value; // Il valore del parametro al quale è stato raggiunto il massimo profitto


Alert("CL=",CL," GLOC = ",GLOC," GLOC," ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iterazione ",IterNumber);

ritorno;



Il risultato è ancora sbagliato.

Per qualche motivo i dati ProfitNow e ParamMax di una precedente esecuzione vengono letti dalla cache.

Saluti, Alexander

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
File:
 
klycko #:

Per qualche motivo, i dati di ProfitNow e ParamMax di una precedente esecuzione vengono letti dalla cache.

Questo script mostra i valori corretti dopo l'ottimizzazione?

Se sì, è molto probabile che il problema sia dovuto al fatto che il file di opt non è pronto subito dopo l'ottimizzazione. Si può provare a inserire Sleep dopo Run. Oppure Run non funziona correttamente.

Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
fxsaber #:

Questo script mostra i valori corretti dopo l'ottimizzazione?

Se sì, molto probabilmente il problema è che il file opt non è pronto subito dopo l'ottimizzazione. Si può provare a inserire Sleep dopo Run. Oppure Run non funziona correttamente.

Grazie! Domani controllerò tutto questo.

Ma ora ho scoperto che se imposto l'ottimizzazione con un nuovo parametro, tutto funziona correttamente.

Quindi mi sembra che il punto sia che il tester, se si reimposta un'ottimizzazione che ha già funzionato in precedenza, non la elabora di nuovo, ma si limita a recuperare dalla memoria il risultato precedente.

Non si potrebbe inventare qualcosa per distruggere preventivamente questa memoria del tester?

 
klycko #:

Quindi mi sembra che il punto sia che il tester, se si reimposta un'ottimizzazione precedentemente in esecuzione, non la elabora di nuovo, ma semplicemente recupera dalla memoria il risultato passato.

Le vostre ipotesi sono sbagliate. Il problema è nel codice che avete scritto.

 
fxsaber #:

Le vostre ipotesi sono sbagliate. Il problema è il codice che avete scritto.

Buon pomeriggio!


Sono d'accordo con lei: "Il problema è nel codice che ho scritto". L'errore è in esso e non so ancora come risolverlo.

Tuttavia, ho scoperto sperimentalmente che se si rimuovono manualmente tutti i file opt prima di eseguire Run.

dalla cartella "C:\Users\ASAppData\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

 
La procedura di esecuzione funziona perfettamente. Scrive le impostazioni e preme il pulsante di avvio. Tutto è normale.