Bibliotecas: MultiTester - página 45

 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Nova versão do MetaTrader 5 build 3081: melhorias nos serviços MQL5 e design atualizado

fxsaber, 2021.10.15 12:33 pm

O script mostra uma limitação incompreensível no comprimento dos nomes de arquivos que são criados sem problemas no gerenciador de arquivos.

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, resolva o tamanho do nome do arquivo. Na prática, você deve usar aqui.


As funções a seguir permitem trabalhar com caminhos longos (mais do que MAX_PATH).

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


O exemplo acima funcionará se você substituir a função padrão.

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


Também foi adicionada uma função para obter uma lista de arquivos por máscara, incluindo subpastas (semelhante a esta).

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

void OnStart()
{
  string FileNames[];
  
  // Obter todos os arquivos de registro na pasta do terminal. Oferece suporte a caminhos longos (> MAX_PATH).
  MTTESTER::GetFileNames(FileNames, TerminalInfoString(TERMINAL_DATA_PATH) + "\\*.log");

  ArrayPrint(FileNames);
}


Muitas vezes encontrei limitações no comprimento do caminho do arquivo em funções padrão. A julgar pela implementação, a possível adição de suporte para arquivos com caminhos longos às funções padrão parece simples do lado do MQ.

 
Ao depurar o código, costumo usar a limpeza de registros antes das impressões ativas para evitar confusão com a sessão anterior.
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/code/26132

void OnStart()
{
  MTTESTER::TerminalJournalClear(); // Limpando o Diário de Especialistas.
  
  Print("First Print.");
}
 

Acrescentei informações adicionais aos nomes dos arquivos e seus conteúdos. Caso contrário, era difícil entender quando e o que foi iniciado (eu faço muitos cálculos automáticos).

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

// [Tester].
// Expert=HelloWorld.ex5
// Symbol=EURUSD
// Período=M1
// FromDate=2024.11.04.
// Depósito=10000.0
// Currency=EUR
// Alavancagem=500
// ServerName=MetaQuotes-Demo
// [TesterInputs].

inRange1=3
; GroupName
inRange2=3



Agora você pode copiar esses dados para a área de transferência (CTRL+C) e transferi-los para a guia Configurações (CTRL+V) do Testador. Depois disso, execute uma única passagem da combinação de alarmes.

 
fxsaber #:
Ao depurar o código, costumo usar a limpeza do registro antes das impressões ativas para evitar confusão com a sessão anterior.

A função é chamada TerminalJournalClear, mas ela não limpa o registro, apenas a guia Expert o faz.

 
Andrei Iakovlev #:

A função é chamada TerminalJournalClear, mas não limpa o diário, apenas a guia Expert.

Há alguma dificuldade terminológica? Limpar a guia Especialistas - existem scripts. A guia logs - ainda não pensei nisso.

 
Olá, alguém pode confirmar se a biblioteca MTTester.mqh se tornou obsoleta com o novo build push 5100 de 6 de junho de 2025?
 
Muhammad Fahad #:
Olá, alguém pode confirmar se a biblioteca MTTester.mqh se tornou obsoleta com o novo build push 5100 de 6 de junho 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'
 

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Bibliotecas: MultiTester

fxsaber, 2022.09.01 10:26 AM

Gerenciamento do terminal LiveUpdate.
// Mudança do estado de LiveUpdate do terminal.

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

Serviço para não permitir atualizações.

#property service

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

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

 
Boa tarde. Muito obrigado pela biblioteca! Poderia me dizer como implementar critérios de otimização de força 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

Em 2 computadores diferentes com esta atualização - MultiTester

Atualizado em: 2025.06.06 08:04