Блог им. SciFi
Augmented Dickey-Fuller Test data: as.vector(spread) Dickey-Fuller = -2.2626, Lag order = 0, p-value = 0.4671 alternative hypothesis: stationary
> source("D:\\Dropbox\\R\\Cointegration.r")
# КОИНТЕГРАЦИЯ МЕЖДУ RIM6 И BRM6 #install.packages("tseries") # Установка пакета tseries (анализ временных рядов и количественные финансы) #install.packages("quantmod") # Установка пакета quantmod (количественный анализ торговых стратегий) #install.packages("rusquant", repos="http://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 изучаю, правда, для аналитики данных
пока дальше qplot не зашел
И да в plot можно задавать максимальное значение для оси X и Y что бы графики полностью попадали в область вывода, а не как у тебя во втором случае. Его можно задать через max() от двух рядов.
=) Будьте ближе к народу: посчитайте попарные коинтеграции для нашего рынка, пожалуйста.
Кого с кем можно ставить в стационарный спред?
Вот так выглядят их спред, синхронизированный по тикам в R на примере первого торгового часа 6 апреля 2016 года:
Извините конечно, но R такое жуткое говнище — работает в один поток, только вывод графиков хорош. Когда он меня окончательно довел взял кресты, и сейчас добавляю V8 в проект для динамичности.
Тоже самое относится и к питошке.
Андрей Л (division_by_zero),
Кресты — C++
V8 — движок для javascript. Очень хорошо работает с крестами. Можно определить js функции как коллбеки, вызывать js-код из крестов.