Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ? - страница 4

 
fxsaber:

Накидал проверочный советник для мат. режима Оптимизатора

Вот так выглядит график Оптимизации на 8-ми Агентах параллельно в режиме полного перебора без перемешивания проходов (Rand = false)

Здесь хорошо видно, что Агенты выполняют задания пачками.


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

Вот она родимая парабола, вершину которой (единица) и будем искать через ГА.


В режиме перемешивания (Rand = true), конечно, полный перебор находит нашу вершину


 
fxsaber:

Вот она родимая парабола, вершину которой (единица) и будем искать через ГА.

Без перемешивания ГА не нашел экстремум, но подобрался близко к нему

Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 1
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 2
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 3
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 4
Tester  Best result 0.9992924399999999 produced at generation 0. Next generation 5
Tester  Best result 0.999424 produced at generation 5. Next generation 6
Tester  Best result 0.99987456 produced at generation 6. Next generation 7
Tester  Best result 0.99987456 produced at generation 6. Next generation 8
Tester  Best result 0.99987456 produced at generation 6. Next generation 9
Tester  Best result 0.99987456 produced at generation 6. Next generation 10
Tester  Best result 0.99987456 produced at generation 6. Next generation 11
Tester  Best result 0.99987456 produced at generation 6. Next generation 12
Tester  Best result 0.99987456 produced at generation 6. Next generation 13
Tester  Best result 0.99987456 produced at generation 6. Next generation 14
Tester  Best result 0.99987456 produced at generation 6. Next generation 15
Tester  Best result 0.99987456 produced at generation 6. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 973 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 00 seconds
Statistics      local 179 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Понадобилось 179 проходов. Напомню, полный набор заданий - 10001 проходов. Да, задача очень простая, но все же.


Теперь пробудем вариант с перемешиванием (Rand = true)

Tester  Best result 0.99949824 produced at generation 0. Next generation 1
Tester  Best result 0.99949824 produced at generation 0. Next generation 2
Tester  Best result 0.99949824 produced at generation 0. Next generation 3
Tester  Best result 0.99949824 produced at generation 0. Next generation 4
Tester  Best result 0.99992256 produced at generation 4. Next generation 5
Tester  Best result 0.99992256 produced at generation 4. Next generation 6
Tester  Best result 0.99992256 produced at generation 4. Next generation 7
Tester  Best result 0.99992256 produced at generation 4. Next generation 8
Tester  Best result 0.99992256 produced at generation 4. Next generation 9
Tester  Best result 0.99992256 produced at generation 4. Next generation 10
Tester  Best result 0.99992256 produced at generation 4. Next generation 11
Tester  Best result 0.99992256 produced at generation 4. Next generation 12
Tester  Best result 0.99992256 produced at generation 4. Next generation 13
Tester  Best result 0.99992256 produced at generation 4. Next generation 14
Tester  Best result 0.99992256 produced at generation 4. Next generation 15
Tester  Best result 0.99992256 produced at generation 4. Next generation 16
Tester  genetic calculation is over
Tester  result cache used 970 times
Tester  genetic optimization finished on pass 1152 (of 10001)
Statistics      optimization done in 0 minutes 01 seconds
Statistics      local 182 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)

Снова близко. По логу хорошо видно, что 182 прохода были посчитаны полноценно, а 970 взялись из кеша.


Хороший результат, поэтому, попробуем увеличить количесво точек в интервале.

 
fxsaber:

Хороший результат, поэтому, попробуем увеличить количесво точек в интервале.

Количество точек в интервале один миллион.


Rand = false

Tester  Best result 0.9999999424 produced at generation 3. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7533 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1171 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Rand = true (из миллиона точек рандомно выбранные пары менялись местами 100 милллионов раз)

Tester  Best result 0.999998294364 produced at generation 10. Next generation 32
Tester  genetic calculation is over
Tester  result cache used 7452 times
Tester  genetic optimization finished on pass 8704 (of 1000001)
Statistics      optimization done in 0 minutes 04 seconds
Statistics      local 1252 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)


Результат говорит о том, что мое самоуверенное заявление

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Не для разработчиков МТ! Чем заменить INIT_PARAMETERS_INCORRECT ?

fxsaber, 2018.07.10 16:27

Очевидно, что если следать полный перебор y = x^2. Затем рандомно перемешать строки опимизации и создать на основе перемешивания новый набор. То ГА не найдет вершину параболлы.

скорее ложно, чем верно.


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


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

 
fxsaber:

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

Предполагаю, если выбрать функцию с острым пиком, то после перемешивания ГА все же обломается. А такая функция куда ближе к ТС.

 
fxsaber:

Накидал проверочный советник для мат. режима Оптимизатора

К сожалению, моих знаний не достаточно, чтобы всё это понять )))

Я решил попроще. В общем, я добавил в советник запись в файл лигитимных цепочек. Из 117649 вариантов допустимых оказалось 1953. К слову сказать, полный перебор на интервале 3 дня, Только цены открытия и 0 сделок это заняло 

Tester	optimization finished, total passes 117649 (successful 114123 passes)
Statistics      optimization done in 2 hours 36 minutes 36 seconds

Теперь у меня есть файл. Как это передать для оптимизации пока не знаю. Буду завтра думать...

И почему успешных меньше? Придётся повторить?
 
fxsaber:

Предполагаю, если выбрать функцию с острым пиком, то после перемешивания ГА все же обломается. А такая функция куда ближе к ТС.

Так генетика и не заточена под ловлю пиков.  Её цель - найти устойчивые области, именно это и требуется для ТС.  А пики - это шум, как правило.

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

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

 
Сергей Таболин:

Спасибо за мнение, только здесь не обсуждается архитектура программы. Если не заметили...

Напрасно, напрасно.

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

 
Ну вставлю еще 5 копеек.
Скорее всего используются полные переборы на каждом тике. И это само собой дает тормоза при работе. Если так, то стоит посмотреть в сторону полного перебора только при старте эксперта/открытии бара, а потом чисто проверка последних данных. Подобная оптимизация всегда порядком сокращает потребление ресурсов.
 
Alexey Navoykov:

Так генетика и не заточена под ловлю пиков.  Её цель - найти устойчивые области, именно это и требуется для ТС.  А пики - это шум, как правило.

не совсем так. мало того, даже устойчивые области пространства оптимизации это все равно области с провалами и пиками, ФФ получается далеко не гладкая.

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

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

но вообще самое правильное решение это преобразование пространства входных параметров.

 
Georgiy Merts:

Напрасно, напрасно.

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

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

Теперь по существу. Файл с лигитимными цепочками создал. Как теперь его использовать? Подозреваю, что надо через onTester, фреймы... Документацию смотрел, но что-то не складывается. Не могу разобраться как с этим бороться.

Есть мысля считать его в массив и уже из него брать данные... 

Причина обращения: