Программирование - это просто
Advertisement
Главная arrow Биржевые роботы arrow Генетический алгоритм (экспериментальный проект) arrow Генетический алгоритм. Шаг 21. Обучаем нейросеть
19.06.2019 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
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 г. )
 
« След.   Пред. »
 
© 2019 Программирование - это просто
Joomla! - свободное программное обеспечение, распространяемое по лицензии GNU/GPL.
Русская локализация © 2005-2008 Joom.Ru - Русский Дом Joomla!
Design by Mamboteam.com | Powered by Mambobanner.de
Я принимаю Яндекс.Деньги
Мы принимаем
Банковские карты
Оплатите покупку в интернет-магазине банковскими картами VISA и Mastercard любого банка.
узнать больше
Электронный кошелек
Моментальная оплата покупок с помощью вашего электронного кошелька RBK Money.
узнать больше
Банковский платеж
Оплатите покупку в любом российском банке. Срок зачисления средств на счет - 3-5 рабочих дней.
узнать больше
Денежные переводы
Оплата покупок через крупнейшие системы денежных переводов CONTACT и Unistream.
узнать больше
Почтовые переводы
Оплатите покупку в любом отделении Почты России. Срок зачисления платежа - 3-4 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше