Bibliotecas: MultiTester - página 48

 
 

//#include "..\utils\fxsaber\MultiTester\MTTester.mqh" // https://www.mql5.com/pt/code/26132
#include <fxsaber\MultiTester\MTTester.mqh>
input group "MTTester"
sinput int inA = 22;
sinput int inB = 33;
sinput bool inC = false;

void OnInit()
{
  const bool IsTester = MQLInfoInteger(MQL_TESTER);

  if (!IsTester)
  {
    string Settings;
    bool ok1 = MTTESTER::GetSettings2(Settings);
    Print(ok1, " ", Settings);
  }  
}  

Tentei e não consegui obter os parâmetros do testador.

Tenho que pressionar Ctrl+C para copiar o texto uma vez?


 
hini #:

Tentei fazer isso e não consegui obter os parâmetros do testador.

Consulte _LastError.

Tenho que pressionar Ctrl+C para copiar o texto uma vez?

Não.

 
fxsaber #:
Verifique o _LastError.

4009 ERR_NOTINITIALISED_STRING

 
hini #:

4009 ERR_NOTINITIALIZED_STRING

Não reproduzido.

2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) true [Tester]
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) Expert=Examples\MACD\MACD Sample.ex5
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) Symbol=EURUSD
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) Period=M1
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) Optimization=1
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) Model=3
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) [TesterInputs]
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) ; MTTester
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) inA=22
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) inB=33
2025.06.28 20:28:31.981 MACD Sample (EURUSD,M1) inC=false
 
fxsaber #:

Não está tocando.

Presumo que esse seja um problema da versão do terminal - a compilação 5120 não reproduz a entrada do testador.

#include <fxsaber\MultiTester\MTTester.mqh>
input group "MTTester"
sinput int inA = 22;
sinput int inB = 33;
sinput bool inC = false;

void OnInit()
{
  const bool IsTester = MQLInfoInteger(MQL_TESTER);
  ResetLastError();
  if (!IsTester)
  {
    string Settings = "";
    bool ok1 = MTTESTER::GetSettings2(Settings);
    Print(ok1, " error=", _LastError," BUILD:", __MQL5BUILD__, " ", Settings);
  }  
}

 
hini #:

Suspeito que seja um problema de versão do terminal, pois não é possível reproduzi-lo no 5120.

Tudo funciona no b4885 também.

 
fxsaber #:

Tudo funciona no b4885 também.

Entendi

 
hini #:
Presumo que esse seja um problema da versão do terminal - a compilação 5120 não consegue reproduzir a entrada do testador.

  static long GetHandle( const int &ControlID[] )
  {
    long Handle = MTTESTER::GetTerminalHandle();
    const int Size = ::ArraySize(ControlID);

    for (int i = 0; i < Size; i++) {
      Handle = user32::GetDlgItem(Handle, ControlID[i]);
      if (Handle != 0) return Handle;
    }

    return(Handle);
  }

O problema de obter a entrada do testador na versão b5120 foi corrigido. Durante a depuração, descobriu-se que, para a matriz static const int ControlID[] = {0xE81E, 0x804E}, o segundo elemento (0x804E) retorna um identificador igual a 0, enquanto o primeiro elemento (0xE81E) retorna um identificador válido. Ao usar esse identificador, o recebimento dos dados de entrada do testador funciona corretamente.

Os testes mostraram que esse método também funciona na versão b4879 e, presumivelmente, não deve haver problemas na b4885 também.

static const int ControlID[] = {0x804E, 0xE81E}; //{0xE81E, 0x804E};

Talvez a coisa mais fácil a fazer seja alterar a ordem

 
hini #:

Foi corrigido um problema com a obtenção de dados de entrada do testador na versão b5120. Durante a depuração, descobriu-se que, para a matriz static const int ControlID[] = {0xE81E, 0x804E}, o segundo elemento (0x804E) retorna o identificador igual a 0, enquanto o primeiro elemento (0xE81E) retorna um identificador válido. Ao usar esse identificador, o recebimento dos dados de entrada do testador funciona corretamente.

Os testes mostraram que esse método também funciona na versão b4879 e, presumivelmente, não deve haver problemas na b4885 também.

Talvez a coisa mais fácil a fazer seja alterar a ordem

Tem certeza de que está usando a versão atual do MTTester.mqh? O código a seguir está lá.

  static long GetHandle( const int &ControlID[] )
  {
    static const bool MT5_b5050 = (::TerminalInfoInteger(TERMINAL_BUILD) > 5000);

    long Handle = MTTESTER::GetTerminalHandle();
    const int Size = ::ArraySize(ControlID);

    for (int i = 0; i < Size; i++)
      if (!MT5_b5050 || (ControlID[i] != 0xE81E))
        Handle = user32::GetDlgItem(Handle, ControlID[i]);

    return(Handle);
  }