Bibliothèque: MultiTester - page 40

 
klycko résultats de l'optimisation dans un tableau Excel et dans le fichier cache de l'optimisation ?
Voir lecture des fichiers opt.
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 résultats de l'optimisation dans une feuille de calcul Excel ?

Ensavoir plus sur l'utilisation des cadres.

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

Avec l'aide des bibliothèques TesterCache, MultiTester, TypeToBytes.
J'ai développé un programme d'optimisation, mais il comporte une erreur insurmontable.

Je l'ai localisée :
Après avoir exécuté la procédure Run(Contr) ;
Les lignes suivantes tentent de lire les meilleurs paramètres du cache trouvés lors de cette exécution.
Puis ces paramètres sont imprimés et le script s'arrête.

Voici ce code :

inNum=0 ;

Run(Contr) ; // Exécute l'optimisation sur les valeurs du paramètre sélectionné

prWrite = MTTESTER::SetSettings2(Sohran) ; // Restauration des paramètres enregistrés sur le robot
prRead = MTTESTER::GetSettings(Contr) ; // Lit les paramètres du robot pour les contrôler
Print("prWriteSettings = ",prWrite," prReadSettings = ",prRead) ;
Print("SettingEnd Odinar ",Kol," PoseY = ",PoseY," Iteration ",IterNumber,"\n",Contr) ;

if(prRead && TypPar == 0) // Lecture du cache d'optimisation pour le double paramètre

{ // Lecture des paramètres d'entrée optimisés correspondants


int GLOC = MTTESTER::GetLastOptCache(Bytess) ;

Print("GLOC = ",GLOC) ;


const int Size = Cache.GetInputs(inNum,Paramas) ;
Print(Cache[inNum].ToString()) ; // Impression des statistiques de l'enregistrement demandé
Print(Cache.Header.ToString()) ; // Imprimer les données principales de l'optimisation du cache
Print("Paramas\n") ;
ArrayPrint(Paramas) ; // Imprimer ses paramètres d'entrée optimisés
Print(Cache[GetMaxProfitPos(Cache)].ToString()) ; // Imprimer les statistiques de l'enregistrement avec le profit maximum

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit ; // Profit maximum
int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass ; // Numéro de la passe avec le profit maximum
int IndexMaxProfit = GetMaxProfitPos(Cache) ; // Index du tableau avec la valeur du paramètre
Cache.GetInputs(IndexMaxProfit,Paramas) ;

ParamMax = Paramas[0,1].double_value ; // Valeur du paramètre à laquelle le profit maximum est atteint

Alert("ProfitNow =",ProfitNow," ParamMax=",ParamMax," Odinar ",Kol," PoseY = ",PoseY," PosEq = ",PosEq," TypPar = ",TypPar," Iteration ",IterNumber) ;
retour ;



Cependant, les paramètres trouvés et imprimés correspondent à un ancien fichier opt, et non à celui obtenu en lançant Run ! !!!
Peut-être que j'accède à Cache.GetInputs(inNum,Paramas) de manière incorrecte ?

La procédure Run elle-même a fonctionné correctement, comme le montrent les impressions précédentes dans le journal.

Pourquoi n'est-il toujours pas possible d'obtenir des données fraîches de Cache ?

Merci d'avance pour tout conseil.

Cordialement, Alexander
Библиотеки: TesterCache - Что такое 0xCACA?
Библиотеки: TesterCache - Что такое 0xCACA?
  • 2019.08.31
  • Good Beer
  • www.mql5.com
Да и дальше взаимодействия с Оптимизатором нет никакого. в кеше Оптимизатора по каждому проходу хранятся все стат. Бонусом идет возможность запуска любого прохода из обновленной таблицы стандартными средствами в два щелчка
 
klycko #:
int GLOC = MTTESTER::GetLastOptCache(Bytess) ;
Vous avez reçu le fichier opt dans un tableau d'octets. Ensuite, vous devez l'introduire dans le cache.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading.

Bibliothèques : TesterCache

fxsaber, 2019.11.11 04:45 pm.

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

  if (Cache.Load(Bytes)) // Lire le cache d'optimisation.
  {
 
fxsaber #:
Vous avez reçu un fichier opt dans un tableau d'octets. Vous devez ensuite l'introduire dans Cache.

Je l'ai corrigé comme vous l'avez dit :


string Sohran,Contr ;

MTTESTER::GetSettings(Sohran) ; // Les paramètres initiaux actuels du robot sont lus pour être enregistrés temporairement dans Sohran.

prWrite = MTTESTER::SetSettings2(Odinar) ; // Les paramètres du robot sont définis dans Odinar.

prRead = MTTESTER::GetSettings(Contr) ; // Lire les paramètres du robot qui viennent d'être définis.

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

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


Run(Contr[0]) ; // Lancer l'optimisation sur les valeurs du paramètre Y sélectionné

int GLOC = MTTESTER::GetLastOptCache(Bytess) ; // Récupère le fichier opt dans le tableau d'octets de Bytess

TESTERCACHE<ExpTradeSummary> Cache ;

bool CL = Cache.Load(Bytess) ; // Introduit le tableau d'octets Bytess dans le cache

ProfitNow = Cache[GetMaxProfitPos(Cache)].profit ; // Profit maximum

int NomProchodaMaxProfit = Cache[GetMaxProfitPos(Cache)].Pass ; // Numéro de la passe avec le profit maximum

int IndexMaxProfit = GetMaxProfitPos(Cache) ; // Index du tableau avec la valeur du paramètre https://www.mql5.com/ru/forum/318998/page2#comment_13846951

Cache.GetInputs(IndexMaxProfit,Paramas) ;

ParamMax = Paramas[0,1].double_value ; // La valeur du paramètre à laquelle le profit maximum a été atteint


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

retour ;



Le résultat est toujours erroné.

Pour une raison quelconque, les données ProfitNow et ParamMax d'une exécution antérieure sont lues à partir du cache.

Cordialement, Alexander

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

Pour une raison quelconque, les données ProfitNow et ParamMax d'une ancienne exécution sont lues à partir du cache.

Ce script affiche-t-il des valeurs correctes après l'optimisation ?

Si oui, le problème vient probablement du fait que le fichier opt n'est pas prêt juste après l'optimisation. Vous pouvez essayer de mettre en veille après l'exécution. Ou bien Run ne fonctionne pas correctement.

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

Ce script affiche-t-il les valeurs correctes après l'optimisation ?

Si oui, le problème vient probablement du fait que le fichier opt n'est pas prêt juste après l'optimisation. Vous pouvez essayer de mettre en veille après l'exécution. Ou bien Run ne fonctionne pas correctement.

Merci de votre compréhension. Je vérifierai tout cela demain.

Mais j'ai découvert que si je définissais l'optimisation par un nouveau paramètre, tout fonctionnait correctement.

Il me semble donc que le problème est que le testeur, si vous redéfinissez une optimisation qui a déjà fonctionné précédemment, ne la traite pas à nouveau, mais récupère simplement le résultat précédent dans sa mémoire.

Ne pourrait-on pas inventer quelque chose pour détruire cette mémoire du testeur à l'avance ?

 
klycko #:

Il me semble donc que l'essentiel est que le testeur, si vous réinitialisez une optimisation précédemment exécutée, ne la traite pas à nouveau, mais récupère simplement le résultat antérieur dans sa mémoire.

Vos hypothèses sont erronées. Le problème réside dans le code que vous avez écrit.

 
fxsaber #:

Vos hypothèses sont fausses. Le problème vient du code que vous avez écrit.

Bonjour, je suis d'accord avec vous pour dire que "le problème est dans le code que j'ai écrit".


Je suis d'accord avec vous pour dire que "le problème est dans le code que j'ai écrit". L'erreur est là, et je ne sais pas encore comment la corriger.

Cependant, j'ai découvert expérimentalement que si vous supprimez manuellement tous les fichiers opt avant d'exécuter Run.

du dossier "C:\Users\ASUSAppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\Tester\cache",

alors mon code fonctionne correctement et effectue l'optimisation sur le paramètre sélectionné.

Si ce dossier n'est pas nettoyé, le testeur n'effectue pas d'optimisations répétées (avec les mêmes données inchangées), mais lit les fichiers suivants

le fichier opt déjà existant dans ce dossier. Ceci est clairement visible lors de l'exécution manuelle répétée de la même optimisation.

On constate que l'optimisation proprement dite n'est effectuée que la première fois, et qu'elle ne fait alors que lire le fichier opt du dossier.

Cette lecture répétée ne semble pas mettre à jour le contenu du cache, et c'est ce qui provoque l'erreur dans mon code.


Le fait d'effacer ce dossier pourrait aider à résoudre l'erreur. Bien sûr, c'est une mauvaise solution, et il serait plus élégant de pouvoir restaurer les bonnes données dans le cache.

Mais je ne sais pas comment faire. Pour l'instant, les données de l'optimisation réelle précédente sont suspendues dans le cache (elles ne correspondent pas à la relecture du dossier).


Malheureusement, ce dossier ne peut pas être nettoyé à partir du script à l'aide de FolderClean, car cela est interdit dans MQL5.

Il est en dehors du "bac à sable" et n'est rempli que par le testeur de stratégie.


Peut-être devriez-vous créer un module complémentaire externe au moyen de C++ et l'exécuter à partir du script.


Cordialement, Alexander

 
La procédure d'exécution fonctionne parfaitement. Elle écrit les paramètres et appuie sur le bouton Démarrer. Tout est normal.