程序库: 多功能测试仪 - 页 48

 
fxsaber #:

我是这么想的。

https://www.mql5.com/ru/blogs/post/748365

确定
 

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

我试过了,似乎无法获得测试仪参数。

请参见_LastError

复制一次文本必须按 Ctrl+C 键吗?

不需要。

 
fxsaber #:
查看_LastError

4009 err_notinitialised_string

 
hini #:

4009 err_notinitialized_string

未重现。

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 版本中,获取测试仪输入的问题已经解决。调试过程中发现,在数组 static const int ControlID[] = {0xE81E, 0x804E} 中,第二个元素(0x804E)返回的 Handle 等于 0,而第一个元素(0xE81E)返回的 Handle 有效。使用该句柄时,接收测试仪输入数据的工作正常。

测试表明,该方法在 b4879 版本中也能正常工作,因此在 b4885 版本中应该也没有问题。

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

也许最简单的方法是更改顺序

 
hini #:

修正了 b5120 版本中获取测试仪输入数据的问题。调试过程中发现,在数组 static 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);
  }