Обсуждение статьи "Непрерывная скользящая оптимизация (Часть 4): Программа для управления оптимизацией (автооптимизатор)"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
MetaQuotes
Модератор
214266
MetaQuotes  

Опубликована статья Непрерывная скользящая оптимизация (Часть 4): Программа для управления оптимизацией (автооптимизатор):

Основная цель данной статьи - описание механизма работы с получившимся приложением и его возможностей. Таким образом, статья фактически является инструкцией по использованию данного приложения, в которой рассказывается обо всех возможных подводных камнях и нюансах его настройки.

Для того чтобы перейти к рассмотрению работы самой созданной программы, сначала необходимо разобраться с целью данного проекта. Учитывая, что все мы решили для себя использовать научный подход к торговле и начали создавать четко запрограммированные торговые алгоритмы (не имеет значения — будь то индикаторные роботы или же основанные на применении модели нечеткой логики и нейронных сетей — все это запрограммированные алгоритмы, выполняющие конкретно поставленные задачи), то и подход к процессу отбора результатов их оптимизаций должен быть формализован. Иначе говоря, если в процессе торгов мы абстрагируемся от случайностей, то и процесс подготовки к торгам так же должен быть автоматизирован. В противном случае мы можем из той массы полученных параметров оптимизаций наугад выбирать понравившиеся результаты, что ближе к наитию, нежели к системной торговле. Озвученная идея является первым из мотивов, побудивших к созданию данного приложения, в следующая — это возможность тестирования алгоритмов через их оптимизацию — непрерывная скользящая оптимизация, которая визуально продемонстрирована на графике ниже.   


Непрерывная скользящая оптимизация чередует исторические (желтые) и форвардные (зеленого цвета) оптимизационные проходы на заданном временном интервале. К примеру, у нас доступна история на протяжении 10 лет. Мы определяем для себя, что оптимизационный промежуток должен состоять из интервала равного в 1 год, а форвардный — 1 квартал (или 3 месяца). В итоге мы получим на один проход оптимизации + форвард тест промежуток равный в 1,25 года (1 год + 1 квартал). На приложенной диаграмме каждая линия характеризует как раз озвученный временной интервал.

Автор: Andrey Azatskiy

fxsaber
16073
fxsaber  
Серьезная работа. Интересно было бы сравнить результаты между разными реализациями автооптимизации на одном и том же советнике.
Andrey Azatskiy
3108
Andrey Azatskiy  
fxsaber:
Серьезная работа. Интересно было бы сравнить результаты между разными реализациями автооптимизации на одном и том же советнике.

Благодарю за положительный отзыв

Good Beer
132
Good Beer  

Это-реально, подвиг с вашей стороны: на общественных началах провернуть такую работу. Тут одной писанины на неделю и около полугода разработки самого кода. Автоматизация оптимизации, разве не самая главная задача для клиентской части терминала? К сожалению MQ не уделяют ей внимания и больше обращают внимание на запросы брокеров (они платят). Странно, что нет взрыва восторженных коментариев пользователей. Что, никто не оптимизирует?

У меня пока не получилось скомпилировать проект, только посмотреть интерфейс в режиме отладки и почитать статью, но выглядит всё это крайне многообещяюще. Нужно найти инструкцию по компиляции в  Visual Studio.

Хорошо бы ещё добавить возможность перебора инструментов в обзоре рынка для каждого интервала оптимизации. Это потребует мощностей, но на коротких интевалах можно будет оценить результат. Ну, ещё,может быть, русская локализация? Но и так всё понятно.

Жму вам руку и кланяюсь за ваш труд.

Andrey Azatskiy
3108
Andrey Azatskiy  
Good Beer:

Это-реально, подвиг с вашей стороны: на общественных началах провернуть такую работу. Тут одной писанины на неделю и около полугода разработки самого кода. Автоматизация оптимизации, разве не самая главная задача для клиентской части терминала? К сожалению MQ не уделяют ей внимания и больше обращают внимание на запросы брокеров (они платят). Странно, что нет взрыва восторженных коментариев пользователей. Что, никто не оптимизирует?

У меня пока не получилось скомпилировать проект, только посмотреть интерфейс в режиме отладки и почитать статью, но выглядит всё это крайне многообещяюще. Нужно найти инструкцию по компиляции в  Visual Studio.

Хорошо бы ещё добавить возможность перебора инструментов в обзоре рынка для каждого интервала оптимизации. Это потребует мощностей, но на коротких интевалах можно будет оценить результат. Ну, ещё,может быть, русская локализация? Но и так всё понятно.

Жму вам руку и кланяюсь за ваш труд.

Благодарю Вас за комментарий, надеюсь мои наработки пригодятся. В дальнейших статьях - описано будет устройство самого проекта в VS а так же то каким образом можно реализовать Вашу собственную логику оптимизации. ведь в текущей реализации лишь стандартная форвард оптимизация, можно еще более интересные схемы придумать. 

Касательно компиляции, если Вы запустили проект в режиме отладки в студии, то он уже у Вас скомпилировался. Вы сможете найти его в директории MetaTrader Auto Optimiser/bin/Debug

Good Beer
132
Good Beer  

Ещё не запускал вашу программу, но уже появились первые вопросы:

1. Я правильно понял - не поддерживается пользовательский критерий оптимизации? Он очень был бы нужен.

2. Как обеспечивается непрерывное скольжение оптимизации? Нужно вводить все диапазоны оптимизации и форварда вручную? Почему бы не реализовать это так:

дата старта оптимизации/период оптимизации (мес; нед; день)/масштаб перида опт./период форварда/масштаб форварда. Програмно разбить период на проходы. Я так делал в мультитестере. А то год расписывать даже по неделе - крышу сорвёт. А ведь и скальпинг может быть.

3. Чисто любопытство: Зачем нужна макроподстановка "TESTER_ONLY"? Советник-же и без неё с графика выгрузится.

Andrey Azatskiy
3108
Andrey Azatskiy  
Good Beer:

Ещё не запускал вашу программу, но уже появились первые вопросы:

1. Я правильно понял - не поддерживается пользовательский критерий оптимизации? Он очень был бы нужен.

2. Как обеспечивается непрерывное скольжение оптимизации? Нужно вводить все диапазоны оптимизации и форварда вручную? Почему бы не реализовать это так:

дата старта оптимизации/период оптимизации (мес; нед; день)/масштаб перида опт./период форварда/масштаб форварда. Програмно разбить период на проходы. Я так делал в мультитестере. А то год расписывать даже по неделе - крышу сорвёт. А ведь и скальпинг может быть.

3. Чисто любопытство: Зачем нужна макроподстановка "TESTER_ONLY"? Советник-же и без неё с графика выгрузится.

1. Я пользовательский критерий не заполнял, так как много различных других подставил, однако в дальнейшем если проект надумаю развивать (как все статьи из данного цикла завершу, еще 2 планирую) - можно его будет добавить, это не сложно. Даже разумное решение, благодарю Вас за совет.

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

3. Макрос что бы случайно на реале не запустить. Эксперт тестовый многое не доделано для реальной торговли. И что бы кто то случайно не запустил его в реальные торги - решил поставить #define этот. Благодаря ему, работа эксперта дозволяется лишь в тестере, а если загрузить робота на график сразу - то он просто удалится. 

Andrey Azatskiy
3108
Andrey Azatskiy  
Good Beer:

2. Как обеспечивается непрерывное скольжение оптимизации? ...

В завершающей статье - опишу пошагово весь процесс обеспечения скольжения оптимизации с кодом приложенным. Там дело в том, что сам алгоритм оптимизации - реализуется отдельно. И как уже упоминал ранее, к текущему алгоритму оптимизации - можно иной добавить. 

Andrey Azatskiy
3108
Andrey Azatskiy  

Good Beer:

У меня пока не получилось скомпилировать проект ...

Самый простой и быстрый способ скомпилировать - открыть проект и нажать сочетание клавиш CTRL+SHIFT+B.

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

Еще один вариант - из выпадающего меню пункт Build

Позже по пути  MetaTrader Auto Optimiser/bin/Debug (или  MetaTrader Auto Optimiser/bin/Release, зависит от выбранного типа сборки) - появится скомпилированная программа.

Good Beer
132
Good Beer  

В окно сортировки можно ввести сразу несколько критериев оптимизации. Они как перемножаться?  Всё равно без пользовательского не обойтись. Напр. количество сделок хорошо учитывать как корень из него или шарп брать по модулю. Не бросайте пожалуйста эту идею.

Список периодов можно составить средствами MQL.

Про #define TESTER_ONLY я имел ввиду, что выражение в скобках сработает и без TESTER_ONLY. Я не понял зачем нужно применять подстановку?  Много раз такое видел.

Andrey Azatskiy
3108
Andrey Azatskiy  
Good Beer:

В окно сортировки можно ввести сразу несколько критериев оптимизации. Они как перемножаться?  Всё равно без пользовательского не обойтись. Напр. количество сделок хорошо учитывать как корень из него или шарп брать по модулю. Не бросайте пожалуйста эту идею.

Список периодов можно составить средствами MQL.

Про #define TESTER_ONLY я имел ввиду, что выражение в скобках сработает и без TESTER_ONLY. Я не понял зачем нужно применять подстановку?  Много раз такое видел.

Хорошо, как доделаю первый вариант статьи, запланирую себе продолжение, все равно есть ряд идей которые хотел бы реализовать.

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

Касательно дефайна:

#ifdef TESTER_ONLY
   if(MQLInfoInteger(MQL_TESTER)==0 &&
      MQLInfoInteger(MQL_OPTIMIZATION)==0)
     {
      Print("This expert was created for demonstration! It is not anabled for real trading !");
      ExpertRemove();
      return(INIT_FAILED);
     }
#endif

Выражение обернуто в конструкцию #ifdef #endif - это условие выполняемое на момент компиляции. Если скомпилировать проект определив #define TESTER_ONLY - то в сборку попадает то выражение что обернуто в данное условие, если же не объявить - то не попадает. Я так сделал что бы если вдруг кому то захочется поэксперементировать и запустить робота на свой страх и риск на реале, то все что потребуется - это лишь закоментировать #define TESTER_ONLY - не меняя исходный код.



Метод учета нескольких выбранных сортировок - описывается в первой статье из данного цикла статей. Там все через нормирование параметров происходит. Однако как уже говорил, Вы можете создать собственный оптимизатор и сделать свою систему учета данных параметров - это в грядущей статье будет.

12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий