Librerie: MultiTester - pagina 45

 

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

Nuova versione di MetaTrader 5 build 3081: miglioramenti nei servizi MQL5 e design aggiornato

fxsaber, 2021.10.15 12:33 pm

Lo script mostra una limitazione incomprensibile sulla lunghezza dei nomi dei file che vengono creati senza problemi nel file manager.

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

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

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

Risolvi la lunghezza del nome del file. In pratica si dovrebbe usare qui.


Le seguenti funzioni permettono di lavorare con percorsi lunghi (più di MAX_PATH).

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


L'esempio precedente funzionerà se si sostituisce la funzione standard.

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


È stata aggiunta anche una funzione per ottenere un elenco di file per maschera, comprese le sottocartelle (simile a questa).

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

void OnStart()
{
  string FileNames[];
  
  // Ottiene tutti i file di log nella cartella del terminale. Supporta percorsi lunghi (> MAX_PATH).
  MTTESTER::GetFileNames(FileNames, TerminalInfoString(TERMINAL_DATA_PATH) + "\\*.log");

  ArrayPrint(FileNames);
}


Ho spesso riscontrato limitazioni sulla lunghezza dei percorsi dei file nelle funzioni standard. A giudicare dall'implementazione, l'eventuale aggiunta del supporto per i file con percorsi lunghi alle funzioni standard sembra semplice dal lato MQ.

 
Durante il debug del codice, spesso uso cancellare i log prima delle stampe attive per evitare confusione con la sessione precedente.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/it/code/26132

void OnStart()
{
  MTTESTER::TerminalJournalClear(); // Ripulire il giornale degli esperti.
  
  Print("First Print.");
}
 

Aggiunte informazioni supplementari ai nomi dei file e al loro contenuto. Altrimenti era difficile capire quando e cosa veniva lanciato (faccio molti calcoli automatici).

// Generato da bool MTTESTER::CheckInputs(const bool): https://www.mql5.com/it/code/26132
// Link: https://www.mql5.com/ru/blogs/post/760770

// [Tester].
// Esperto=HelloWorld.ex5
// Simbolo=EURUSD
// Periodo=M1
// FromDate=2024.11.04.
// Deposito=10000.0
// Valuta=EUR
// Leva=500
// ServerName=MetaQuotes-Demo
// [TesterInputs]

inRange1=3
; GroupName
inRange2=3



Ora è possibile copiare questi dati negli appunti (CTRL+C) e trasferirli nella scheda Impostazioni (CTRL+V) del Tester. Dopodiché, eseguire un singolo passaggio della combinazione di allarmi.

 
fxsaber #:
Durante il debug del codice, spesso utilizzo la cancellazione del log prima delle stampe attive per evitare confusione con la sessione precedente.

La funzione si chiama TerminalJournalClear, ma non cancella il registro, lo fa solo la scheda Expert.

 
Andrei Iakovlev #:

La funzione si chiama TerminalJournalClear, ma non cancella il diario, bensì solo la scheda Expert.

C'è una difficoltà terminologica? Cancellare la scheda Esperti: ci sono degli script. La scheda dei registri: non ci ho pensato.

 
Salve, qualcuno può confermare se la libreria MTTester.mqh è diventata obsoleta con la nuova build 5100 del 6 giugno 2025?
 
Muhammad Fahad #:
Salve, qualcuno può confermare se la libreria MTTester.mqh è diventata obsoleta con la nuova build 5100 del 6 giugno 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 sul trading, sui sistemi di trading automatico e sulla verifica delle strategie di trading

Biblioteche: MultiTester

fxsaber, 2022.09.01 10:26 AM

Gestione del terminale LiveUpdate.
// Commutazione dello stato LiveUpdate del terminale.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/it/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."));
}

Servizio di disconoscimento degli aggiornamenti.

#property service

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

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

 
Pomeriggio. Grazie mille per la libreria! Potresti dirmi come implementare i criteri di ottimizzazione brute-force?
 
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

Su 2 computer diversi con questo aggiornamento - MultiTester

Aggiornato: 2025.06.06 08:04