Видимо функция OnTesterPass мало кого интересовала. Жаль. :(
- www.mql5.com
Действителньо мало кто пользуется. А ещё и с комбинацией беквард/ форвард видимо стремится к нулю. Обратитесь к разработчикам (сервисдеск).
// А потом результат здесь отпишите, пжалста. (Чтоб будущие поколения тоже были в курсе, как же их отличить.)
В тех поддержку уже не верю. Разочаровался.
У меня мысли следующие: Ни в одном из перечислений состояния терминала не упоминается о стадии тестирования (искал долго. не нашел). Стало быть вариант тут только 1. Собирать все фреймы проходов, попутно отфильтровывая явные дубликаты по параметрам и результату. Тут есть вероятность получить разные результаты от разных агентов тестирования. Насколько велика эта вероятность я не берусь судить, но думается что она более чем нулевая. Дальше - веселее, когда начинается форвард тест, мы начинаем получать последовательные дубли, но с сильно отличающимся результатом от беквард теста. Вот тут и можно строить предположение откуда чего. Опять таки получается некая каша, в процессе варения которой приходится угадывать погоду на марсе. Всего этого бы не потребовалось, если бы в 1 из функций (OnTester либо OnTesterPass) была бы возможность определить текущий режим тестирования.
- www.mql5.com
В тех поддержку уже не верю. Разочаровался.
У меня мысли следующие: Ни в одном из перечислений состояния терминала не упоминается о стадии тестирования (искал долго. не нашел). Стало быть вариант тут только 1. Собирать все фреймы проходов, попутно отфильтровывая явные дубликаты по параметрам и результату. Тут есть вероятность получить разные результаты от разных агентов тестирования. Насколько велика эта вероятность я не берусь судить, но думается что она более чем нулевая. Дальше - веселее, когда начинается форвард тест, мы начинаем получать последовательные дубли, но с сильно отличающимся результатом от беквард теста. Вот тут и можно строить предположение откуда чего. Опять таки получается некая каша, в процессе варения которой приходится угадывать погоду на марсе. Всего этого бы не потребовалось, если бы в 1 из функций (OnTester либо OnTesterPass) была бы возможность определить текущий режим тестирования.
Чёт вы переусложняете. Я бы прямо во фрейм свою метку ставил. Например дату/время последнего бара (или тупо TimeCurrent() ) в момент вызова OnTester().
По этой метке потом фреймы лекго отсортировать.
Я тут где-то публиковал эксперта Moving Average with Frames, который отсылает несколько видов фреймов. Вот здесь есть обсуждение с примером.
Для приёма нескольких видов фреймов вперемешку OnTesterPass не годится. Все фреймы можно принять в OnTesterDeinit. Но если Вы посылаете только один тип фреймов, тогда OnTesterPass запросто можно использовать (примеры использования тоже есть)
Фреймы я складывал по отдельности в каждый файл. Файл кодировал как <имя программы><номер прохода><идентификатор фрейма>.csv
Для Вашего случая реализация получается несколько сложнее. Самый простой вариант - мы посмотрим, что можно сделать для определения форварда. Но пока мы этого не сделали Вам надо озаботиться нужной информацией самостоятельно. Например, в начале каждого фрейма посылать дату начала тестирования и потом эту дату использовать для формирования имени файла.
Кстати, все фреймы Вы можете складывать и в один файл
stringo:Самый простой вариант - мы посмотрим, что можно сделать для определения форварда.
Вот это было бы здорово!.
Сложно там всё. Мы посмотрели.
Всё упирается в асинхронность пересылки данных (1. Нельзя гарантировать очерёдность посылок. 2. Первые "форвардные" посылки могут прийти гораздо раньше последних "бэквардных" посылок) и существующую возможность принимать фреймы в любой момент - в OnTesterPass и в OnTesterDeinit
Для надёжного решения надо менять протокол обмена. А это сложно.
Сложно там всё. Мы посмотрели.
Всё упирается в асинхронность пересылки данных (1. Нельзя гарантировать очерёдность посылок. 2. Первые "форвардные" посылки могут прийти гораздо раньше последних "бэквардных" посылок) и существующую возможность принимать фреймы в любой момент - в OnTesterPass и в OnTesterDeinit
Для надёжного решения надо менять протокол обмена. А это сложно.
А нельзя во время прохода тестирования (OnTester) определить что именно делали (Forward/Backward). Тогда можно было бы формировать разные фреймы, которые можно было бы уже разбирать наверняка.
Нет. Здесь опять проблема - агент ничего не знает о форвардности, ему дают только даты начала и конца тестирования. Вот на эти даты и надо ориентироваться.
Все даты начала форвард-тестирования будут одинаковые и отличаться от одинаковых же дат начала тестирования. Помечайте отсылаемый фрейм такой датой, и тогда сможете разруливать данные
FrameAdd(TimeToString(begin_date),number_identifier,data_count,data);
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В код эксперта можно пометить функции обработки результатов тестирования.
В OnTester() можно сгенерировать фрейм для обработки.
В OnTesterPass() можно принять фрейм и его обработать.
Как понять к какому этапу тестирования относится полученый результат? Делал прогон оптимизации из 5 прогонов и получил 5 фреймов от бекварда и 5 фреймов от форварда. Всего 10 штук.
Как разобрать откуда что??