Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算R中的已实现波动率_R_Loops_Stock_Volatility - Fatal编程技术网

计算R中的已实现波动率

计算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"

我试图计算标准普尔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", 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