Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
В бесплатной библиотеке из статьи работа ведётся с генотипом. Работу с фенотипом ведите в ФФ (как в примере 2).
Вышесказанное означает, что библиотека так же эффективно будет работать, если обработка фенотипа будет осуществляться в ФФ, но количество итераций (запусков ФФ) будет существенно больше, чем если бы ГА работал с фенотипом напрямую (так как увеличивается детализация пространства поиска). В пределе поиск (без уточнения фенотипа) стремится к непрерывному пространству поиска.
Доброй ночи.
Хотелось бы поблагодарить вас за отличную статью.
Для меня слегка сложновато сначала было, но все же вроде разобрался.
Перед тем как в этой ветке форума что -то писать, хотелось бы прояснить для себя правильно ли я понял вашу статью и ход работы алгоритма UGA:
1)Настройка входных параметров UGA под конкретную задачу.
---UGA
2) Создание первоначальной колонии родителей путем случайного комбинирования генов
2.2)Вычисление результата работы ФФ для каждого из этой колонии
2.3) удаление клонов.
3) Определение лучшего результата работы ФФ из всех особей в данной колонии
4) Запуск цикла создания колонии потомков от первой колонии. Потомки создаются с помощью инструментов: Кроссинговер,искусственная и естественная мутация, репликация и заимствование генов, где
Кроссинговер - обмен участками хромосом родителей,
Иск. Мутация - выбор генов не из диапазона (ген родителя 1, ген родителя 2)
Ест. Мутация - выбор генов из диапазона (Минимум диапазона генов , Максимум диапазона генов)
репликация - выбор гена в диапазонах близких к значениям родительских генов, но с определенным смещением.
заимствование генов- создание "сборной особи" от количества родителей равному количеству генов.
5)Удаление клонов
6 )Вычисление результата работы ФФ для каждого из этой колонии
7)сравнение результатов особей-потомков с эталонным результатом, и возможное его замещение. при замещении происходит сброс счетчика "Эпох без изменений эталонного значения"
8)Сортировка всех особей от лучшего к худшему
9) -->пункт 4
10)если произошло эпох без изменений Y то завершение работы и вывод найденного эталонного значения.
Я заранее прошу прощения. Возможно здесь ветка обсуждения, а не обучения, но больше мне не где спросить совета. С ГА фактически впервые встретился в вашей статье( До вашей статьи даже толком не понимал что значат слова "Быстрая(генетический алгоритм)" в тестере терминала), поэтому знаний и опыта(занялся программированием на MQL5 месяца 2 назад) маловато.
Если разберусь в вашем алгоритме ГА , то постараюсь его пересадить на ООП. Для чего, собственно и занялся его изучением. Торговые модели, самооптимизирующиеся с прямым перебором я уже реализовал, а с ГА пока нет.( Модели по принципу, описанному в статье https://www.mql5.com/ru/articles/217 )
Заранее благодарен.
mi__x__an:
...хотелось бы прояснить для себя правильно ли я понял вашу статью и ход работы алгоритма UGA
Добрый день.
Спасибо за оперативный ответ.
Тогда у меня появляются вопросы.
Здесь массив Chromosome - это что? возможные значения оптимизируемого параметра?
То есть если, к примеру, оптимизируем "минимальный объем лота" в диапазоне от 0.1 до 1( с минимальным шагом лота 0.1),
то массив будет выгдятеть так:{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}, количество генов в хромосоме 1, минимум 0.1 максимум 1.0, шаг 0.1 ? Так ли?
И сопутствующий вопрос, как в такой массив, к примеру ввести : Оптимизруемый Стоп-лосс [10..500], Тэйк профит [10..500], Мин. объем лота [0.1...1.0] и флаг Трэйлинг(использовать трэйлинг или нет)[0..1]?
В общем как должны выглядеть входные данные при оптимизации параметров с различными типами, минимумами и максимумами возможных значений?
Заранее благодарен за ответ.
Здесь массив Chromosome - это что? возможные значения оптимизируемого параметра?
То есть если, к примеру, оптимизируем "минимальный объем лота" в диапазоне от 0.1 до 1( с минимальным шагом лота 0.1),
то массив будет выгдятеть так:{0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}, количество генов в хромосоме 1, минимум 0.1 максимум 1.0, шаг 0.1 ? Так ли?
И сопутствующий вопрос, как в такой массив, к примеру ввести : Оптимизруемый Стоп-лосс [10..500], Тэйк профит [10..500], Мин. объем лота [0.1...1.0] и флаг Трэйлинг(использовать трэйлинг или нет)[0..1]?
В общем как должны выглядеть входные данные при оптимизации параметров с различными типами, минимумами и максимумами возможных значений?
Заранее благодарен за ответ.
Нет,
Chromosome[] именно то, что написано в комментарии.
Первый индекс [0] - значение приспособленности особи. Остальные - оптимизируемые параметры в заданном диапазоне. Это генотип.
С фенотипом (стоп лосы, тейк профиты, объёмы, индикаторы или ещё что то) работайте в ФФ (масштабирование границ оптимизируемых параметров в диапазон генов хромосомы):
Например, гены заданы в диапазоне [-1;1], тогда
0-й индекс: значение ФФ <---------------------------------------------------------[8;8] //певёрнутые на Пи/2 восьмёрки.
1-й индекс: Стоп-лосс [10..500] <------------------------------------------------ [-1;1]
2-й индекс: Тэйк профит [10..500] <--------------------------------------------- [-1;1]
3-й индекс: Мин. объем лота [0.1...1.0] <--------------------------------------- [-1;1]
4-й индекс: флаг Трэйлинг(использовать трэйлинг или нет)[0..1] <------ [-1;1]
И того, массив Chromosome[] имеет 5 ячеек. Например, хромосома может выглядеть так {0.2, 0.3, -0.8, 0.1, 0.9;}
Но в таком случае обработку корректности значений, не вещественных генов придется делать в ФФ. Т.О. если оптимизируем типы long, double, и bool UGA будет генерировать для них всех вещественные значения, в том числе и для bool будет много вариаций генов в диапазоне от RangeMinimum до RangeMaximum, при реальном возможном использовании всего двух значений 1 и 0. Я правильно понимаю? И уже отбор корректных значений будет производится в ФФ?
Тогда лучшим избавлением от этого недостатка, для меня лично, будет введение сервисной функции, корректирующей значения генов хромосомы до возможных для использования в ФФ.
-- >генерация потомков -->корректировка значений генов до реально используемых значений -->удаление клонов --> вызов ФФ.
Как вы думаете при таком ходе, сильно ли это повлияет на работу UGA? Ведь по идее число запусков ФФ должно сократиться если для оптимизации одного параметра шаг больше чем для другого.
Правильно, если это не подходит то следует применять бинарный генетический алгоритм (такой как реализован в тестере). Статья по нему есть на четвёртом форуме.
Нет, тут дело в другом. Алгоритм можно прекрасно использовать и для таких случаев.
mi__x__an:
Но в таком случае обработку корректности значений, не вещественных генов придется делать в ФФ. Т.О. если оптимизируем типы long, double, и bool UGA будет генерировать для них всех вещественные значения, в том числе и для bool будет много вариаций генов в диапазоне от RangeMinimum до RangeMaximum, при реальном возможном использовании всего двух значений 1 и 0. Я правильно понимаю? И уже отбор корректных значений будет производится в ФФ?
Все операции с фенотипом нужно производить в ФФ. Это вопрос декодирования из генотипа в фенотип.
Ок, допустим, оптимизируемый параметр типа bool и возможны только два варианта: true и false. Тогда декодирование будет что то типа этого:
где gene - конкретный ген хромосомы.
Получается, что при всём многообразии возможных вариантов этого гена (генотип) получится только 2 фенотипа. Так же, в прочем, и в живой природе дела обстоят.
Однако, из этого вытекает естественным образом следствие: вариантов хромосом будет генерироваться больше (а значит, больше раз будет вычислятся ФФ), чем необходимо для решения задачи. То есть, оптимизация будет проходить дольше. Я об этом говорил уже. Так же дела будут обстоять и в случае двоичного кодирования хромосом. Декодировать всё равно придется в конкретный для задачи фенотип.
НО. И при двоичном кодировании и при представлении генов вещественными числами можно очень просто избежать излишних вычислений ФФ (уменьшить количество возможных вариантов хромосом) - ЗАДАВАТЬ ГРАНИЦЫ И ШАГ ПОИСКА ДЛЯ КАЖДОГО ОПТИМИЗИРУЕМОГО ПАРАМЕТРА. Т.е. заранее отсечь ненужные варианты хромосом (так уже сделано в штатном оптимизаторе с двоичным кодированием). Это можно сделать и для ГА из статьи, нужно просто добавить в него соответствующий функционал - возможность задания границ и шага для каждого гена, то есть позволить ГА работать с фенотипом напрямую.
но необходимость задания границ и шага для каждого гена в библиотеке уменьшит ее гибкость.
Во какой, возможно не самый лучший или даже самый худший способ я использовал в оптимизаторе торговых моделей:
1 - класс оптимизируемого параметра - наследник CObject
2 виртуальная функция основной общей модели :
virtual CList *OptimizatedParams()
она позволяет каждой конкретной модели создать свой список оптимизируемых параметров.
3. оптимизирующая функция - она рекурсивно перебирает все необходимые значения.
Т.О. Любые перечислимые типы в принципе она может обработать.
Теперь вопрос: Рационально было бы так же входными данными сделать CList в котором через этот класс Оптимизируемого параметра передается информация о нем, а Библиотека UGA уже сама создает сколько нужно границ и шагов для каждого гена. Это придало бы ей больше гибкости и уменьшило бы количество лишних запусков ФФ для создания не генетических а фенотипических клонов.