SciFi
SciFi личный блог
07 мая 2017, 10:43

Предсказание курса акций Газпрома с помощью нейронной сети на R

В предыдущем посте я писал про вычисление косинуса угла с помощью нейронной сети на R. В этом посте я расскажу о том, как с помощью нейронных сетей можно предсказывать цены и насколько эти предсказания реализуются. 

Итак, я взял историю с 2014 года, обучил нейронную сеть на дневных данных акций Газпрома и попробовал предсказать поведение цены на апрель. 

Предсказание курса акций Газпрома с помощью нейронной сети на R
Синяя линия — это предсказание динамики. Нейронная сеть думала, что будет двойное дно, после чего цена пойдет примерно на 137. 

А вот что было на самом деле. В следующем графике уже предсказание на май и видно, что было в апреле.

Предсказание курса акций Газпрома с помощью нейронной сети на R
Цена действительно пошла на 137, но двойного дна не было, а было обновление лоя на 121 и уже потом поход на 137. 

Я думаю, нейронная сеть может предсказывать примерную динамику, но не точно. Хотя, возможно это случайность, что она угадала отскок до 137. 

Код на R тут:

#Прогнозы с помощью нейронной сети

#system.time(source('D:/Dropbox/R/MachineLearning/NeuralNetworks/NN.R'))
#Вызов этого скрипта

#install.packages('quantmod')
#install.packages('rusquant')
#install.packages('forecast')

library('quantmod')
library('rusquant')
library('forecast')

#dev.off()
#Очистка графиков

rm(list = ls())
#Очистка среды R от лишних переменных в памяти, если требуется

startDate <- as.Date('2014-03-01')
#endDate <- as.Date('2017-04-01')

getSymbols('GAZP', src='Finam', from=startDate, period='day')

#chartSeries(GAZP)

#Обучение нейронной сети
#p - число входящих нейронов, желательно чтобы совпадало с периодичностью
#lambda - параметр трансорфмации Бокса-Кокса
fit <- nnetar(Cl(GAZP), lambda = 0, p = 40)

#Прогнозирование с помощью нейронной сети
#h - дальность прогноза (по умолчанию 10 если нет периодичности)
fc <- forecast(fit, h = 40)

#График прогноза
plot.forecast(fc, include = 200, showgap = FALSE)

#Детали 
print(summary(fc))

В предыдущем посте я использовал для вычисления косинуса либу neuralnet. В этом посте я уже использовал функцию nnetar из либы forecast, так как для прогнозирования временных рядов она удобнее и лаконичнее получается.




25 Комментариев
  • Redline
    07 мая 2017, 11:53
    Я думаю, нейронная сеть может предсказывать примерную динамику, но не точно

    Это прекрасно. Заберу себе.
  • Albert Rudolfovich
    07 мая 2017, 12:00
    за изобретение — пять!
  • Baks
    07 мая 2017, 12:09
    А думали ли Вы о поведении сети под влиянием третьего и восьмого элемента? От этого влияния сеть начинает давать сбои на уровне PH. Влияние расторговывается после вливания 300-500г.
    И сбой нивелируется иными предпочтениями… попробуйте, хуже не будет…
  • Маркин Павел
    07 мая 2017, 12:53
    На вход какие данные подавал? просто 40 последних значений цены?
      • Маркин Павел
        09 мая 2017, 16:00
        SciFi, 
        1. нейросети крайне плохо работают с абсолютными данными — лучше использовать на вход логарифм приращения цен Ln(Р2/Р1).
        2. нейросети с функцией активации гиперболического тангенса лучше справляются с динамическими рядами, и входные данные необходимо отнормировать(привести к разбросу входных данных в диапазон [-1;+1]).

        3. 40 дней «пилы» предскажут только продолжение «пилы», а не смену тренда. Обработай предварительно входные данные — примени zig-zag и подавай на вход приращения между экстремумами (не важно сколько времени между ними прошло) — тогда сеть будет искать фрактальные закономерности, волны, паттерны, фигуры типа "двойное дно", "гип" и т.д.

        4. Если перейдёшь на приращения и экстремумы, то можешь спокойно скормить сети любые инструменты (лучше брать некоррелирующие), а не только Газпром, и любой период, тогда у сетки будет боОольшая обучающая выборка, и меньше возможностей попасть в локальный минимум.

        5. с выхода не требуй больше 2-3 значений.
  • .i.
    07 мая 2017, 13:38
    трейдер со средним опытом вряд ли предположил бы двойное дно, что с этой сетью не так?
  • CrocGen
    07 мая 2017, 14:04
    Предлагаю сделать предсказание не на два месяца, а скользящим окошком пройтись по истории в год. И заодно еще учесть 2008 год, например. Много интересного узнаете про свою сетку)
  • Mao CzeDOOM
    07 мая 2017, 14:04
    Сеть не так уж и ошиблась. Но так это ж робот… а я в последнее время себе даже не доверяю: хотел пукнуть, но обор… ся =). 
    Удачных разработок!
  • Юнчикс
    07 мая 2017, 14:23
    Мда. Т.е. сейчас Ваша система предсказывает рост газика до 142-143 и падение? Весьма возможно, но прямое падение с нынешнего уровня тоже весьма возможно.
  • alexKa
    07 мая 2017, 14:44
    В общем могу сказать следующее: Этот метод представляет собой древнюю модель ARIMA, авторегрессионная модель скользящего среднего одной переменной. А нейронная сеть используется тут чисто для подбора параметров модели, что в общем неэффективно, и может неправильно подобрать. 
     Не работает, может повезет пару раз, но возможность пролететь будет однозначно.
     То есть для тех кто не в курсе, это модель, которая строится на скользящем среднем по графику акции Газпрома, акция Газпрома представляется как линейная функция, зависящая от нескольких предыдущих значений скользящего среднего. С помощью нейронной сети тут подбирают коэффициенты каждой составляющей этой функции.
  • Георгий Иголкин
    07 мая 2017, 14:47
    Нейронная сеть в та — мракобесие
    • Watcher
      07 мая 2017, 17:07
      Семен Семенычъ, суть ТА — в паттернах. Распознавание паттернов — одно из главнейших приложений нейросетей.
  • Алексей
    07 мая 2017, 15:02
    Это грааль!
  • evgen000
    07 мая 2017, 15:40
    Это слишком просто, так в лоб это не сработает. Несмотря на сложность метода под капотом
  • БорисыЧ
    07 мая 2017, 17:29
    Интересно было бы «скормить» мои индикаторы вашей нейронке.
  • HunterSrike
    08 мая 2017, 00:45
    Эти нейросети косинус то криво предсказывали, а тут внезапно бы разошлись и выдали «правду».
  • Sergey Pavlov
    08 мая 2017, 09:41
    За труд и пример спасибо!

    По применению нейросетей. Нейросеть это не волшебная палочка. Это даже не реализация магической интуиции человека. Нейросеть=ИНС это всего лишь универсальный аппроксиматор, который можно затем использовать, чтобы разделить облако данных, что-то предсказать, распознать и т.д. Но в основе это лишь аппроксимация (как линейная, так и нелинейная). Без потери общности и частности можно утверждать, что любая линейная регрессия, пересечение скользящих средних и пр и пр это лишь варианты нейросетей.

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

    Ибо когда мы на вход нейросетки из нескольких слоев и множества нейронов кидаем хоть цены хоть индикаторы… то результат либо бред либо жуткая переподгонка.
      • Sergey Pavlov
        08 мая 2017, 11:05
        SciFi, топ-20 по ликвидности акций и топ-10 фьючерсов (за исключением нефти, золота, серебра и евро-доллара) на нашем рынке хорошо торгуются скользяшками.
  • Lafert
    10 мая 2017, 20:48
    Если честно, рассуждения вроде «тут угадала, тут почти угадала» от человека, знающего программирование, коробят. Как минимум интересно увидеть эквити системы на истории. Можно перед каждым новым баром даже переобучать на всех до предыдущего включительно. Вообщем, без бектеста как — то неинфоомативно, хотя тема интересная
  • Андрей Кропотов
    24 апреля 2020, 17:47
    То есть вводишь много много значений (чем больше, тем лучше)… и программа анализирует по какому принципу эти числа следуют друг за другом и примерно предсказывает следующие числа? И это рабочий код для этой программы?

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн