Решил копнуть чуть глубже в 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