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

 
fxsaber #:

Благодарю за помощь в тестировании! Обновленный MTTester.mqh выложил.

Огромное спасибо за библиотеку

 
Снова обновлен MTTester.mqh. На этот раз расскажу, с чем была борьба.
#include <fxsaber\Benchmark\Benchmark.mqh>  // https://www.mql5.com/ru/code/31279
#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/ru/code/26132

const bool Init = EventSetTimer(3);

void OnTimer()
{
  if (MTTESTER::IsReady()) // Если кнопка Start готова к нажатию
    Print(_B(MTTESTER::ClickStart(), 1)); // Получилось ли нажать на кнопку Start и сколько времени ушло на это.
}

Этот советник каждые три секунды нажимает на кнопку Start, если она не Stop. Получилось нажать - true, иначе - false.


Стандартная ситуация.

Нажали на Start - запустился расчет.

Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 125248 mcs.
true
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 123327 mcs.
true

На это действие уходит ~125 мс. 


Нередкая ситуация.

Нажали на Start - запустился либо мгновенный расчет, либо Тестер сообщил, что не может совершить расчет (например, FromDate >= ToDate).

Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1001401 mcs.
true
Alert: MTTester.mqh: Start->Stop - is not detected!
Alert: Bench_Stack = 0, 1 <= Time[Test.mq5 9 in OnTimer: MTTESTER::ClickStart()] = 1004102 mcs.
true

На это действие уходит около секунды. Библиотека будет алертить, но вернет true - кнопка нажималась.


Редкая ситуация.

Start не нажимается. Такое лечится только перезагрузкой Терминала.

У меня нет логов такой ситуации. На идентификацию такого уйдет <10 секунд. Будет такой алерт.

problem with Start-button!

Возврат false - кнопка не нажалась.

 
Обновлен MTTester.mqh.
 
fxsaber #:

Редкая ситуация.

Start не нажимается. Такое лечится только перезагрузкой Терминала.

Удаленная WinServer-машина непрерывно делала сотни одиночных проходов без каких-либо сбоев.


Как только зашел (RDP) на эту машину, кнопка Start прекратила нажиматься. Лечится, как всегда - перезагрузка Терминала.

Похоже, такое поведение как-то связано с подобным заходом на машину. Можно десятки раз заходить через RDP - все работает замечательно. Но какой-то заход становится роковым для Тестера.


Кто сталкивается со Start-багом - обратите внимание на взаимосвязь захода на машину и кнопкой Start.


ЗЫ Совпадение или нет, WinServer в  этот заход на машину предложила еще посмотреть свои обновления.

 

Хорошая библиотека.
А можно ли указать какой *.set файл с настройками параметров передать программно для теста?

По умолчанию только одни и те же настройки используются, что не очень удобно.

 
sergego18 #:

А можно ли указать какой *.set файл с настройками параметров передать программно для теста?

Пример.
 
fxsaber #:
Пример.

Благодарю. 
А Settings лучше передавать одной строкой где rows разделены символом \n

или массивом строк как в примере?

И можно ли модифицировать в

классе MTTester статический метод Run

  static bool Run( const string ExpertName = NULL,

                   const string Symb = NULL,

                   const ENUM_TIMEFRAMES period = PERIOD_CURRENT,

                   const datetime iBeginTime = 0,

                   const datetime iEndTime = 0 )

добавить один параметр строку ( или массив строк ) которые задают *.set настройки советника?

 
sergego18 #:

Благодарю. 
А Settings лучше передавать одной строкой где rows разделены символом \n

или массивом строк как в примере?

GetSettings  - это CTRL+C  в Тестере.

SetSettings - это CTRL+V в Тестере.

Посмотрите, с какими данными CTRL+C/V работает.


И можно ли модифицировать в

классе MTTester статический метод Run

Не использую этот метод. Остался, как история.


В примере показаны все MTTESTER-методы, что нужны.

 
sergego18 #:

А можно ли указать какой *.set файл с настройками параметров передать программно для теста?

Validate работает с полноценными ini-файлами Тестера и урезанным вариантом - set-файлами для Тестера.

Если нужно прогнать много ini/set-файлов - Validate делает это из коробки сразу. Пользуюсь.

 
fxsaber #:

Validate работает с полноценными ini-файлами Тестера и урезанным вариантом - set-файлами для Тестера.

Если нужно прогнать много ini/set-файлов - Validate делает это из коробки сразу. Пользуюсь.

Благодарю.
я нашел решение из этого комментария где загружается файл set в нужном формате в виде строкового массива

https://www.mql5.com/ru/forum/318305/page34#comment_51842356

также я заменил 

typedef bool (*INITDEINIT)( void );  

указатель callback вызовов при инициализации и деинициализации каждого прогона

на интерфейс

interface InitDeInit {

   bool RunInit();

   bool RunDeInit();

};

который реализовал в наследнике 

класса похожего на структуру struct SETTINGS

и таким образом в методе RunInit() 

 я загружаю set файл нужного инструмента.

typedef bool (*INITDEINIT)( void );   - такой pointer не позволяет узнать на каком инструменте происходит инициализация/деинициализация, поэтому лучше использовать указатель на интерфейс так как указатели на методы пока не поддерживаются языком MQL.

При таком подходе не нужно модифицировать MTTester::Run метод.



Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
Библиотеки: MultiTester - Обновил платформу MetaTrader 5 build 3550 улучшения и исправления Fxsaber.
  • 2024.01.21
  • Yuriy Bykov
  • www.mql5.com
You can add this draft function for reading settings from file to string array. автоматическим торговым системам и тестированию торговых стратегий. Validate умеет запускать последовательно много ini-задайний
Причина обращения: