SciFi
SciFi личный блог
08 июня 2016, 12:48

Применение ARIMA для предсказания цены на RIM6 на R

Решил копнуть чуть глубже в ARIMA и другие подобные модели. Попробовал предсказывать цену, а точнее, диапазон цен на ближайшую минуту и 5 минут и на этом сделать какие-то деньги. И что интересно, получилось. Хотя, возможно, это случайность отчасти, не тестировал на большом горизонте времени.

В комментариях к коду все есть.

ARIMA (англ. autoregressive integrated moving average, иногда модель Бокса — Дженкинса, методология Бокса — Дженкинса) — интегрированная модель авторегрессии — скользящего среднего — модель и методология анализа временных рядов. 

Основная идея этой модели в том, что цена в будущем зависит от цен в прошлом (авторегрессионная часть AR) и возврата к среднему (MA часть). А интегрированность означает то, что предварительно определяется порядок интегрированности для временного ряда. К примеру, порядок 1 означает, что разности 1 порядка являются стационарными. Для самой цены порядок интегрированности должен получаться равным 1, а для доходностей — 0. 

Заработал 230 рублей за 2 сделки 1 лотом на RIM6. Первая сделка была за счет предсказания на минутке, вторая на 5 минутке.

График

Применение ARIMA для предсказания цены на RIM6 на R




Код на R

#install.packages("forecast")
#install.packages("tseries")
#install.packages("quantmod")
#install.packages("rusquant", repos="http://R-Forge.R-project.org")
# Установка пакетов. Она не требуется, если уже все установлено.

library(tseries)
library(quantmod)
library(rusquant)
library(forecast)
library(arfima)
# Подключение библиотек. ARFIMA и quantmod пока не используются. 

getSymbols("RIM6", src = "Finam", from = Sys.Date()-30, period = "5min")
# Получение 5 минутных свечей за последние 30 дней. Достаточно из за последние 2 дня. 

#candleChart(RIM6)
# По желанию можно построить график, чтобы убедиться в правильности загрузки данных.

closes <- Cl(RIM6)
returns <- OpCl(RIM6)
# Цены закрытия и доходности

print("Best ARIMA Model for Close Prices")
print(arimaorder(auto.arima(closes)))
# Автоматический поиск лучшей ARIMA модели для цен закрытия с помощью критериев типа AIC

print("Best ARIMA Model for Returns")
print(arimaorder(auto.arima(returns)))
# Аналогично для доходностей

fit.closes <- Arima(closes, order=c(3, 1, 2))
fit.returns <- Arima(returns, order=c(2, 0, 2))
# После того, как нашли лучшую математическую модель, заново оптимизируем ее под цены

print("AIC Closes:")
print(AIC(fit.closes))
# Вывод AIC для цен закрытия

print("AIC Returns:")
print(AIC(fit.returns))
# Аналогично для доходностей

par(mfrow=c(2,1))
# Создаем график с 2 строками и 1 столбцом

plot(forecast(fit.closes), main='Close Prediction', lwd = 2, type="l", col="red")
lines(fitted(fit.closes),col="blue", lwd = 2)
# Добавляем цены закрытия (красные) и предсказания цен закрытия (синие)
# Если взять меньший период, чем 30 дней, эти линии будут видны

plot(forecast(fit.returns), main='Return Prediction', lwd = 2, type="l", col="red")
lines(fitted(fit.returns),col="blue", lwd = 2)
# Аналогично для доходностей

print('Close Price Predictions')
print(predict(fit.closes, n.ahead = 3))
# Распечатываем предсказания цены и ее диапазона (отклонение)

print('Return Predictions')
print(predict(fit.returns, n.ahead = 3))
# Аналогично для доходностей

#residuals.closes <- residuals(fit.closes)
#adf.test(residuals.closes)
#acf(residuals.closes)
# По желанию можно проанализировать остатки модели на автокорреляцию и стационарность
# с помощью теста Дики-Фуллера
# Остатки будут представлять из себя белый шум

Список источников

ARIMA

In R plot arima fitted model with the original series


Forecast from ARIMA fits

AUTOREGRESSIVE INTEGRATED MOVING AVERAGE ARIMA(P, D, Q) MODELS FOR TIME SERIES ANALYSIS

Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.

58 Комментариев
  • SergeyJu
    08 июня 2016, 14:33
    Если ограничиться AR моделью, Вы получите гораздо более эффективную с вычислительной точки зрения модель. Де-факто, МНК с обращением матрицы специального вида.
    Но, если честно, я не очень верю в примитивное предсказание цены. На моей памяти, даже использование продвинутой ARFIMA с использованием CUDA для численного решения не показало ничего, пригодного для торговли. Правда, реализация была не моя, а моего знакомого, тонкостей я не знаю, и не поручусь, что он выжал из темы все, что возможно. 
  • Евгений Черных
    08 июня 2016, 14:37
    Предсказания? Нюню…
  • Максим Андреев
    08 июня 2016, 15:38
    Интересная тема кстати с АРИМОЙ, сам думал с этого начинать, потом рукой махнул, вроде еще более совершенные модели есть arch/garch, хотя в них уже не вникал. Тема реально интересная, думаю, если вы хороший спец, стоит в этом направлении покапать и потестировать 
  • IliaM
    08 июня 2016, 16:32
     А сделки то вручную вводили? Т.е. каждую минуту пересчет и ручной ввод?

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

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