Librerías: MultiTester - página 45

 

Foro sobre comercio, sistemas automatizados de comercio y prueba de estrategias comerciales

Nueva versión de MetaTrader 5 build 3081: Mejoras en los servicios MQL5 y diseño actualizado

fxsaber, 2021.10.15 12:33 pm

El script muestra una limitación incomprensible en la longitud de los nombres de archivos que se crean sin problemas en el administrador de archivos.

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");
}

Por favor, resuelve la longitud del nombre del archivo. En la práctica deberías usar aquí.


Las siguientes funciones permiten trabajar con rutas largas (más que MAX_PATH).

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


El ejemplo anterior funcionará si reemplaza la función estándar.

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


También añadí una función para obtener una lista de archivos por máscara, incluyendo subcarpetas (similar a esta).

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

void OnStart()
{
  string FileNames[];
  
  // Obtener todos los archivos de registro en la carpeta del terminal. Admite rutas largas (> MAX_PATH).
  MTTESTER::GetFileNames(FileNames, TerminalInfoString(TERMINAL_DATA_PATH) + "\\*.log");

  ArrayPrint(FileNames);
}


A menudo me encontraba con limitaciones en la longitud de la ruta de archivos en las funciones estándar. A juzgar por la implementación, la posible adición de soporte para archivos con rutas largas a las funciones estándar parece simple desde el lado de MQ.

 
Cuando depuro código, a menudo utilizo el borrado de registros antes de las impresiones activas para evitar confusiones con la sesión anterior.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/es/code/26132

void OnStart()
{
  MTTESTER::TerminalJournalClear(); // Limpieza del Diario de Expertos.
  
  Print("First Print.");
}
 

Añadida información adicional a los nombres de los archivos y su contenido. De otro modo era difícil entender cuándo y qué se lanzaba (hago muchos cálculos automáticos).

// Generado por bool MTTESTER::CheckInputs(const bool): https://www.mql5.com/es/code/26132
// Enlace: https://www.mql5.com/ru/blogs/post/760770

// [Probador].
// Experto=HelloWorld.ex5
// Símbolo=EURUSD
// Período=M1
// FromDate=2024.11.04.
// Depósito=10000.0
// Moneda=EUR
// Apalancamiento=500
// ServerName=MetaQuotes-Demo
// [TesterInputs]

inRange1=3
; GroupName
inRange2=3



Ahora puede copiar estos datos al portapapeles (CTRL+C) y transferirlos a la pestaña Configuración (CTRL+V) del Comprobador. Después de eso ejecute una sola pasada de la combinación de alarmas.

 
fxsaber #:
Cuando depuro código, a menudo utilizo la función de borrar el registro antes de las impresiones activas para evitar confusiones con la sesión anterior.

La función se llama TerminalJournalClear, pero no borra el registro, sólo lo hace la pestaña Experto.

 
Andrei Iakovlev #:

La función se llama TerminalJournalClear, pero no borra el diario, sólo lo hace la pestaña Experto.

¿Hay alguna dificultad terminológica? Borrar la pestaña Expertos - hay scripts. La pestaña de registros - no se me ha ocurrido.

 
Hola, ¿alguien puede confirmar si la biblioteca MTTester.mqh ha quedado obsoleta con la nueva build push 5100 del 6 de junio de 2025?
 
Muhammad Fahad #:
Hola, ¿alguien puede confirmar si la biblioteca MTTester.mqh ha quedado obsoleta con la nueva build push 5100 del 6 de junio de 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'
 

Foro sobre negociación, sistemas automatizados de negociación y ensayo de estrategias de negociación

Bibliotecas: MultiTester

fxsaber, 2022.09.01 10:26 AM

Terminal de gestión LiveUpdate.
// Cambio del estado LiveUpdate del terminal.

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

Servicio para no permitir actualizaciones.

#property service

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

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

 
Buenas tardes. Muchas gracias por la biblioteca. ¿Podría decirme cómo implementar criterios de optimización de fuerza bruta?
 
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

En 2 ordenadores diferentes con esta actualización - MultiTester

Actualizado: 2025.06.06 08:04