![Генетические алгоритмы в MetaTrader 4. Сравнение с прямым перебором оптимизатора](https://c.mql5.com/i/articles/overlay.png)
Генетические алгоритмы в MetaTrader 4. Сравнение с прямым перебором оптимизатора
1. Что такое генетические алгоритмы?
В MetaTrader 4 стали доступны генетические алгоритмы оптимизации входных параметров экспертов. Они значительно сокращают время оптимизации, практически не искажая результаты тестирования. Принцип их работы подробно описан в статье Генетические алгоритмы - математический аппарат.
Данная статья посвящена сравнению оптимизации входных параметров экспертов с использованием генетических алгоритмов и оптимизации с использованием прямого, полного перебора значений параметров.
2. Эксперт
Для проведения экспериментов я немного доработал уже знакомого вам по статье Управление ордерами - это просто эксперта CrossMACD:
- Добавил к устанавливаемым позициям СтопЛосс и ТейкПрофит.
- Добавил сопровождение позиций ТрейлингСтопом.
- Для фильтрации сигналов ввел параметр OpenLuft: теперь сигналом будет пересечение нулевой линии на определённое количество пунктов (с точностью до одной десятой пункта).
- Добавил параметр CloseLuft для аналогичной фильтрации сигналов закрытия.
- Вынес во внешние переменные периоды быстрой и медленной скользящих средних, используемых при расчёте индикатора MACD.
Теперь это практически полноценный эксперт. Его будет удобно оптимизировать и использовать для торговли. Вы можете скачать эксперта CrossMACD_DeLuxe.mq4 к себе на компьютер и провести все тесты самостоятельно.
3. Оптимизация
Можно приступать к оптимизации. В рамках подготовки статьи будет проведено три теста с разным количеством переборов оптимизации. Это позволит сравнить выигрыш от использования генетических алгоритмов в разных ситуациях.
После каждого теста я буду вручную удалять кэш тестера,
чтоб следующие тесты не использовали уже просчитанные варианты. Это
необходимо только для чистоты эксперимента - при обычном использовании
оптимизатора, автоматическое кэширование результатов только ускорит
процесс повторной оптимизации.
Для сравнения результатов оптимизация с использованием генетических алгоритмов будет проводиться дважды: первый раз – с целью найти максимальную прибыль (Profit), а второй – с целью найти лучшую прибыльность (Profit Factor). После этого три лучшие результата для обоих методов оптимизации будут представлены в сводной таблице отчёта, отсортированной по указанным колонкам.
Оптимизация несёт чисто экспериментальный характер. Цели найти параметры, приносящие максимальную прибыль, автор не преследовал.
Тест 1
- Символ графика – EURUSD;
- Период графика – Н1;
- Период тестирования – 2 года;
- Режим моделирования – "По ценам открытия";
- Перебираемые параметры:
Имя переменной |
Стартовое значение |
Шаг |
Конечное значение |
StopLoss |
0 |
10 |
100 |
TakeProfit |
0 |
10 |
150 |
TrailingStop |
0 |
10 |
100 |
OpenLuft |
0 |
5 |
50 |
CloseLuft |
0 |
5 |
50 |
Количество переборов |
234 256 |
Стоит заметить, что при использовании генетических алгоритмов ожидаемое время
оптимизации примерно такое же, как и при оптимизации с прямым перебором
параметров. Отличие состоит в том, что генетический алгоритм, постоянно
отсеивая заведомо плохие варианты, сокращает количество необходимых
тестов в несколько (десятков, сотен, тысяч) раз. Поэтому
ориентироваться на предположительное время оптимизации при
использовании генетических алгоритмов не стоит. Реальное время
оптимизации будет всегда меньше:
![](https://c.mql5.com/2/13/time0d281729.gif)
![](https://c.mql5.com/2/13/time1c281x29.gif)
Как видите, вместо ожидаемых пяти с половиной часов, оптимизация с использованием генетических алгоритмов заняла меньше четырех минут ;)
График оптимизации при этом тоже отличается от графика обычной оптимизации - поскольку плохие варианты отсеиваются, следующие тесты используют комбинации параметров, дающие большую прибыль. Поэтому график баланса устремлён вверх:
![](https://c.mql5.com/2/13/testergraphz282h29.gif)
Теперь подробно рассмотрим результаты обоих методов оптимизации.
Таблица результатов:
|
Прямой перебор |
Генетический алгоритм | ||||||||||
Общее время |
4 ч. 13 мин. 28 сек. |
3 мин. 50 сек. | ||||||||||
|
SL |
TP |
TS |
Open Luft |
Close Luft |
Profit |
SL |
TP |
TS |
Open Luft |
Close Luft |
Profit |
1 |
70 |
140 |
0 |
20 |
30 |
1248.08 |
70 |
140 |
0 |
20 |
30 |
1248.08 |
2 |
70 |
140 |
0 |
20 |
35 |
1220.06 |
70 |
140 |
0 |
20 |
35 |
1220.06 |
3 |
70 |
150 |
0 |
20 |
30 |
1176.54 |
70 |
150 |
0 |
20 |
30 |
1176.54 |
|
SL |
TP |
TS |
Open Luft |
Close Luft |
Profit Factor |
SL |
TP |
TS |
Open Luft |
Close Luft |
Profit Factor |
1 |
100 |
50 |
40 |
50 |
5 |
4.72 |
0 |
50 |
40 |
50 |
5 |
4.72 |
2 |
90 |
50 |
40 |
50 |
5 |
4.72 |
90 |
50 |
40 |
50 |
5 |
4.72 |
3 |
80 |
50 |
40 |
50 |
5 |
4.72 |
80 |
50 |
40 |
50 |
0 |
4.72 |
Как видно из таблицы, скорость оптимизации с использованием генетических алгоритмов выше в несколько десятков раз! Результаты при этом практически идентичны. Результатов с максимальной прибыльностью равной 4.72 несколько, поэтому в отчёты попали разные комбинации параметров, но это не принципиально.
Теперь попробуем уменьшить количество переборов, но увеличить время тестирования. Для этого будем использовать модель "все тики".
Тест 2
- Символ графика – EURUSD;
- Период графика – Н1;
- Период тестирования – 2 года;
- Режим моделирования – "Все тики";
- Перебираемые параметры:
Имя переменной |
Стартовое значение |
Шаг |
Конечное значение |
StopLoss |
0 |
10 |
100 |
TakeProfit |
0 |
10 |
150 |
TrailingStop |
0 |
10 |
100 |
OpenLuft |
0 |
10 |
50 |
Количество переборов |
11 616 |
Таблица результатов:
|
Прямой перебор |
Генетический алгоритм | ||||||||
Общее время оптими |
32 ч. 32 мин. 37 сек. |
1 ч. 18 мин. 51 сек. | ||||||||
|
SL |
TP |
TS |
Open Luft |
Profit |
SL |
TP |
TS |
Open Luft |
Profit |
1 |
50 |
0 |
0 |
20 |
1137.89 |
50 |
0 |
0 |
20 |
1137.89 |
2 |
70 |
0 |
0 |
20 |
1097.87 |
70 |
0 |
0 |
20 |
1097.87 |
3 |
60 |
0 |
0 |
20 |
1019.95 |
60 |
0 |
0 |
20 |
1019.95 |
|
SL |
TP |
TS |
Open Luft |
Profit Factor |
SL |
TP |
TS |
Open Luft |
Profit Factor |
1 |
50 |
90 |
60 |
50 |
4.65 |
50 |
90 |
60 |
50 |
4.65 |
2 |
50 |
140 |
60 |
50 |
4.59 |
50 |
140 |
60 |
50 |
4.59 |
3 |
100 |
90 |
60 |
50 |
4.46 |
70 |
90 |
60 |
50 |
4.46 |
При таком количестве переборов скорость отличается в 25 раз, что тоже очень неплохо. Результаты совпадают практически на 100%, единственное отличие в значении СтопЛосс в третьем тесте. Прибыльность при этом опять же осталась максимальной.
Теперь попробуем
уменьшить количество переборов и уменьшить время тестирования. Для
этого будем использовать модель "контрольные точки".
Тест 3
- Символ графика – EURUSD;
- Период графика – Н1;
- Период тестирования – 2 года;
- Режим моделирования – "Контрольные точки";
- Перебираемые параметры:
Имя переменной |
Стартовое значение |
Шаг |
Конечное значение |
StopLoss |
0 |
10 |
100 |
OpenLuft |
0 |
5 |
50 |
CloseLuft |
0 |
5 |
50 |
Количество переборов |
1 331 |
Таблица результатов:
|
Прямой перебор |
Генетический алгоритм | ||||||
Общее время оптими |
33 мин. 25 сек. |
31 мин. 55 сек. | ||||||
|
SL |
Open Luft |
Close Luft |
Profit |
SL |
Open Luft |
Close Luft |
Profit |
1 |
0 |
0 |
45 |
1078.03 |
0 |
0 |
45 |
1078.03 |
2 |
70 |
20 |
15 |
1063.94 |
70 |
20 |
15 |
1063.94 |
3 |
70 |
20 |
25 |
1020.19 |
70 |
20 |
25 |
1020.19 |
|
SL |
Open Luft |
Close Luft |
Profit Factor |
SL |
Open Luft |
Close Luft |
Profit Factor |
1 |
80 |
50 |
15 |
2.73 |
80 |
50 |
15 |
2.73 |
2 |
70 |
50 |
15 |
2.73 |
70 |
50 |
15 |
2.73 |
3 |
90 |
50 |
15 |
2.65 |
90 |
50 |
15 |
2.65 |
Тут ситуация изменилась. Время оптимизации совпадает (небольшая погрешность допускается), а результаты идентичны. Это связано с тем, что оптимизация состояла всего из 1331 перебора, а такого количества тестов для применения генетических алгоритмов просто мало. Они не успевают "разогнаться" - выигрыш в скорости оптимизации достигается за счёт отсеивания заведомо убыточных комбинаций параметров, а при таком количестве вариантов генетические алгоритмы не могут определить, какие "родители" (комбинации параметров) дадут плохое "потомство". Использовать их, соответственно, смысла нет.
4. Выводы
Генетические алгоритмы - прекрасное дополнение к оптимизатору стратегий МТ 4. Ускорение оптимизации при большом количестве переборов просто фантастическое, результаты совпадают с результатами обычной оптимизации.Теперь нет смысла использовать полный перебор параметров. Генетические алгоритмы найдут лучший результат быстрее и не менее качественно.
5. Послесловие
Уже после написания статьи я для удовлетворения собственного любопытства запустил оптимизацию CrossMACD_DeLuxe по всем параметрам. Количество комбинаций составило более ста миллионов (103 306 896). С использованием генетических алгоритмов оптимизация заняла всего 17 часов, в то время как оптимизация с перебором всех параметров закончилась бы, предположительно, через 35 лет (301 223 часа).Делайте выводы.
![MQL4 как инструмент трейдера, или Advanced Technical Analysis](https://c.mql5.com/2/13/137_1.png)
![Синхронизация работы экспертов, скриптов и индикаторов](https://c.mql5.com/2/13/117_1.gif)
![Использование крешлогов для отладки собственных dll](https://c.mql5.com/2/13/153_6.gif)
![Хранение и отображение информации](https://c.mql5.com/2/13/128_4.gif)
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
75000 вариантов - 4GB оперативки и 4GB дискового кэша мало???
Желательно все дочитать до конца - масса полезной информации и подробностей о тестере стратегий МетаТрейдера.
2006.10.16 23:40:12 There were 6325 passes done during optimization, 1027 results have been discarded as insignificant
2006.10.16 23:40:12 MACD Sample: optimization stopped, 9291 cache records were used, 9291 cache records rejected
У меня было написано, что- то подобное.
А вот это уже пример логов правильной оптимизации.
Komposter, получаеться что тестер посчитал суммарное время теста одинаково(сравнение прямого перебора и генетического алгоритма), а затем оптимизация завершилась раньше обозначенного максимального времени.
Я сначала подумал что не хватает оперативки (но наверное в логах должно писаться- "мало памяти").