r - 计算 R 中的已实现波动率
问题描述
我正在尝试计算标准普尔 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
我已经尝试了一百万种不同的循环和存储尝试,但都失败了..提前感谢您的帮助!
解决方案
我们可以创建一个函数来下载交易品种的历史数据并计算其波动率。
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
推荐阅读
- angular - 放大 Angular 7 构建错误 - 'NgModule' 调用'ɵmakeDecorator'
- python - 当我尝试返回通过列表理解创建的列表时,它会返回类似
- java - 如何将项目设置为在 JList 中选择
- c++ - “给定令牌的上下文字符串”是什么意思?
- elasticsearch - 如何从 ElasticSearch 记录中聚合匹配的前缀/短语?
- javascript - addEventListener 是否添加或设置?
- css - 如何选择给定集合中的第 n 个元素
- android - 无法在 Windows 10 上安装 HAXM
- javascript - 试图在函数中创建多维数组
- python - Python - 骰子和硬币游戏