Скачать MetaTrader 5

Генетические алгоритмы в MetaTrader 4. Сравнение с прямым перебором оптимизатора

10 июля 2006, 09:29
Andrey Khatimlianskii
4
2 256


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

 

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

Прямой перебор

Генетический алгоритм

       Как видите, вместо ожидаемых пяти с половиной часов, оптимизация с использованием генетических алгоритмов заняла меньше четырех минут ;)

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

 


       Теперь подробно рассмотрим результаты обоих методов оптимизации.

Таблица результатов:

 

Прямой перебор

Генетический алгоритм

Общее время
оптимизации

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 часа).

    Делайте выводы.
Прикрепленные файлы |
MetaQuotes
Renat Fatkhullin | 16 окт 2006 в 22:23
Вот интересное обсуждение генетических алгоритмов:
75000 вариантов - 4GB оперативки и 4GB дискового кэша мало???

Желательно все дочитать до конца - масса полезной информации и подробностей о тестере стратегий МетаТрейдера.
Dmitry
Dmitry | 25 дек 2006 в 11:13
Komposter, получаеться что тестер посчитал суммарное время теста одинаково(сравнение прямого перебора и генетического алгоритма), а затем оптимизация завершилась раньше обозначенного максимального времени. Я сначала подумал что не хватает оперативки (но наверное в логах должно писаться- "мало памяти").
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

У меня было написано, что- то подобное.
А вот это уже пример логов правильной оптимизации.
Andrey Khatimlianskii
Andrey Khatimlianskii | 25 дек 2006 в 12:16
nikkei:
Komposter, получаеться что тестер посчитал суммарное время теста одинаково(сравнение прямого перебора и генетического алгоритма), а затем оптимизация завершилась раньше обозначенного максимального времени.
Когда я писал статью, генетические алгоритмы только появились. Через некоторое время (кажется, в следующем билде) добавили ориентировочное количество проходов именно для генетики, теперь есть 2 цифры - общее кол-во и кол-во проходов до завершения.

nikkei:
Я сначала подумал что не хватает оперативки (но наверное в логах должно писаться- "мало памяти").
Когда мало памяти тестер так и говорит ;)
MQL4 Comments
MQL4 Comments | 20 мар 2008 в 19:14
в тесте 1 я насчитал 11*16*11*6*6=69696 переборов,а в тесте2 результат сошелся,или я чего-то путаю? интересно , а сколько переборов максимально может обработать оптимизатор? я пробовал 10^9 берёт, а 20^20 нет.
Синхронизация работы экспертов, скриптов и индикаторов Синхронизация работы экспертов, скриптов и индикаторов

Рассматриваются необходимость и общие принципы построения программного комплекса, содержащего эксперт, скрипт и индикатор.

Хранение и отображение информации Хранение и отображение информации

Статья посвящена удобным и практичным методам хранения и отображения информации. Здесь рассматриваются альтернативы стандартному логфайлу терминала и функции Comment().

MQL4  как инструмент трейдера, или Advanced Technical Analysis MQL4 как инструмент трейдера, или Advanced Technical Analysis

Торговля на рынке - это в первую очередь расчет вероятностей. А поговорка «лень – двигатель прогресса» раскрывает все краски расцвета технических индикаторов и торговых систем. И получается, что большой процент начинающих трейдеров изучают уже готовые теории торговли. Но, к сожалению или к счастью, не все законы движения рынка ещё открыты, а инструменты для анализа ценовых движений в основном существуют в виде тех самых реализованных технических индикаторов, математических и статистических пакетов. Огромное спасибо Билу Вильямсу, за его вклад в теорию движения рынков. Но, наверное, не следует останавливаться на достигнутом.

Использование крешлогов для отладки собственных dll Использование крешлогов для отладки собственных dll

25-30% всех крешлогов, поступающих от пользователей, возникают в результате ошибок выполнения функций, импортируемых из пользовательских dll.