Bibliotheken: MultiTester - Seite 48

 
 

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

Ich habe es versucht und kann die Parameter des Testers nicht finden.

Muss ich Strg+C drücken, um den Text einmal zu kopieren?


 
hini #:

Ich habe es versucht und kann die Parameter des Testers nicht finden.

Siehe _LastError.

Muss ich Strg+C drücken, um den Text einmal zu kopieren?

Nein.

 
fxsaber #:
Überprüfen Sie _LastError.

4009 ERR_NOTINITIALISED_STRING

 
hini #:

4009 ERR_NOTINITIALIZED_STRING

Nicht reproduziert.

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

Es wird nicht gespielt.

Ich nehme an, dass dies ein Problem der Terminalversion ist - Build 5120 kann die Eingaben des Testers nicht reproduzieren.

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

Ich vermute, dass es sich um ein Problem mit der Terminalversion handelt, da es auf dem 5120 nicht reproduzierbar ist.

Auf dem b4885 funktioniert ebenfalls alles.

 
fxsaber #:

Auch bei der b4885 funktioniert alles.

Habe es

 
hini #:
Ich nehme an, dass es sich um ein Problem mit der Terminalversion handelt - Build 5120 kann die Eingaben des Testers nicht reproduzieren.

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

Das Problem mit dem Erhalt von Testeingaben in Version b5120 wurde behoben. Während der Fehlersuche wurde festgestellt, dass für das Array static const int ControlID[] = {0xE81E, 0x804E} das zweite Element (0x804E) Handle gleich 0 zurückgibt, während das erste Element (0xE81E) gültiges Handle zurückgibt. Bei Verwendung dieses Handles funktioniert der Empfang der Eingabedaten des Testers korrekt.

Tests haben gezeigt, dass diese Methode auch in der Version b4879 funktioniert, und vermutlich sollte es auch in b4885 keine Probleme geben.

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

Am einfachsten ist es vielleicht, die Reihenfolge zu ändern

 
hini #:

Ein Problem mit dem Erhalt von Tester-Eingabedaten in der Version b5120 wurde behoben. Während der Fehlersuche wurde festgestellt, dass für das Array static const int ControlID[] = {0xE81E, 0x804E} das zweite Element (0x804E) Handle gleich 0 zurückgibt, während das erste Element (0xE81E) gültiges Handle zurückgibt. Bei Verwendung dieses Handles funktioniert der Empfang der Eingabedaten des Testers korrekt.

Tests haben gezeigt, dass diese Methode auch in der Version b4879 funktioniert, und vermutlich sollte es auch in b4885 keine Probleme geben.

Am einfachsten ist es vielleicht, die Reihenfolge zu ändern

Sind Sie sicher, dass Sie die aktuelle Version von MTTester.mqh verwenden? Der folgende Code ist dort enthalten.

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