Генетический алгоритм и его возможно применение - страница 4

 
Edgar Akhmadeev:

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

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

Всё понятно.

Есть проблема с фреймами на "большой" генетике.

Будем исправлять.

 
Slava:

Что значит "работает совершенно неправильно"?

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

https://www.mql5.com/ru/forum/321656/page17#comment_13569022

С фреймами я уже не проверю, отказался.

А с обычной генетикой проверил на последнем билде. Вот результат без "переполнения разрядности"


После прерывания:

2020.03.16 20:50:57.436 Tester  genetic optimization finished on pass 646 (of 160164854439975000)
2020.03.16 20:50:57.436 Statistics      optimization done in 8 minutes 36 seconds
2020.03.16 20:50:57.436 Statistics      shortest pass 0:00:00.002, longest pass 0:00:23.060, average pass 0:00:06.276

С "переполнением":


После прохождения нескольких прерванных экспертом проходов (контроль правильности входных переменных), генетика остановилась навечно. После прерывания:

2020.03.16 20:59:08.235 Tester  genetic optimization finished on pass 18
2020.03.16 20:59:08.235 Statistics      optimization done in 6 minutes 10 seconds
2020.03.16 20:59:08.235 Statistics      shortest pass 0:00:00.003, longest pass 0:00:05.978, average pass 0:00:01.339

Ни одного реального результата.

Попробовал в качестве примера Advisors/MAPSARSizeOptimized.ex5, работает. Ясно, что проблема с "переполнением разрядности" и с фреймами воспроизводится только с моим экспертом, но как найти проблему... Там всё очень сложно, OnTradeTransaction и пр. Это я ещё фреймы убрал. Код показать не могу, да и гигантский он, под мегабайт. А урезать до воспроизводимого примера - безнадёжно долго. Если будет время, попробую убрать OnTradeTransaction, может ещё какие навороты.

Факт в том, что если не превышать количество проходов, всё отлично работает.

А фреймы отлично работали (без превышения) до билда 2286 включительно.

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы
  • 2019.10.16
  • www.mql5.com
В настоящий момент тестер стратегий MetaTrader 5 подвергается глубокой переработки командой MQ...
 
Igor Makanu:

...

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

...

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

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

у АО, любых, нет проблем, есть проблема в другом - определении критерия оптимизации таким образом, что бы возможные плоскости в многомерном пространстве как можно меньше пересекались, это лежит в ответственности исследователя, к примеру, задали критерий макс баланс, этому критерию в абсолютном выражении может соответсвовать несколько или множество точек, но только некоторые из них представляют ценность на самом деле, то есть баланс 98756423 был достигнут при 1523 сделок при просадке 11% и такой же баланс был достигнут при 12 сделок но с просадкой 95%, какой вариант предпочтительнее?  - таким образом представив критерий оптимизации так, что бы исключить пересечение плоскостей соответствующих векторов параметров можно не только облегчить и тем самым ускорить сходимость к глобальному экстремуму, но и получить однозначные варианты параметров торговой системы.

 
Edgar Akhmadeev:

После прохождения нескольких прерванных экспертом проходов (контроль правильности входных переменных), генетика остановилась навечно. После прерывания:

Ни одного реального результата.

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

 
Stanislav Korotky:

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

Если на все неправильные комбинации параметров возвращать INIT_PARAMETERS_INCORRECT, их получается слишком много, и поколение завершается с ошибкой. Поэтому я возвращаю INIT_PARAMETERS_INCORRECT только при неправильном конкретном параметре, если он выходит за пределы. А при неправильной комбинации (один параметр не должен превышать другой) я останавливаю проход, возвращаю INIT_SUCCEEDED и Custom = -N. Наверное, это портит генетику, но вариантов не вижу. Вернее есть вариант, избавляясь от неправильных комбинаций (в частном случае - делая один параметр дельтой к другому: v1=X, v2=Y+v1), но это слишком сильный мутаген. Два параметра будут жёстко связаны, и при изменении одного всё съезжает. Я ушёл от такого варианта в пользу фейкового результата вместо ошибки.

 
Edgar Akhmadeev:

Если на все неправильные комбинации параметров возвращать INIT_PARAMETERS_INCORRECT, их получается слишком много, и поколение завершается с ошибкой. Поэтому я возвращаю INIT_PARAMETERS_INCORRECT только при неправильном конкретном параметре, если он выходит за пределы. А при неправильной комбинации (один параметр не должен превышать другой) я останавливаю проход, возвращаю INIT_SUCCEEDED и Custom = -N. Наверное, это портит генетику, но вариантов не вижу. Вернее есть вариант, избавляясь от неправильных комбинаций (в частном случае - делая один параметр дельтой к другому: v1=X, v2=Y+v1), но это слишком сильный мутаген. Два параметра будут жёстко связаны, и при изменении одного всё съезжает. Я ушёл от такого варианта в пользу фейкового результата вместо ошибки.

хороший вариант возвращать -DBL_MAX при недопустимом варианте, вместо ошибки.

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

есть информация, только ТССССС.... что в штатном оптимизаторе планируется реализация нескольких видов АО, и даже с параметрами, но это неточно.

 
Andrey Dik:

хороший вариант возвращать -DBL_MAX при недопустимом варианте, вместо ошибки.

а если возвращать рендомное значение - это будет хуже для АО ?

 
Igor Makanu:

а если возвращать рендомное значение - это будет хуже для АО ?

гораздо хуже.

если у нас цель - запудрить "моск" АО, то самый лучший способ это возвращать рандомное число.

 
Andrey Dik:

хороший вариант возвращать -DBL_MAX при недопустимом варианте, вместо ошибки.

Это слишком много, график масштабируется так, что не разглядишь полезные результаты. Я возвращаю значение несколько большее, чем худший Custom. Главное же - задать правильное направление для улучшения.

Igor Makanu:

а если возвращать рендомное значение - это будет хуже для АО ?

А смысл? Главное - правильное направление, значит надо показать GA, что здесь он показал худший результат, а не просто слабый.

 
Slava:

Что значит "работает совершенно неправильно"?

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

Убрал OnTradeTransaction, не помогло. Буду думать дальше.