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

Генетический алгоритм. Шаг 20. Нейросеть торгует на виртуальной бирже

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

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

И так, сначала я протестировать, правильно ли отрабатываются сигналы. Для этого вывел в текстовый файл историю стоимости виртуального портфеля и размера виртуальных денежных средств. И так, открываю файл, смотрю где изменяются денежные средства:

74  11.05.2006 0:00:00 10000 10000
75  12.05.2006 0:00:00 10000 10000
76  15.05.2006 0:00:00 10000 10000
77  16.05.2006 0:00:00 10000 10000
78  17.05.2006 0:00:00 6900 10000
79  18.05.2006 0:00:00 6900 9749,8
80  19.05.2006 0:00:00 6900 9772,3
81  22.05.2006 0:00:00 6900 9630
82  23.05.2006 0:00:00 6900 9382

количество денежных средств уменьшилось, следовательно, это была покупка. Далее открываю график котировок, смотрю на данную дату график, есть ли сигнал:

Генетический алгоритм. Шаг 20. Нейросеть торгует на виртуальной бирже

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

Можно переходить к следующему этапу - блок обучения. Его я решил построить на генетическом алгоритме, и сейчас я расскажу как он будет работать. И так, все весовые коэффициенты нейрости копируются в специальный массив "особь". Этот массив будет подвергаться мутации и скрещиванию. Для реализации я применю уже готовые алгоритмы, взятые с сайта http://jenyay.net, автор которого любезно разрешил использовать свои наработки. 

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

             /// <summary>

             /// Скрестить две хромосомы типа double

             /// </summary>

             /// <param name="x">1-я хромосома</param>

             /// <param name="y">2-я хромосома</param>

             /// <returns>Новая хромосома</returns>

             static protected double Cross (double x, double y)

             {

                    Int64 ix = BitConverter.DoubleToInt64Bits(x);

                    Int64 iy = BitConverter.DoubleToInt64Bits(y);

 

                    double res = BitConverter.Int64BitsToDouble(BitCross(ix, iy));

 

                    if (m_Rnd.Next() % 2 == 0)

                    {

                           if (x * res < 0)

                           {

                                  res = -res;

                           }

                    }

                    else

                    {

                           if (y * res < 0)

                           {

                                  res = -res;

                           }

                    }

 

                    return res;

 

             }

Если говорить простым языком, то числа переводятся в наборы битов, затем случайным образом делятся на две части, и новое число получается из "обломков" старых. Мутация происходит аналогичным образом: меняется случайный бит.

После каждого цикла мутации и скрещивания происходит естественный отбор: лучшие особи остаются, худшие удаляться из списка. Тоесть, было допустим 200 особей, после мутации и скрещивания появилось еще 100 и стало 300. Массив особей сортируется, последняя сотня обрезается, остается снова 200, но это уже особи с лучшие параметрами. И так, на каждом цикле отбора характеристики особей улучшаются.

И так, мой следующий шаг - добавить в редактор нейросетей блок обучения, основанный на генетическом алгоритме.


Использованные в данной статье скриншоты, являются цитатами и иллюстрациями   программного продукта "Quik", авторское право на который принадлежит "ARQA Technologies"

 

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

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