.
Генетический алгоритм. Шаг 20. Нейросеть торгует на виртуальной бирже
Автор 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 г. )