Рассчитать реализованную волатильность в R - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь рассчитать реализованную волатильность членов S & P 500 за определенный интервал c. У меня возникают проблемы при циклическом просмотре индекса и сохранении значений.

Процесс должен состоять в том, чтобы вычислить изменчивость каждого имени и затем сохранить его в кадре данных. Отформатированные «Тикер» и «Волатильность»

Я использовал приведенный ниже код для вычисления объема

library(tseries)
start_date <- as.Date("2019-04-23")
end_date <- as.Date("2020-01-22")
SP_500 <- data.frame(read.csv("Tickers.csv", header = TRUE))

data <- get.hist.quote('TIF',start_date, end_date, quote = c("Close"))
price <- data$Close
ret <- log(lag(price)) - log(price)
ret[is.na(ret)]<-0
vol <- sd(ret) * sqrt(252) * 100
vol

Я пробовал миллион различных попыток зацикливания и сохранения, но все не удалось .. Спасибо за помощь заранее!

1 Ответ

0 голосов
/ 24 января 2020

Мы можем создать функцию, которая загружает исторические данные для символа и вычисляет его волатильность.

library(tseries)

calculate_vol <- function(x, start_date, end_date) {

   data <- get.hist.quote(x,start_date, end_date, quote = "Close")
   price <- data$Close
   ret <- log(lag(price)) - log(price)
   ret[is.na(ret)]<-0
   vol <- sd(ret) * sqrt(252) * 100
   return(vol)
}

Затем мы можем передать символы этой функции, используя sapply, и преобразовать ее в кадр данных, используя stack. Предполагается, что столбец, где символы хранятся в CSV, называется symbol

SP_500 <- read.csv("Tickers.csv", header = TRUE)
realized_vol <- stack(sapply(SP_500$symbol, calculate_vol, start_date, end_date))

Например:

start_date <- as.Date("2020-01-01")
end_date <- as.Date("2020-01-22")
realized_vol <- stack(sapply(c('IBM', 'MSFT'), calculate_vol, start_date, end_date))
realized_vol

#     values  ind
#1  9.165962  IBM
#2 15.753567 MSFT
...