.
Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.
Автор megabax   
24.02.2014 г.
unit AIObj

Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.

Что бы смотреть урок полностью, подпишитесь на платный раздел.

В платном разделе статья находиться здесь.


На уроке 5 мы начали, а на уроке 6 закончили программировать нейросеть с передаточными функциями, обучаемую при помощи генетического алгоритма. Сегодня попробуем научить торговать эту нейронную сеть на фондовой бирже. Обучение будет проходить на исторических котировках, которые мы скачаем из интернета. Но сначала нам понадобится библиотека StockLibrary.dll. в этой библиотеке содержаться классы, необходимы для эмуляции торгов на бирже. Если вы не в курсе, что такое бирже, кратко объясню: на бирже продаются и покупаются всякие акции, и другие ценные бумаги. Цена на них постоянно меняется. Допустим, можно купить акции Газпром по 200 руб. за штуку, а через какое время, если они выросли, продать дороже (например, за 210 руб.) и получить прибыль. А можно и наоборот, продать акции в минус (в пределах того, что позволяет залоговый депозит), а когда они упадут, выкупить их обратно. Такая операция называется "торговать в шорт". Так как историю цен акций можно скачать из интернета, то мы можем написать программу, которая по заданному алгоритму анализирует, когда продавать а когда покупать и проверить этот алгоритм на истории.

Что представляет из себя история котировок? С точки зрения программиста, это массив структур  c полями:

  • datetime - дата и время начала интервала.

  • open - цена на начло интервала.

  • low - наименьшая цена за интервал.

  • high - наибольшая цена за интервал.

  • close - цена на конец интервала.

Как я уже говорил, нам нужна библиотека StockLibrary.dll для работы с такими данными. Еще нам будут нужны файлы TradeSystem.cs , ITradeSystem.cs, TradeSystemTester.cs из урока 11 "Тестируем торговую стратегию". Что представляют собой эти файлы. ITradeSystem.cs - это интерфейс,  который содержит методы, необходимые для реализации торговой стратегии. Поскольку все, что связано с биржей я стараюсь унифицировать, отсюда появился и этот интерфейс.  TradeSystem.cs - в этом файле абстрактный класс основа реализации торговой стратегии. TradeSystemTester.cs - механизм тестирования торговых стратегий на исторических котировках.

За основу берем MACrossTradeSystem.cs тоже из урока 11 "Тестируем торговую стратегию", но только переделываем его. Сначала переименовываем в NeuroTradeSystem.cs и изменяем код, удаляем все лишнее. вот как будет у нас выглядеть реализация класса торговой стратегии:

 

//(С) Шуравин Александр www.easyprog.ru

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using TradeSystems;

using StockLibrary;

using Genetic;

 

namespace StockGraph

{

    public class NeuralTradeSystem : AbstractSignaler, ITradeSystem

    {

...

...

... 

 

...

 

...Тестировать будем на Газпроме, интервал 1 час. сначала нужно скачать котировки с сайта Финам:

 

Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.

 

Интервал тестирования у нас будет 2011 год:

 

Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.

 

 

И так, акции котировки скачали*:

Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.

 

Теперь немножко переделываем конструктор основной формы:

        public Form1()

        {

            InitializeComponent();

            pop = new Population();

            pop.MaxSize = 100;

            pop.MutationPossibility = 0.3;

            pop.SizeStrongMutation = 5;

 

            NeuralNet net = new NeuralNet();

 

            //у нейросети восемь входов

            for(int i=1; i<=8; i++) net.incomes.Add(0);

 

            net.createLayer(8);

            net.createLayer(5);

            net.createLayer(3);

            net.createLayer(1);

 

            //Последний, выходной нейрон должен иметь передаточную функцию "три уровня"

            net.layers[3].neurons[0].trans = TransFuncFactory.CreateTransFuncAsId(TransFuncConstId.ThreeLevelsId);

 

            pop.system = new NeuralTradeSystem();

            pop.system.count_trade = 1;

            PriceSource source = new PriceSource();

            source.LoadFromTextFile("c:\\4\\GAZP_110101_111231.txt");

            pop.system.source = source;

            pop.tester = new TradeSystemTester(source);

            pop.tester.system = pop.system;

            pop.tester.techCosts = 0.1; //Технические расходы (комиссия и прочее) 0.1% от цены сделки

            pop.BegCash = 1000;

 

 

            pop.initSpecies(net);

 

            show();

        }

 

Все, приступаем к тестированию:

 

Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.

 

Что у нас в итоге получается? Лучший результат 0.8388 и дальше не двигается. Посмотрим, какие сделки совершила оптимизированная нейросеть, воспользовавшись для этого такой программой:

        private void button1_Click(object sender, EventArgs e)

        {

            int index = lbPopul.SelectedIndex;

            if (index >= 0)

            {

                pop.LogFile = "c:\\4\\log.cvs";

                pop.PortLogFile = "c:\\4\\port.cvs";

                pop.species[index].Compute();

                pop.LogFile = "";

                pop.PortLogFile = "";

            }

        }

 

как оказалось, сделка всего одна: продажа в шорт в самом начале торгов*:

Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.

 

почему так происходит, этим вопросом мы озаботимся на следующем уроке.


Скриншоты, помеченные знаком *, являются цитатами и иллюстрациями  программного продукта "Блокнот", авторское право на который принадлежит корпорации Microsoft.. 


Последнее обновление ( 24.02.2014 г. )