Librerie: MultiTester - pagina 48

 
 

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

Ho provato e non riesco a ottenere i parametri del tester.

Devo premere Ctrl+C per copiare il testo una volta?


 
hini #:

Ho provato e non riesco a ottenere i parametri del tester.

Vedere _LastError.

Devo premere Ctrl+C per copiare il testo una volta?

No, non è necessario.

 
fxsaber #:
Controllare _LastError.

4009 ERR_NOTINITIALISED_STRING

 
hini #:

4009 ERR_NOTINITIALIZED_STRING

Non riprodotto.

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 #:

Non sta giocando.

Presumo che si tratti di un problema di versione del terminale: la build 5120 non riesce a riprodurre gli input del tester.

#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 #:

Sospetto che sia un problema di versione del terminale, non è riproducibile sul 5120.

Tutto funziona anche su b4885.

 
fxsaber #:

Tutto funziona anche sul b4885.

Ottenuto

 
hini #:
Presumo che si tratti di un problema legato alla versione del terminale: la build 5120 non riesce a riprodurre l'input del tester.

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

Il problema di ottenere l'input del tester nella versione b5120 è stato risolto. Durante il debug è stato rilevato che per l'array statico const int ControlID[] = {0xE81E, 0x804E} il secondo elemento (0x804E) restituisce Handle uguale a 0, mentre il primo elemento (0xE81E) restituisce Handle valido. Utilizzando questo Handle, la ricezione dei dati di input del tester funziona correttamente.

I test hanno dimostrato che questo metodo funziona anche nella versione b4879 e presumibilmente non dovrebbero esserci problemi anche nella b4885.

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

Forse la cosa più semplice da fare è modificare l'ordine

 
hini #:

Corretto un problema con l'ottenimento dei dati di input del tester nella versione b5120. Durante il debug è stato rilevato che per l'array statico const int ControlID[] = {0xE81E, 0x804E} il secondo elemento (0x804E) restituisce Handle uguale a 0, mentre il primo elemento (0xE81E) restituisce Handle valido. Utilizzando questo Handle, la ricezione dei dati di ingresso del tester funziona correttamente.

I test hanno dimostrato che questo metodo funziona anche nella versione b4879 e presumibilmente non dovrebbero esserci problemi anche nella b4885.

Forse la cosa più semplice da fare è modificare l'ordine

Siete sicuri di utilizzare la versione attuale di MTTester.mqh? Il codice seguente è presente.

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