ライブラリ: マルチテスター - ページ 48

 
オーケー
 

//#include "..◆utilsfxsaber◆MultiTester◆MTTester.mqh" //https://www.mql5.com/ja/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} に対して、2番目の要素(0x804E)は0に等しいHandleを返し、1番目の要素(0xE81E)は有効なHandleを返すことがわかりました。このHandleを使用すると、テスター入力データの受信が正しく機能します。

テストによると、この方法はb4879バージョンでも動作し、おそらくb4885でも問題はないはずである。

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

おそらく最も簡単なのは、次の順序を変更することであろう。

 
hini #:

b5120バージョンでテスター入力データを取得する際の問題を修正しました。デバッグ中に、配列 static const int ControlID[] = {0xE81E, 0x804E} に対して、2番目の要素(0x804E)は0に等しいHandleを返し、1番目の要素(0xE81E)は有効なHandleを返すことがわかりました。このHandleを使用すると、テスター入力データの受信が正しく動作します。

テストによると、この方法は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);
  }