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

 

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

Третья статья служит неким мостом между двумя предыдущими, в ней освещается механизм взаимодействия с DLL, написанной в первой статье, и объектами для выгрузки из второй статьи. Показывается процесс создания обертки для класса, который импортируется из DLL и формирует XML-файл с историей торгов, а также способ взаимодействии с данной оберткой.

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

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

Автор: Andrey Azatskiy

 

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

Между тем, реальную значимость (трейдерскую) данной работы на этом ресурсе, насколько я вижу, еще не оценил никто. Но это не удивительно, до такого уровня надо еще дорасти. Как и mt5 давно бы хорошо было дорасти до нормального WFO, но он никак не хочет... А кроме того, какой простор открывается для создания дополнений! Больше всего хочу реализовать кросс-валидацию, чтобы бить историю на K частей, каждую из них выкидывать по очереди, оптимизировать на оставшихся, затем проверять на выкинутой, и так K раз. Любые гипотезы, начиная с простейшего "устойчивого сета параметров", можно проверить с куда большей надежностью, чем при обычной скользящей опте.

 
Kristian Kafarov:

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

Между тем, реальную значимость (трейдерскую) данной работы на этом ресурсе, насколько я вижу, еще не оценил никто. Но это не удивительно, до такого уровня надо еще дорасти. Как и mt5 давно бы хорошо было дорасти до нормального WFO, но он никак не хочет... А кроме того, какой простор открывается для создания дополнений! Больше всего хочу реализовать кросс-валидацию, чтобы бить историю на K частей, каждую из них выкидывать по очереди, оптимизировать на оставшихся, затем проверять на выкинутой, и так K раз. Любые гипотезы, начиная с простейшего "устойчивого сета параметров", можно проверить с куда большей надежностью, чем при обычной скользящей опте.

Благодарю Вас за столь лестный отзыв. У меня планируется еще 3 статьи в которых сам авто оптимизатор будет описан. В одной из статей будет конкретная инструкция по применению и сама программка. Так много статей от того что не верно будет лишь выложить результат проделанной работы не объяснив как он достигается. На текущий момент описана часть выгрузки отчетов оптимизации и то как они формируются, в следующих статьях (как раз сейчас работаю над ними), описывается сам оптимизатор - это программа написанная на C# которая запускает оптимизацию в терминале. Кстати в данной программе сам алгоритм оптимизации вынесен в интерфейсную часть, посему как только цикл статей будет завершен, Вы сможете реализовать Вашу задумку, для этого нужно будет реализовать интерфейс IOptimiser на C# и подключить конструктор пользовательского оптимизатора, о том как это делается - будет подробно рассказано в одной из грядущих статей.  

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

 
Andrey Azatskiy:

У меня планируется еще 3 статьи в которых сам авто оптимизатор будет описан. 

Совсем недавно вплотную уперся в необходимость автоматизации процесса. Разработал метод оптимизации, дающий устойчивый положительный результат на истории OOS, но он требует долгих вычислений и много ручной однотипной работы. Причем скользящей оптой решение задачи не исчерпывается. Одна из самых актуальных задач - как заставить генетику расширять диапазоны значений, в которые он упирается на лучших результатах, уточнять диапазоны, в которых он сужается, и проводить новую опту. Это далеко не то же самое, что сразу задать достаточно широкий диапазон для всех параметров и просто выбрать лучшие. В моих роботах число параметров таково, что подобная опта либо будет длиться недели, либо не сможет исследовать пространство параметров достаточно подробно.

Вот и думаю теперь: дожидаться вас или искать решения самому?) Однозначно надо начинаться разбираться с вашим проектом.

В данный момент при запуске эксперта, вызывающего панель, мой терминал просто крашится, оставляя последнюю запись:

2020.02.02 22:45:07.187 Terminal exit with code 0

При этом, каждый пуск терминала начинается с замечания:

2020.02.02 23:35:17.747 IPC failed to initialize IPC, with message: 

2020.02.02 23:35:17.748 Terminal IPC dispatcher not started

Видимо, это мешает работе программы? Система 64х, если что.
 
Kristian Kafarov:

Совсем недавно вплотную уперся в необходимость автоматизации процесса. Разработал метод оптимизации, дающий устойчивый положительный результат на истории OOS, но он требует долгих вычислений и много ручной однотипной работы. Причем скользящей оптой решение задачи не исчерпывается. Одна из самых актуальных задач - как заставить генетику расширять диапазоны значений, в которые он упирается на лучших результатах, уточнять диапазоны, в которых он сужается, и проводить новую опту. Это далеко не то же самое, что сразу задать достаточно широкий диапазон для всех параметров и просто выбрать лучшие. В моих роботах число параметров таково, что подобная опта либо будет длиться недели, либо не сможет исследовать пространство параметров достаточно подробно.

Вот и думаю теперь: дожидаться вас или искать решения самому?) Однозначно надо начинаться разбираться с вашим проектом.

В данный момент при запуске эксперта, вызывающего панель, мой терминал просто крашится, оставляя последнюю запись:

2020.02.02 22:45:07.187 Terminal exit with code 0

При этом, каждый пуск терминала начинается с замечания:

2020.02.02 23:35:17.747 IPC failed to initialize IPC, with message: 

2020.02.02 23:35:17.748 Terminal IPC dispatcher not started

Видимо, это мешает работе программы? Система 64х, если что.

Если Вы оптимизируете по своей системе руками, то вы точно сможете ее запрограммировать в моем авто оптимизаторе. 
Касательно ошибки  - она начала происходить после подключения моих файлов, или же это Ваши роботы так на терминал влияют? У меня подобной проблемы не наблюдалось, причем я уже не на одном компьютере запускал роботов с теми дополнениями что уже в статьях есть. Система 64 бита у меня тоже.  

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

 
Andrey Azatskiy: 

Касательно ошибки  - она начала происходить после подключения моих файлов, или же это Ваши роботы так на терминал влияют? 

До роботов дело даже не дошло, я просто пытаюсь вызвать вашу панельку из первых двух статей, запуская эксперт OptimisationManagerExtention. После этого терминал вылетает.

 
Kristian Kafarov:

До роботов дело даже не дошло, я просто пытаюсь вызвать вашу панельку из первых двух статей, запуская эксперт OptimisationManagerExtention. После этого терминал вылетает.

Тогда - это как уже сказал нужно смотреть на конкретном компьютере и примере. Не могу навскидку сказать в чем может быть дело, давно тем проектом не занимался. Как минимум нужно что бы у Вас на компьютере было более одного терминала установлено и dll с графическим интерфесом была в директории MQL5/Libraries. 

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

 
Kristian Kafarov:

До роботов дело даже не дошло, я просто пытаюсь вызвать вашу панельку из первых двух статей, запуская эксперт OptimisationManagerExtention. После этого терминал вылетает.

Нарочно сейчас перекомпилировал и запустил с нуля проект старый. У меня все заработало. Так что не смогу воспроизвести ошибку.

 
Kristian Kafarov:

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

Выделенное не получится в общем случае. Нужно в своей ТС задать два входных параметра, определяющих не торговый (выкинутый) интервал. Тогда реально.


ЗЫ Для общего случая можно создавать кастомный символ, который получается из оригинального выкидыванием интервала.

 
fxsaber:

Выделенное не получится в общем случае. Нужно в своей ТС задать два входных параметра, определяющих не торговый (выкинутый) интервал. Тогда реально.

ЗЫ Для общего случая можно создавать кастомный символ, который получается из оригинального выкидыванием интервала.

Я ровно так и собирался. Только параметра достаточно одного, потому что разбиение идет на равные части. Параметр указывает номер выкидываемого участка. Ну можно еще добавить параметр "число частей".

С инструментами Андрея можно дать задание провести мастер-терминалу k оптимизаций, в каждой из которых будет свой параметр "номер участка валидации". Затем правда придется еще писать дополнение чтобы свести статистику воедино.

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

Другой вариант - функция OnTesterDeinit(). Я уже реализовал в ней полноценное WFO, там же можно легко сделать кросс-валидацию по любому критерию. Но "правильным" оно будет только при полном переборе, потому что делается путем перебора фреймов всего участка тестирования. Полный перебор в большинстве случаев нереален. А если запускать генетику, набор фреймов будет уже нечестный, потому что она в процессе опты выбирает результаты в т.ч. по участкам, которые мы хотим сделать проверочными. Хотя насколько это реально повредит - вопрос. Если отношение длины проверочного участка к общему невелико, у генетики должно остаться достаточное количество вариантов, где проверочный оказывается хреновым. А после всей такой общей опты можно оставить еще один участок, не участвовавший в ней, и на нем проверить результат.

 
Kristian Kafarov:

Я ровно так и собирался. Только параметра достаточно одного, потому что разбиение идет на равные части. Параметр указывает номер выкидываемого участка. Ну можно еще добавить параметр "число частей".

С инструментами Андрея можно дать задание провести мастер-терминалу k оптимизаций, в каждой из которых будет свой параметр "номер участка валидации". Затем правда придется еще писать дополнение чтобы свести статистику воедино.

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

Есть еще инструмент fxsaber-а, он поможет с остальным.

Validate
Validate
  • www.mql5.com
Боевые торговые советники время от времени перенастраиваются по разным причинам через Тестер на исторических данных. Однако, результат таких периодических настроек сводится к наблюдению за неизвестным - будущая торговля. Аргументировать и обосновать целесообразность таких действий в отношении того или иного торгового советника довольно...