Как отличить результаты оптимизации Forward от Backward?

 

В код эксперта можно пометить функции обработки результатов тестирования.

В OnTester() можно сгенерировать фрейм для обработки.

В OnTesterPass() можно принять фрейм и его обработать.

Как понять к какому этапу тестирования относится полученый результат? Делал прогон оптимизации из 5 прогонов и получил 5 фреймов от бекварда и 5 фреймов от форварда. Всего 10 штук.

Как разобрать откуда что??

 

Видимо функция OnTesterPass мало кого интересовала. Жаль. :(

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
micle:

Видимо функция OnTesterPass мало кого интересовала. Жаль. :(

Действителньо мало кто пользуется.  А ещё и с комбинацией беквард/ форвард видимо стремится к нулю.  Обратитесь к разработчикам (сервисдеск).

// А потом результат здесь отпишите, пжалста. (Чтоб будущие поколения тоже были в курсе, как же их отличить.)

 

В тех поддержку уже не верю. Разочаровался.

У меня мысли следующие: Ни в одном из перечислений состояния терминала не упоминается о стадии тестирования (искал долго. не нашел). Стало быть вариант тут только 1. Собирать все фреймы проходов, попутно отфильтровывая явные дубликаты по параметрам и результату. Тут есть вероятность получить разные результаты от разных агентов тестирования. Насколько велика эта вероятность я не берусь судить, но думается что она более чем нулевая. Дальше - веселее, когда начинается форвард тест, мы начинаем получать последовательные дубли, но с сильно отличающимся результатом от беквард теста. Вот тут и можно строить предположение откуда чего. Опять таки получается некая каша, в процессе варения которой приходится угадывать погоду на марсе. Всего этого бы не потребовалось, если бы в 1 из функций (OnTester либо OnTesterPass) была бы возможность определить текущий режим тестирования.

Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - Документация по MQL5
 
micle:

В тех поддержку уже не верю. Разочаровался.

У меня мысли следующие: Ни в одном из перечислений состояния терминала не упоминается о стадии тестирования (искал долго. не нашел). Стало быть вариант тут только 1. Собирать все фреймы проходов, попутно отфильтровывая явные дубликаты по параметрам и результату. Тут есть вероятность получить разные результаты от разных агентов тестирования. Насколько велика эта вероятность я не берусь судить, но думается что она более чем нулевая. Дальше - веселее, когда начинается форвард тест, мы начинаем получать последовательные дубли, но с сильно отличающимся результатом от беквард теста. Вот тут и можно строить предположение откуда чего. Опять таки получается некая каша, в процессе варения которой приходится угадывать погоду на марсе. Всего этого бы не потребовалось, если бы в 1 из функций (OnTester либо OnTesterPass) была бы возможность определить текущий режим тестирования.

Чёт вы переусложняете.  Я бы прямо во фрейм свою метку ставил.  Например дату/время последнего бара (или тупо TimeCurrent() ) в момент вызова OnTester().

По этой метке потом фреймы лекго отсортировать.

 
micle:

Видимо функция OnTesterPass мало кого интересовала. Жаль. :(

Я тут где-то публиковал эксперта Moving Average with Frames, который отсылает несколько видов фреймов. Вот здесь есть обсуждение с примером.

Для приёма нескольких видов фреймов вперемешку OnTesterPass не годится. Все фреймы можно принять в OnTesterDeinit. Но если Вы посылаете только один тип фреймов, тогда OnTesterPass запросто можно использовать (примеры использования тоже есть)

Фреймы я складывал по отдельности в каждый файл. Файл кодировал как <имя программы><номер прохода><идентификатор фрейма>.csv

Для Вашего случая реализация получается несколько сложнее. Самый простой вариант - мы посмотрим, что можно сделать для определения форварда. Но пока мы этого не сделали Вам надо озаботиться нужной информацией самостоятельно. Например, в начале каждого фрейма посылать дату начала тестирования и потом эту дату использовать для формирования имени файла.

Кстати, все фреймы Вы можете складывать и в один файл

 

stringo:Самый простой вариант - мы посмотрим, что можно сделать для определения форварда.

Вот это было бы здорово!.
 
micle:
Вот это было бы здорово!.

Сложно там всё. Мы посмотрели.

Всё упирается в асинхронность пересылки данных (1. Нельзя гарантировать очерёдность посылок. 2. Первые "форвардные" посылки могут прийти гораздо раньше последних "бэквардных" посылок) и существующую возможность принимать фреймы в любой момент - в OnTesterPass и в OnTesterDeinit

Для надёжного решения надо менять протокол обмена. А это сложно.

 
stringo:

Сложно там всё. Мы посмотрели.

Всё упирается в асинхронность пересылки данных (1. Нельзя гарантировать очерёдность посылок. 2. Первые "форвардные" посылки могут прийти гораздо раньше последних "бэквардных" посылок) и существующую возможность принимать фреймы в любой момент - в OnTesterPass и в OnTesterDeinit

Для надёжного решения надо менять протокол обмена. А это сложно.

А нельзя во время прохода тестирования (OnTester) определить что именно делали (Forward/Backward). Тогда можно было бы формировать разные фреймы, которые можно было бы уже разбирать наверняка.
 
micle:
А нельзя во время прохода тестирования (OnTester) определить что именно делали (Forward/Backward). Тогда можно было бы формировать разные фреймы, которые можно было бы уже разбирать наверняка.

Нет. Здесь опять проблема - агент ничего не знает о форвардности, ему дают только даты начала и конца тестирования. Вот на эти даты и надо ориентироваться.

Все даты начала форвард-тестирования будут одинаковые и отличаться от одинаковых же дат начала тестирования. Помечайте отсылаемый фрейм такой датой, и тогда сможете разруливать данные

FrameAdd(TimeToString(begin_date),number_identifier,data_count,data);
 
добавил глобальную переменную datetime timestart, в OnInit инициализирую её серверным временем, и отправляю вместе с фреймом. получается некое подобие идентификатора, чтобы разделить разные наборы фреймов. Чтож,  это вариант...  но хотелось бы не заниматься магией по угадыванию настроек границ дат с которыми была запущена оптимизация, а иметь четкий параметр режима тестирования (Forward/Backward).
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
Причина обращения: