라이브러리: 멀티 테스터 - 페이지 48

 
 

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

테스터 매개 변수를 가져올 수 없는 것 같아요.

텍스트를 한 번 복사하려면 Ctrl+C를 눌러야 하나요?


 
hini #:

시도해 보았지만 테스터 매개 변수를 얻을 수 없는 것 같습니다.

마지막 오류를 참조하세요.

텍스트를 한 번 복사하려면 Ctrl+C를 눌러야 하나요?

아니요.

 
fxsaber #:
마지막 오류를 확인하세요.

4009 오류_미초기화_스트링

 
hini #:

4009 오류_미초기화_스트링

재생성되지 않았습니다.

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

재생되지 않습니다.

터미널 버전 문제인 것 같습니다. 빌드 5120에서 테스터 입력을 재현하지 못합니다.

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

터미널 버전 문제인 것 같고 5120에서는 재현할 수 없습니다.

b4885에서도 모든 것이 작동합니다.

 
fxsaber #:

b4885에서도 모든 것이 작동합니다.

알겠습니다.

 
hini #:
터미널 버전 문제인 것 같습니다. 빌드 5120에서 테스터 입력을 재현하지 못합니다.

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

b5120 버전에서 테스터 입력을 받는 문제가 수정되었습니다. 디버깅 중에 배열 정적 const int ControlID[] = {0xE81E, 0x804E}의 경우 두 번째 요소(0x804E)는 0과 같은 Handle을 반환하고 첫 번째 요소(0xE81E)는 유효한 Handle을 반환한다는 사실을 발견했습니다. 이 핸들을 사용하면 테스터 입력 데이터 수신이 올바르게 작동합니다.

테스트 결과 이 메서드는 b4879 버전에서도 작동하는 것으로 확인되었으며, 아마도 b4885에서도 문제가 없을 것입니다.

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

가장 쉬운 방법은 다음 순서를 변경하는 것입니다.

 
hini #:

b5120 버전에서 테스터 입력 데이터를 가져오는 문제를 수정했습니다. 디버깅 중에 배열 정적 const int ControlID[] = {0xE81E, 0x804E}의 경우 두 번째 요소(0x804E)는 0과 동일한 핸들을 반환하는 반면 첫 번째 요소(0xE81E)는 유효한 핸들을 반환하는 것으로 확인되었습니다. 이 핸들을 사용하면 테스터 입력 데이터 수신이 올바르게 작동합니다.

테스트 결과 이 메서드는 b4879 버전에서도 작동하는 것으로 확인되었으며, b4885에서도 문제가 없을 것으로 예상됩니다.

가장 쉬운 방법은 다음 순서를 변경하는 것입니다.

현재 버전의 MTTester.mqh를 사용하고 계신가요? 다음 코드가 있습니다.

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