Решил копнуть чуть глубже в ARIMA и другие подобные модели. Попробовал предсказывать цену, а точнее, диапазон цен на ближайшую минуту и 5 минут и на этом сделать какие-то деньги. И что интересно, получилось. Хотя, возможно, это случайность отчасти, не тестировал на большом горизонте времени.
В комментариях к коду все есть.
ARIMA (англ. autoregressive integrated moving average, иногда модель Бокса — Дженкинса, методология Бокса — Дженкинса) — интегрированная модель авторегрессии — скользящего среднего — модель и методология анализа временных рядов.
Основная идея этой модели в том, что цена в будущем зависит от цен в прошлом (авторегрессионная часть AR) и возврата к среднему (MA часть). А интегрированность означает то, что предварительно определяется порядок интегрированности для временного ряда. К примеру, порядок 1 означает, что разности 1 порядка являются стационарными. Для самой цены порядок интегрированности должен получаться равным 1, а для доходностей — 0.
Заработал 230 рублей за 2 сделки 1 лотом на RIM6. Первая сделка была за счет предсказания на минутке, вторая на 5 минутке.
График

Код на 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
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
Но, если честно, я не очень верю в примитивное предсказание цены. На моей памяти, даже использование продвинутой ARFIMA с использованием CUDA для численного решения не показало ничего, пригодного для торговли. Правда, реализация была не моя, а моего знакомого, тонкостей я не знаю, и не поручусь, что он выжал из темы все, что возможно.
НО!
Правильная постановка вопроса не «если модель содержит», а «какая модель лучше подходит».
Это как в вопросе с ФНЧ. Можно проектировать фильтр с идеальной АЧХ, или с минимальной задержкой или еще как. Но по факту лично моих исследований, простая ЕМА оказывается в моих системах лучше и продвинутых КИХ и продвинутых БИХ. фильтров. И медианных фильтров, и прямой оценки производной численными методами.
Жизнь как бы мне намекает, сложность не окупается. Возможно, у Вас и не так.
SergeyJu, могут быть оные. В качестве примера можно привести КИХ-фильтр на 2 точки с h_{1} = 1, h_{0} = 0.95 и белым шумом на входе. Как-то так.
Модели могут иметь больше или меньше параметров, лучше или хуже соответствовать конкретной задаче.
Качество модели безотносительно области применения оценить практически невозможно.
Попробуйте, авось что и выйдет. Чисто идеологически, все, что работает в предположении стационарности ряда, или стационарности с точностью до одного оцениваемого и медленно меняющегося параметра, на ценовых рядах работать должно плохо. Наши ряды более зашумлены и менее стационарны, чем то, с чем обычно имеют дело в технике.
))
является лажой, т.к. почему-то вне зависимости от того, что дала Вам библиотека forecast, Вы используете только модели ARIMA(3, 1, 2) и ARIMA(2, 0, 2)
www.otexts.org/fpp
Table of contents
Forecasting: principles and practice
Getting started
The forecaster's toolbox
Judgmental forecasts
Simple regression
Multiple regression
Time series decomposition
Exponential smoothing
ARIMA models
Advanced forecasting methods
Data
Using R
Resources
Reviews