Bibliotecas: MultiTester - página 35

 
fxsaber #:

Obrigado por sua ajuda nos testes! MTTester.mqh atualizado publicado.

Muito obrigado pela biblioteca

 
O MTTester.mqh foi atualizado novamente. Desta vez, vou lhe dizer qual foi o problema.
#include <fxsaber\Benchmark\Benchmark.mqh>  // https://www.mql5.com/pt/code/31279
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/pt/code/26132

const bool Init = EventSetTimer(3);

void OnTimer()
{
  if (MTTESTER::IsReady()) // Se o botão Iniciar estiver pronto para ser pressionado
    Print(_B(MTTESTER::ClickStart(), 1)); // Se o botão Iniciar foi pressionado e quanto tempo levou.
}

Esse Expert Advisor pressiona o botão Start a cada três segundos, se não for Stop. Consegui pressioná-lo - verdadeiro, caso contrário - falso.


Situação padrão.

Pressionei Start - o cálculo foi iniciado.

Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 125248 mcs.
true
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 123327 mcs.
true

Essa ação leva cerca de 125 ms.


Isso não é incomum.

Pressionar Iniciar - o cálculo instantâneo é iniciado ou o Testador informa que não pode executar o cálculo (por exemplo, FromDate >= ToDate).

Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1001401 mcs.
true
Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1004102 mcs.
true

Essa ação leva cerca de um segundo. A biblioteca alertará, mas retornará true - o botão foi pressionado.


Situação rara.

O botão Iniciar não foi pressionado. Isso pode ser resolvido somente com a reinicialização do Terminal.

Não tenho registros dessa situação. Demorará menos de 10 segundos para identificar essa situação. Haverá um alerta como este.

problem with Start-button!

Retorno falso - o botão não foi pressionado.

 
MTTester.mqh atualizado.
 
fxsaber #:

É uma situação rara.

O botão Iniciar não está pressionado. Isso só pode ser resolvido com a reinicialização do Terminal.

Uma máquina WinServer remota estava continuamente fazendo centenas de passagens únicas sem nenhuma falha.


Assim que me conectei (RDP) a essa máquina, o botão Iniciar parou de clicar. A solução, como sempre, é reiniciar o Terminal.

Parece que esse comportamento tem algo a ver com logins semelhantes na máquina. Você pode fazer login via RDP dezenas de vezes e tudo funciona bem. Mas algum login se torna fatal para o testador.


Aqueles que encontrarem o bug de inicialização devem prestar atenção à relação entre o login na máquina e o botão Iniciar.


ZY Coincidência ou não, o WinServer se ofereceu para verificar suas atualizações durante esse logon na máquina.

 

Boa biblioteca.
É possível especificar qual arquivo *.set com configurações de parâmetros deve ser passado programaticamente para o teste?

Por padrão, apenas as mesmas configurações são usadas, o que não é muito conveniente.

 
sergego18 #:

É possível especificar qual arquivo *.set com configurações de parâmetros deve ser passado programaticamente para o teste?

Exemplo.
 
fxsaber #:
Exemplo.

Obrigado.
É melhor passar as configurações em uma única linha com as linhas separadas pelo caractere \n.

ou em uma matriz de linhas, como no exemplo?

E é possível modificar em

método estático Run da classe MTTester

static bool Run( const string ExpertName = NULL,

const string Symb = NULL,

const ENUM_TIMEFRAMES period = PERIOD_CURRENT,

const datetime iBeginTime = 0,

const datetime iEndTime = 0 )

adicionar uma string de parâmetro (ou uma matriz de strings) que especifique as configurações do *.set EA?

 
sergego18 #:

Obrigado.
É melhor passar as configurações em uma única linha com as linhas separadas por um caractere \n?

ou em uma matriz de linhas como no exemplo?

GetSettings é CTRL+C no Tester.

SetSettings é CTRL+V no Tester.

Veja com quais dados o CTRL+C/V funciona.


E se é possível modificar em

método estático Run da classe MTTester

Eu não uso esse método. Ele permanece como histórico.


O exemplo mostra todos os métodos do MTTESTER que são necessários.

 
sergego18 #:

É possível especificar qual arquivo *.set com configurações de parâmetros deve ser passado programaticamente para o teste?

O Validate funciona com arquivos ini completos do testador e com uma versão reduzida - arquivos de configuração para o testador.

Se você precisar executar muitos arquivos ini/set, o Validate fará isso imediatamente. Use.

 
fxsaber #:

O Validate funciona com arquivos ini completos do Tester e com uma versão simplificada - set-files for Tester.

Se você precisar executar muitos arquivos ini/definição, o Validate fará isso imediatamente. Use.

Obrigado.
Encontrei uma solução neste comentário em que o arquivo de conjunto é carregado no formato necessário como uma matriz de strings.

https://www.mql5.com/ru/forum/318305/page34#comment_51842356

Também substituí

typedef bool (*INITDEINIT)( void );

ponteiro de chamadas de retorno na inicialização e desinicialização de cada execução

para a interface

interface InitDeInit {

bool RunInit();

bool RunDeInit();

};

que é implementada em um herdeiro

de uma classe semelhante à estrutura SETTINGS

e, portanto, no método RunInit().

Carrego o arquivo de configuração da ferramenta necessária.

typedef bool (*INITDEINIT)( void ); - esse ponteiro não permite que você saiba qual ferramenta está inicializando/desinicializando, portanto, é melhor usar um ponteiro para a interface, pois os ponteiros para métodos ainda não são suportados pelo MQL.

Com essa abordagem, não há necessidade de modificar o método MTTester::Run.



Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
  • 2024.01.21
  • Yuriy Bykov
  • www.mql5.com
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний