Программирование - это просто
Advertisement
Главная arrow Искусственный интеллект arrow Искусственный интеллект arrow Генетический алгоритм (платный раздел) arrow Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже.
16.08.2018 г.
Главное меню
Главная
Системный подход
Интернет магазин
Биржевые роботы
Программные продукты
Математика и информатика
1С:Предприятие
C#, Delphi, VB, F#, Web и пр.
Искусственный интеллект
Услуги
Ча. Во. (FAQ)
Платный раздел
Наука для чайников
Разное
Размышления
Карта сайта
Друзья сайта
Excel-это не сложно
Все о финансах
Генетический алгоритм. Урок 7. Нейросеть, торгующая на бирже. Печать E-mail
Автор 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 г. )
 
« След.   Пред. »
 
© 2018 Программирование - это просто
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 рабочих дня.
узнать больше
Платежные терминалы
Оплата покупок в терминалах крупнейших платежных систем в любом городе России - быстро и без комиссии.
узнать больше