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 последних значений цены?

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

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