Программирование - это просто
Advertisement
Главная arrow Уроки программирования arrow Генетический алгоритм (экспериментальный проект) arrow Генетический алгоритм. Шаг 21. Обучаем нейросеть
08.10.2024 г.
Главное меню
Главная
Интернет магазин
Программные продукты
Биржевые роботы
Искусственный интеллект
Математика и информатика
1С:Предприятие
Уроки C#
Уроки Delphi
Уроки программирования
Web-программирование
Дизайн и графика
Компьютер для блондинок
Исходники
Статьи
Платный раздел
Рассказы про компьютеры
Хитрости и секреты
Системный подход
Размышления
Наука для чайников
Друзья сайта
Excel-это не сложно
Все о финансах
.
Генетический алгоритм. Шаг 21. Обучаем нейросеть Печать E-mail
Автор megabax   
28.10.2011 г.
New Page 1

Генетический алгоритм. Шаг 21. Обучаем нейросеть

Все статьи по данной теме.

И так, я разработал скелет блока обучения нейросети. Скелет в том смысле, что пока он создает только начальную популяцию, получаемую путем случайной мутации первичных настроек нейросети. Для предварительных экспериментов этого пока достаточно. И так, доходной нейронной сети без оптимизации за период с 07.03.2006 по 06.04.2007 -3%. Генерируем начальную популяцию (200 особей):

Генетический алгоритм. Шаг 21. Обучаем нейросеть

Лучшая доходность 113%, но радоваться рано, надо еще посмотреть, за счет чего получился такой результат и повториться ли он на более позднем интервале. Не подогнано ли под историю?

И так, давайте сравним графики стоимости портфеля до и после оптимизации:

До:

Генетический алгоритм. Шаг 21. Обучаем нейросеть

После:

Как видим из графика, просадка тоже возросла. При чем не хило. По суди дела, увеличение доходности было достигнуто просто за счет того, что график доходности "увеличился в размерах". Выросла доходность, выросла и просадка. Почему так получилось? В результате оптимизации нейросеть стала чаще подавать сигналы. А вот их качество нисколько не улучшилось, скорее наоборот, ухудшилось. Примерно такая же картина может произойти и на более близкой к реальности виртуальной бирже, когда я доработаю механизм контроля маржин колла и стопы.

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

  • Задать максимальную просадку, и если особь выход по просадке за обозначенный предел, то оно помечается как dead (мертвая) и больше не участвует в оптимизации.

  • Целевая функция вычисляется по формуле FinalFunc=income*K1-drawdown*K2, где income - показатель доходности, drowdown - максимальная просадка на периоде оптимизации, K1 и K2 - эмпирические коэффициенты.

  • Комбинированные методы.

Какой же метод самый лучший? Допустим, мы пошли по первому пути. Установили макс. просадку 30%. Если будет 29%, то особь "выживет". Далее, что у нас получиться при естественном отборе? Особь, дающая доходность 100% и просадку 5%, окажется худшей, по сравнению с особью, дающую доходность 101% и просадку 20%. Но ведь это не так! Я лично предпочел бы торговать по первой стратегии. Так что посмотрим в сторону второго варианта. Как в этом случае будет происходить отбор? Стратегия с большой доходностью и с большой просадкой окажется так же мало жизнеспособной, как особь с малой просадкой и малой доходностью. Что правильно: обе эти стратегии непривлекательный. А вот наверх поднимутся особи с большим значением доходности и малой просадкой, что нам и нужно. С другой стороны, через наш фильтр проскочит стратегия с большой просадкой и астрономической доходностью. А этого нам не надо: такая стратегия не больше, чем игра случайностей и вряд ли она имеет право на жизнь. Подобные "глюки" можно отсечь, комбинируя первый подход со втором. А еще лучше сделать вот такую зависимость: FinalFunc=income*K1-K4*eK2*drawdown+K3. Тогда при увеличении просадки привлекательность стратегии будет падать по экспоненте и нам даже не понадобиться вводить ограничение на максимальную просадку.

Для начала я поставил вот такие коэффициенты:

                double k1=100;

                double k2=10;

                double k3=0;

                double k4=100;

Доходность и просадка у меня в программе заданы в единице от начального значения, если перевести в %, то получиться k1=1; k2=0.1; k3=0; k4=1;

В результате первоначального заполнения на первом месте оказались стратегии, где не совершенно вообще никаких сделок (в таблице на 1-ом месте целевая функция, на втором доходность %, на третьем просадка, %):

Генетический алгоритм. Шаг 21. Обучаем нейросеть

Везде просадка оказалась больше, чем итоговая доходность:

Генетический алгоритм. Шаг 21. Обучаем нейросеть

Посмотрим теперь, что будет если попытаться перейти к следующему поколению:

Генетический алгоритм. Шаг 21. Обучаем нейросеть

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

Жмем кнопку "Следующее поколение" еще раз. Все торгующие вымерли. Остались только те, что не совершили ни одной сделки:

Генетический алгоритм. Шаг 21. Обучаем нейросеть

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

Все статьи по данной теме.

Последнее обновление ( 28.10.2011 г. )
 
« След.   Пред. »
 
© 2024 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги