SciFi
SciFi личный блог
14 июня 2016, 03:38

Расчет бета-коэффициентов на R двумя способами

Посчитал беты акций своего инвест. портфеля двумя способами — с помощью пакета PortfolioAnalytics и через линейную регрессию с индексом ММВБ. Результаты расчетов совпали. 

Затем я составил таблицы для бет, взяв две истории — с 2012 года по настоящее время и с 2015.

Таблицы

Расчет бета-коэффициентов на R двумя способами
С 2012 г.

Расчет бета-коэффициентов на R двумя способами
C 2015 г.

Видно, что Роснефть и Норникель бегают за рынком. ФосАгро, Акрон и банк Открытие не зависят от рыночных настроений.

Код на R:

rong>
#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)
# Отображаем отсортированную таблицу 
9 Комментариев
  • athlant64
    14 июня 2016, 09:36
    А как в экселе рассчитать? Как там бета считается?
  • Жаль, что рейта не хватает, чтобы плюсануть. ((( 
    Доделаю кое-какие расчёты по удалению детерминированной составляющей сигнала и выложу статейку о декомпозиции рыночных данных на детерминированную (тренд+сезонность) + стохастическую с аппроксимацией и прогнозом на K шагов вперёд. Пока что использую вейвлеты + современные методы спектрального анализа (MUSIC+ESPRIT).
    • athlant64
      14 июня 2016, 10:14
      Бобровский Дмитрий, ничего не понял )))
      А можно простым языком?
    • sortarray sortarray
      14 июня 2016, 10:27
      Бобровский Дмитрий, а я все жду, когда Вы напишете, таки, скрипт по нашему спору. Сколько уже прошло, 2 месяца? Вам сколько времени нужно, год может быть?:) Наше пари все еще в силе? Исходя их того, что Вы брали срок неделю, Вы де-факто уже проиграли, не так ли?:)
      • sortarray sortarray, блииииин, прощения прошу, я забыл совсем. ((( Давайте так: т.к. я сроки протянул, засчитаем мне поражение. 1000 рублей вышлю на любой указанный счёт (лучше сбер онлайн, т.к. у меня карта сбера). Свои долги всегда возвращаю. А скрипт потом напишу, руки просто дойти должны. Кстати, если будет возможно, скиньте джавовый скрипт Ваш на мыло мне.
        Пасиба!
        • sortarray sortarray
          14 июня 2016, 12:22
          Бобровский Дмитрий, пришло. Спасибо Вам за Вашу честность и порядочность!
          • sortarray sortarray, и Вам. В споре рождается истина. )) А скрипт всё же допишу, руки дойдут, обещаю. Вообще, планирую тут делиться интересными идеями по анализу временных рядов. В частности, буду выкладывать свои наработки, как это делает SciFi.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн