Обсуждение статьи "Рецепты MQL5 - Сохраняем результаты оптимизации торгового эксперта по указанным критериям"

 

Опубликована статья Рецепты MQL5 - Сохраняем результаты оптимизации торгового эксперта по указанным критериям:

Продолжим серию статей по программированию на MQL5. На этот раз рассмотрим, как можно получать результаты по каждому проходу оптимизации непосредственно во время оптимизации параметров эксперта. При этом сделаем так, что если условия, которые будут настраиваться во внешних параметрах, исполняются, то показатели этого прохода будут записываться в файл. Кроме показателей тестов будем сохранять еще параметры, по которым был получен этот результат.

Рецепты MQL5 - Сохраняем результаты оптимизации торгового эксперта по указанным критериям

Чтобы получить доступ к данным во время оптимизации в MQL5 есть специальные функции: OnTesterInit(), OnTester(), OnTesterPass() и OnTesterDeinit(). Кратко рассмотрим каждую из них:

  • OnTesterInit() - с помощью этой функции определяется начало оптимизации.
  • OnTester() - в этой функции будет производиться добавление так называемых фреймов во время оптимизации после каждого прохода. Что такое фреймы будет объясняться ниже.
  • OnTesterPass() - эта функция принимает фреймы во время оптимизации после каждого прохода.
  • OnTesterDeinit() - в этой функции генерируется событие об окончании оптимизации параметров эксперта.

Теперь нужно разобраться, что такое фреймы. Фрейм это своего рода структура данных отдельного прохода оптимизации. Фреймы во время оптимизации сохраняются в архив *.mqd, который создается в каталоге MetaTrader 5/MQL5/Files/Tester. К данным (фреймам) этого архива можно обращаться, как во время оптимизации "на лету", так и после окончания оптимизации. Например, в статье Визуализируй стратегию в тестере MetaTrader 5 показан пример того, как можно визуализировать процесс оптимизации "на лету" и затем включить просмотр всех результатов после оптимизации.

Автор: Anatoli Kazharski

 

Весьма любопытно и главное востребовано, ещё бы узнать процент прибыльных сделок в том числе в разрезе их направления...

А для MT4 переделка возможна? 

 
-Aleks-:

Весьма любопытно и главное востребовано, ещё бы узнать процент прибыльных сделок в том числе в разрезе их направления...

А для MT4 переделка возможна? 

Можно добавить любые показатели: https://www.mql5.com/ru/docs/constants/environment_state/statistics, внеся небольшие изменения самостоятельно.

Для MT4 есть вот такой вариант: Техника оптимизации (тестирования) и некоторые критерии выбора рабочих параметров эксперта 

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

Можно добавить любые показатели: https://www.mql5.com/ru/docs/constants/environment_state/statistics, внеся небольшие изменения самостоятельно.

Для MT4 есть вот такой вариант: Техника оптимизации (тестирования) и некоторые критерии выбора рабочих параметров эксперта  

Да, я ознакомился со статьей по MT4 , но мне вот этих данных недостаточно, а других способов с получением большей информации по аналогии с MT5 нет? 

 
-Aleks-:

Да, я ознакомился со статьей по MT4 , но мне вот этих данных недостаточно, а других способов с получением большей информации по аналогии с MT5 нет? 

К сожалению не смогу подсказать (может кто-нибудь другой сможет дать ответ). Сам я окончательно перешёл на MT5 и ориентируюсь на возможности только этого терминала.
 

В связи с тем, что начал работать в MT5 вернулся к Вашей статье.

И вот что мне интересно, можно ли упорядочить отчет по номеру прохода, а не так, как сейчас по порядку прихода фрейма от прохода?

Это удобно для целей сравнения двух отчетов (без фильтров особенно) с разными настройками - из опыта работы с отчетами  в MT4.

Собственно, это можно сделать, если знать сколько всего будет проходов, тогда можно записывать информацию в массив и в конце выгружать его в файл, но как рассчитать количество проходов?

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

 
Aleksey Vyazmikin:

...

Собственно, это можно сделать, если знать сколько всего будет проходов, тогда можно записывать информацию в массив и в конце выгружать его в файл, но как рассчитать количество проходов?

...

Чтобы добавить данные в массив необязательно знать изначально, сколько будет всего проходов.

 
Anatoli Kazharski:

Чтобы добавить данные в массив необязательно знать изначально, сколько будет всего проходов.


Может подскажите элегантное решение как это сделать?  Я не программист и мне сложно - пол дня потратил, что б выкинуть лишние фильтры для меня из Вашего примера...

 
Aleksey Vyazmikin:

Может подскажите элегантное решение как это сделать?  Я не программист и мне сложно - пол дня потратил, что б выкинуть лишние фильтры для меня из Вашего примера...

Не планировал возвращаться к этой теме в ближайшее время.

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

 
Anatoli Kazharski:

Не планировал возвращаться к этой теме в ближайшее время.

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


Да задача у меня простая - записывать проходы по порядковому номеру, а не в последовательности поступления результатов оптимизации.

 
Aleksey Vyazmikin:

Да задача у меня простая - записывать проходы по порядковому номеру, а не в последовательности поступления результатов оптимизации.

Добавляйте в динамический массив, как есть, а потом отсортируйте в конце оптимизации.