计算R中的已实现波动率
我试图计算标准普尔500指数成份股在特定区间内的实际波动率。我在循环索引和存储值时遇到问题 这个过程应该是计算每个名称的波动性,然后将其存储在数据框中。格式化的“股票代码”和“波动性” 我一直在使用下面的代码来计算vol计算R中的已实现波动率,r,loops,stock,volatility,R,Loops,Stock,Volatility,我试图计算标准普尔500指数成份股在特定区间内的实际波动率。我在循环索引和存储值时遇到问题 这个过程应该是计算每个名称的波动性,然后将其存储在数据框中。格式化的“股票代码”和“波动性” 我一直在使用下面的代码来计算vol library(tseries) start_date <- as.Date("2019-04-23") end_date <- as.Date("2020-01-22") SP_500 <- data.frame(read.csv("Tickers.csv"
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
库(tseries)
开始日期我们可以创建一个函数,下载符号的历史数据并计算其波动率
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)
}
例如:
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
start\u date用0
替换NA
可能不是一个好主意,因为这会改变波动性,最好使用sd(ret,NA.rm=TRUE)
。这非常有效!非常感谢你的帮助!!
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