Коинтеграция Si со спотом
(очевидно, что должна быть) как проверочный случай
Коинтеграция RIM6 и BRM6
Augmented Dickey-Fuller Test data: as.vector(spread) Dickey-Fuller = -2.2626, Lag order = 0, p-value = 0 <a name="cut" id="cut"></a> .4671 alternative hypothesis: stationary
Вывод
Торговать RTS только по Brent или эту пару нельзя, так как процесс нестационарный (p-value сильно больше 0.05)
Вызывать так
> source("D:\\Dropbox\\R\\Cointegration.r")
Скрипт на R
# КОИНТЕГРАЦИЯ МЕЖДУ RIM6 И BRM6 #install.packages("tseries") # Установка пакета tseries (анализ временных рядов и количественные финансы) #install.packages("quantmod") # Установка пакета quantmod (количественный анализ торговых стратегий) #install.packages("rusquant", repos="https://R-Forge.R-project.org") # Установка пакета rusquant (адаптированная под Россию версия quantmod) library(tseries) library(quantmod) library(rusquant) # Подключение библиотек tickerArray <- c("RIM6", "BRM6") # Создаем массив из тикеров, для которых будем получать данные # Если получать по очереди, то возникают ошибки в скрипте, хотя при # построчном выполнении это делать можно getSymbols(tickerArray, from=Sys.Date()-30, src="Finam", period="5min") # Получение 5 минутных данных за последний месяц (а точнее, 30 дней) # candleChart(BRM6) # Строим свечной график, чтобы убедиться в том, что данные скачались # В скрипте это бесполезно data <- cbind(Cl(RIM6), Cl(BRM6)) # Создание структуры данных из цен закрытия 5 минутных свечей двух активов data <- data[complete.cases(data)] # Убираем те данные, в которых есть пробелы (одна цена закрытия есть, а другой нет) print(summary(data)) # Смотрим, что из себя представляют наши данные: общие статистические параметры # Обратите внимание, что в скрипте print нужен, хотя при построчном выполнении не нужен print(head(data)) # Смотрим, что из себя представляют наши данные: первые 6 строк names(data) <- c("RIM6", "BRM6") # Переименовываем столбцы в data на более удобные model <- lm(RIM6~BRM6+0, data) # Создаем модель линейной регрессии print(summary(model)) # Смотрим модель spread <- data$RIM6 - coef(model)[1]*data$BRM6 # Расчитываем остатки модели # plot(spread, type="l") # Рисуем график остатков в виде линии # В скрипте это бесполезно print(adf.test(as.vector(spread), k=0)) # Проводим расширенный тест Дики-Фуллера на стационарность # И тут же выводим результаты plot(as.vector(Cl(RIM6)), col='blue', type='l', main='Cointegration between RIM6 and BRM6', ylab='price') # Рисуем график цен закрытия RIM6 lines(as.vector(Cl(BRM6)*coef(model)[1]), col='red', type='l') # Добавляем к нему график BRM6, чтобы увидеть коинтегрированность
Список использованных источников
Коинтеграция в вики
Сравнение временных рядов
О коинтеграции временных рядов на R
Описание библиотеки tseries
Подробнее про функцию complete.cases
Трендовая стационарность
Тест Дики-Фуллера