Bibliothèque: MultiTester - page 45

 

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

Nouvelle version de MetaTrader 5 build 3081 : Amélioration des services MQL5 et mise à jour du design

fxsaber, 2021.10.15 12:33 pm

Le script montre une limitation incompréhensible de la longueur des noms de fichiers qui sont créés sans problème dans le gestionnaire de fichiers.

void CheckFile( string FileName )
{
  uchar Bytes[1];  
  
  FileName = "TempFolder\\" + FileName + "\\" + FileName + "\\" + FileName;
  Print(StringLen(FileName)); // 313

  Print(FileSave(FileName, Bytes)); //false
  Print(_LastError); // ERR_TOO_LONG_FILENAME (5003)
}

void OnStart()
{
  CheckFile("ExpertNameExpertName.EURUSDEURUSDEURUSD.M1.20210701.20211009.41.BAA0EE191CCD66EB8291EC4D6434A6C8.opt");
}

Veuillez résoudre la longueur du nom de fichier. En pratique, vous devriez utiliser ceci.


Les fonctions suivantes permettent de travailler avec des chemins longs (plus que MAX_PATH).

MTTESTER::FileSave
MTTESTER::FileLoad
MTTESTER::FileCopy
MTTESTER::FileMove
MTTESTER::FileIsExist


L'exemple ci-dessus fonctionnera si vous remplacez la fonction standard.

Print(MTTESTER::FileSave(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Files\\" + FileName, Bytes)); //Vrai


J'ai également ajouté une fonction permettant d'obtenir une liste de fichiers par masque, y compris les sous-dossiers (similaire à celle-ci).

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132

void OnStart()
{
  string FileNames[];
  
  // Récupère tous les fichiers journaux dans le dossier du terminal. Supporte les longs chemins (> MAX_PATH).
  MTTESTER::GetFileNames(FileNames, TerminalInfoString(TERMINAL_DATA_PATH) + "\\*.log");

  ArrayPrint(FileNames);
}


J'ai souvent rencontré des limitations sur la longueur des chemins de fichiers dans les fonctions standard. À en juger par la mise en œuvre, l'ajout éventuel d'un support pour les fichiers avec de longs chemins dans les fonctions standard semble simple du côté de MQ.

 
Lors du débogage du code, j'utilise souvent l'effacement des journaux avant les impressions actives afin d'éviter toute confusion avec la session précédente.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132

void OnStart()
{
  MTTESTER::TerminalJournalClear(); // Nettoyer le journal des experts.
  
  Print("First Print.");
}
 

Ajout d'informations supplémentaires aux noms de fichiers et à leur contenu. Sinon, il était difficile de comprendre quand et quoi était lancé (je fais beaucoup de calculs automatiques).

// Généré par bool MTTESTER::CheckInputs(const bool) : https://www.mql5.com/fr/code/26132
// Lien : https://www.mql5.com/ru/blogs/post/760770

// [Testeur].
// Expert=HelloWorld.ex5
// Symbole=EURUSD
// Période=M1
// FromDate=2024.11.04.
// Dépôt=10000.0
// Devise=EUR
// Effet de levier = 500
// Nom du serveur=MetaQuotes-Demo
// [TesterInputs]

inRange1=3
; GroupName
inRange2=3



Vous pouvez désormais copier ces données dans le presse-papiers (CTRL+C) et les transférer dans l'onglet Paramètres (CTRL+V) du testeur. Ensuite, lancez une seule passe de la combinaison d'alarmes.

 
fxsaber #:
Lorsque je débogue du code, j'utilise souvent l'effacement du journal avant les impressions actives pour éviter toute confusion avec la session précédente.

La fonction s'appelle TerminalJournalClear, mais elle n'efface pas le journal, seul l'onglet Expert le fait.

 
Andrei Iakovlev #:

La fonction s'appelle TerminalJournalClear, mais elle n'efface pas le journal, seul l'onglet Expert le fait.

Y a-t-il une difficulté terminologique ? Effacer l'onglet Experts - il y a des scripts. L'onglet logs - je n'y ai pas pensé.

 
Bonjour, quelqu'un peut-il confirmer que la bibliothèque MTTester.mqh est devenue obsolète avec le nouveau build 5100 poussé le 6 juin 2025 ?
 
Muhammad Fahad #:
Bonjour, quelqu'un peut-il confirmer que la bibliothèque MTTester.mqh est devenue obsolète avec le nouveau build 5100 poussé le 6 juin 2025 ?
'MTTester.mqh'
WinAPI.mqh                      
windef.mqh                      
winnt.mqh                       
fileapi.mqh                     
winbase.mqh                     
winuser.mqh                     
wingdi.mqh                      
winreg.mqh                      
handleapi.mqh                   
processthreadsapi.mqh                   
securitybaseapi.mqh                     
errhandlingapi.mqh                      
sysinfoapi.mqh                  
processenv.mqh                  
libloaderapi.mqh                        
memoryapi.mqh                   
0 errors, 0 warnings, 193 msec elapsed, cpu='X64 Regular'
 

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

Bibliothèques : MultiTester

fxsaber, 2022.09.01 10:26 AM

Gestion des LiveUpdate du terminal.
// Commutation de l'état LiveUpdate du terminal.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132

void OnStart()
{
  const bool IsLiveUpdate = MTTESTER::IsTerminalLiveUpdate();
                     
  if (MessageBox("Current LiveUpdate - " + (IsLiveUpdate ? "ON" : "OFF") + ".\n\nWant to switch?",
                 "LiveUpdate Status", MB_YESNO) == IDYES)
   MessageBox("Current LiveUpdate - " + ((IsLiveUpdate ? !MTTESTER::TerminalLiveUpdateOFF() : MTTESTER::TerminalLiveUpdateON()) ? "ON." : "OFF."));
}

Service pour interdire les mises à jour.

#property service

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132

void OnStart()
{
  while (!IsStopped())
  {
    MTTESTER::TerminalLiveUpdateOFF();
    
    Sleep(5000);
  }
}

 
Après-midi. Merci beaucoup pour la bibliothèque ! Pourriez-vous me dire comment mettre en œuvre des critères d'optimisation par force brute ?
 
parameter convertion type 'short[260]' to 'ushort[] &' is not allowed	MTTester.mqh	135	39
   int user32::GetClassNameW(long,ushort&[],int)	winuser.mqh	1414	37
'ReadFile' - no one of the overloads can be applied to the function call	MTTester.mqh	1283	21
   in template 'int MTTESTER::FileLoad(const string,T&[])' specified with [T=short]	MTTester.mqh	1270	14
   see template instantiation 'MTTESTER::FileLoad<short>'	MTTester.mqh	1569	23
could be one of 3 function(s)	MTTester.mqh	1283	21
   int kernel32::ReadFile(long,ushort&[],uint,uint&,OVERLAPPED&)	fileapi.mqh	124	8
   int kernel32::ReadFile(long,ushort&[],uint,uint&,long)	fileapi.mqh	125	8
   int kernel32::ReadFile(long,uchar&[],uint,uint&,long)	MTTester.mqh	60	7
2 errors, 0 warnings		2	0
текущий MTTester.mqh не  проходит проверку при компиляции себя же самого в 5100

Sur 2 ordinateurs différents sur cette mise à jour - MultiTester

Mise à jour : 2025.06.06 08:04