Библиотеки: MultiTester - страница 45

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Новая версия платформы MetaTrader 5 build 3081: Улучшения в MQL5-сервисах и обновленный дизайн

fxsaber, 2021.10.15 12:33

Скрипт показывает непонятное ограничение на длину имени файлов, что создаются без проблем в файловом менеджере.

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

Просьба порешать с длиной имени файла. На практике нужно использовать здесь.


Следующие функции позволяют работать с длинными путями (больше MAX_PATH).

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


Пример выше заработает, если заменить штатную функцию.

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


Также добавлена функция получения списка файлов по маске, включая подпапки (по аналогии с этим).

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

void OnStart()
{
  string FileNames[];
  
  // Получаем все log-файлы в папке терминала. Поддерживает длинные пути (> MAX_PATH).
  MTTESTER::GetFileNames(FileNames, TerminalInfoString(TERMINAL_DATA_PATH) + "\\*.log");

  ArrayPrint(FileNames);
}


Часто нарывался на ограничения по длине пути к файлу в штатных функциях. Судя по реализации, возможная добавка поддержки файлов с длинными путями в штатные функции со стороны MQ выглядит простой.

 
При отладке кода часто использую очистку логов перед активными принтами, чтобы не путать с предыдущей сессией.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

void OnStart()
{
  MTTESTER::TerminalJournalClear(); // Очищает журнал Эксперты.
  
  Print("First Print.");
}
 

Добавил доп. информацию в название файлов и их содержание. Иначе было сложно понять, когда и что запускалось (делаю много автоматических расчетов).

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

// [Tester]
// Expert=HelloWorld.ex5
// Symbol=EURUSD
// Period=M1
// FromDate=2024.11.04
// Deposit=10000.0
// Currency=EUR
// Leverage=500
// ServerName=MetaQuotes-Demo
// [TesterInputs]

inRange1=3
; GroupName
inRange2=3



Теперь можно скопировать в буфер обмена (CTRL+C) эти данные и перенести их во вкладку Настройки (CTRL+V) Тестера. После чего запустить одиночный проход аварийной комбинации.

 
fxsaber #:
При отладке кода часто использую очистку логов перед активными принтами, чтобы не путать с предыдущей сессией.

Функция называется TerminalJournalClear, но журнал она не очищает, только на вкладке экспертов очищает.

 
Andrei Iakovlev #:

Функция называется TerminalJournalClear, но журнал она не очищает, только на вкладке экспертов очищает.

Терминологическая сложность? Очищать вкладку Эсперты - есть сценарии. Вкладку логов - не придумал.

 
Hi, can anyone confirm if the MTTester.mqh library has become obsolete with new new 5100 build push June 6, 2025 ?
 
Muhammad Fahad #:
Hi, can anyone confirm if the MTTester.mqh library has become obsolete with new new 5100 build push June 6, 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'
 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Библиотеки: MultiTester

fxsaber, 2022.09.01 10:26

Управление LiveUpdate терминала.
// Switching the terminal LiveUpdate state.

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

Сервис запрета обновлений.

#property service

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

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

 
Добрый день. Спасибо огромное за библиотеку! Подскажите пожалуйста, как реализовать перебор критериев оптимизации?
 
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

 на 2 разных компьютерах на этом обновлении - MultiTester 

Обновлен: 2025.06.06 08:04