Оптимизация генетического алгоритма. Оптимизация сайта генетическим алгоритмом
optimization - Оптимизация генетического алгоритма
Я задал вопрос несколько недель назад о том, как сделать оптимизацию в R (Оптимизация для Vector Using Optimize R). Теперь, когда я правильно справился с базовой оптимизацией в R, я хотел бы начать использовать GA для решения проблем.
Учитывая целевую функцию:
div.ratio <- function(weight, vol, cov.mat){ weight <- weight / sum(weight) dr <- (t(weight) %*% vol) / (sqrt(t(weight) %*% cov.mat %*% (weight))) return(-dr) }Я использую пакет genalg для оптимизации, в частности функцию "rbga.bin". Но дело в том, что, похоже, не может пройти более одного параметра, т.е. Не может проходить в vol и cov.mat. Я что-то упустил или понял это неправильно.
Изменить: В пакете genalg существует функция, называемая rbga.bin, которую я использую.
Вот простой код из предыдущего вопроса, который может вас запустить:
rm(list=ls()) require(RCurl) sit = getURLContent('https://github.com/systematicinvestor/SIT/raw/master/sit.gz', binary=TRUE, followlocation = TRUE, ssl.verifypeer = FALSE) con = gzcon(rawConnection(sit, 'rb')) source(con) close(con) load.packages('quantmod') data <- new.env() tickers<-spl("VTI,VGK,VWO,GLD,VNQ,TIP,TLT,AGG,LQD") getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data, auto.assign = T) for(i in ls(data)) data[[i]] = adjustOHLC(data[[i]], use.Adjusted=T) bt.prep(data, align='remove.na', dates='1990::2013') prices<-data$prices[,-10] ret<-na.omit(prices/mlag(prices) - 1) vol<-apply(ret,2,sd) cov.mat<-cov(ret) out <- optim(par = rep(1 / length(vol), length(vol)), # initial guess fn = div.ratio, vol = vol, cov.mat = cov.mat, method = "L-BFGS-B", lower = 0, upper = 1) opt.weights <- out$par / sum(out$par) #optimal weightsСпасибо
qaru.site
Факультет вычислительной техники и информатикиСпециальность: Системное программированиеТема выпускной работы:Организация обучения нейронной сети с помощью генетического алгоритма оптимизацииНаучный руководитель: Святный Владимир АндреевичСсылки по теме выпускной работы
Материалы магистров ДонНТУСайты, посвященные нейронным сетямСайты, посвященные генетическим алгоритмамПерсональные сайты специалистов в области нейронных сетей и генетических алгоритмовПрограммное обеспечение по нейронным сетям и генетическому алгоритму |
masters.donntu.org
Генетические алгоритмы в 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 |
Стоит заметить, что при использовании генетических алгоритмов ожидаемое время оптимизации примерно такое же, как и при оптимизации с прямым перебором параметров. Отличие состоит в том, что генетический алгоритм, постоянно отсеивая заведомо плохие варианты, сокращает количество необходимых тестов в несколько (десятков, сотен, тысяч) раз. Поэтому ориентироваться на предположительное время оптимизации при использовании генетических алгоритмов не стоит. Реальное время оптимизации будет всегда меньше:
Прямой перебор
Генетический алгоритм
Как видите, вместо ожидаемых пяти с половиной часов, оптимизация с использованием генетических алгоритмов заняла меньше четырех минут ;)График оптимизации при этом тоже отличается от графика обычной оптимизации - поскольку плохие варианты отсеиваются, следующие тесты используют комбинации параметров, дающие большую прибыль. Поэтому график баланса устремлён вверх:
Теперь подробно рассмотрим результаты обоих методов оптимизации.
Таблица результатов:
|
Прямой перебор |
Генетический алгоритм | ||||||||||
Общее времяоптимизации |
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 часа).Делайте выводы.
www.mql5.com