Kütüphaneler: MultiTester - sayfa 48

 
Tamam.
 

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

Denedim ve test cihazı parametrelerini alamıyorum.

Metni bir kez kopyalamak için Ctrl+C tuşlarına mı basmam gerekiyor?


 
hini #:

Denedim ve test cihazı parametrelerini alamıyorum.

Bkz. _LastError.

Metni bir kez kopyalamak için Ctrl+C tuşlarına mı basmam gerekiyor?

Hayır.

 
fxsaber #:
_LastError'a göz atın.

4009 ERR_NOTINITIALISED_STRING

 
hini #:

4009 ERR_NOTINITIALIZED_STRING

Yeniden üretilmedi.

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

Çalmıyor.

Bunun bir terminal sürümü sorunu olduğunu varsayıyorum - 5120 derlemesi test cihazı girdisini yeniden üretemiyor.

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

Bunun bir terminal sürümü sorunu olduğundan şüpheleniyorum, 5120'de tekrarlanamıyor.

Her şey b4885 üzerinde de çalışıyor.

 
fxsaber #:

Her şey b4885'te de çalışıyor.

Anladım.

 
hini #:
Bunun bir terminal sürümü sorunu olduğunu varsayıyorum - yapı 5120 test cihazı girdisini yeniden üretemiyor.

  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 sürümünde test cihazı girdisi alma ile ilgili sorun giderildi. Hata ayıklama sırasında, static const int ControlID[] = {0xE81E, 0x804E} dizisi için ikinci elemanın (0x804E) 0'a eşit Handle döndürdüğü, ilk elemanın (0xE81E) ise geçerli Handle döndürdüğü tespit edildi. Bu Tanıtıcı kullanıldığında, test cihazı giriş verilerinin alınması doğru şekilde çalışır.

Testler bu yöntemin b4879 sürümünde de çalıştığını göstermiştir ve muhtemelen b4885'te de sorun olmayacaktır.

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

Belki de yapılacak en kolay şey sıralamayı değiştirmektir

 
hini #:

b5120 sürümünde test cihazı giriş verilerinin alınmasıyla ilgili bir sorun düzeltildi. Hata ayıklama sırasında, static const int ControlID[] = {0xE81E, 0x804E} dizisi için ikinci elemanın (0x804E) 0'a eşit Tanıtıcı döndürdüğü, ilk elemanın (0xE81E) ise geçerli Tanıtıcı döndürdüğü tespit edildi. Bu Tutamacı kullanırken, test cihazı giriş verilerini almak doğru şekilde çalışır.

Testler bu yöntemin b4879 sürümünde de çalıştığını göstermiştir ve muhtemelen b4885'te de sorun olmayacaktır.

Belki de yapılacak en kolay şey sıralamayı değiştirmektir

MTTester.mqh'nin güncel sürümünü kullandığınızdan emin misiniz? Aşağıdaki kod orada.

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