Библиотеки: MultiTester - страница 48

 
hini #:
Ведь Virtual позволяет проводить виртуальный бэктестинг, правда, только для собственных стратегий. А MultiTester может запускать любые ex5-файлы. Я хотел спросить: ты даже для своих стратегий используешь MultiTester для автоматического бэктестинга?  

Использую.

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

Несколько MT5-тестеров параллельно на одной машине.
Несколько MT5-тестеров параллельно на одной машине.
  • www.mql5.com
Автоматизация MT5-Тестера потребовала параллельного использования нескольких Тестеров на одной машине: оптимизация ( MultiTester ) и одиночные проходы ( Validate и TesterDashboard ). Необходимость
 
хорошо
 

//#include "..\utils\fxsaber\MultiTester\MTTester.mqh" // https://www.mql5.com/ru/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_NOTINITIALIZED_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. При использовании этого Handle получение входных данных тестера работает корректно.

Тестирование показало, что данный метод работает и в версии b4879, и, предположительно, в b4885 тоже не должно быть проблем.

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

Возможно, проще всего изменить порядок