Блог им. SciFi
#install.packages("PortfolioAnalytics") #install.packages("quantmod") #install.packages("rusquant", repos="http://R-Forge.R-project.org") library(PortfolioAnalytics) library(quantmod) library(rusquant) rm(list = ls()) # Очистка среды R от лишних переменных в памяти, если требуется fund.names <- c("MICEX", "BANE", "ALRS", "TGKA", "GMKN", "RUALR", "PHOR", "AKRN", "ROSN", "OFCB") # Создаем массив из тикеров, для которых будем получать данные if ( ! exists("BANE") ) { getSymbols(fund.names, src = "Finam", from = "2012-01-01") # Получение котировок } prices.data <- merge(MICEX[,4], BANE[,4], ALRS[,4], TGKA[,4], GMKN[,4], RUALR[,4], PHOR[,4], AKRN[,4], ROSN[,4], OFCB[,4]) returns.data <- CalculateReturns(prices.data) returns.data <- na.omit(returns.data) colnames(returns.data) <- fund.names # Подготовка данных по ценам закрытия beta <- CAPM.beta(returns.data$BANE, returns.data$MICEX, Rf = 0) print(round(beta, 2)) # Расчет беты первым способом, # через использование встроенной функции пакета PortfolioAnalytics model <- lm(BANE ~ MICEX, returns.data) beta <- coef(model)[2] print(round(beta, 2)) # Расчет беты вторым способом, # через построение линейной регрессии между доходностями актива и индекса betas <- array(1:length(fund.names)) for (i in 1:length(fund.names)) { curReturns <- returns.data[,i] beta <- CAPM.beta(curReturns, returns.data$MICEX, Rf = 0) betas[i] <- round(beta, 2) } fund.betas <- data.frame(fund.names, betas) # Для списка активов получаем бета коэффициенты и сохраняем их в таблицу ordered.fund.betas <- fund.betas[order(-betas),] # Сортируем по убыванию бет View(ordered.fund.betas) # Отображаем отсортированную таблицу
Доделаю кое-какие расчёты по удалению детерминированной составляющей сигнала и выложу статейку о декомпозиции рыночных данных на детерминированную (тренд+сезонность) + стохастическую с аппроксимацией и прогнозом на K шагов вперёд. Пока что использую вейвлеты + современные методы спектрального анализа (MUSIC+ESPRIT).
А можно простым языком?
Пасиба!