r - 如何根据 R 中的每日收益计算历史月度波动率?
问题描述
首先,我创建了一个 xts 对象,其中包含 36 个时间序列,显示从 1980 年 1 月 2 日到 2020 年 10 月 6 日的每日价格。
ENERGY_data$time <- as.Date(ENERGY_data$time, format("%Y/%m/%d"))
ENERGY_xts <- ENERGY_data[order(ENERGY_data$time), ]
ENERGY_xts <- as.xts(ENERGY_xts[, 2:37], order.by=ENERGY_xts$time)
然后我使用 PerformanceAnalytics 函数 CalculateReturns() 计算了连续复合的每日回报
ENERGY_returns.cc <- CalculateReturns(ENERGY_xts, method="compound")
现在我想根据这个公式计算从 1980 年 1 月 2 日到 2020 年 10 月 6 日每个月的波动率:每月 波动率公式
你能给我一些提示(在编码方面)吗?
解决方案
看看这个函数,请注意我模拟了回报,因为你没有提供你的。
library(xts)
set.seed(123)
returns <- matrix(rnorm(30*365*5, 0.0001, 0.0002), ncol = 30)
timeindex <- seq.Date(from = as.Date('2000-01-01'), length.out = 365*5, by = 'days')
test_xts <- xts(returns, order.by = timeindex)
calcFrenchVolOneAsset <- function(x){
ndays <- nrow(x)
first_part_of_formula <- sum(x^2)
second_part_of_formula <- 2*sum(x[-1]*x[-nrow(x)])
res <- sqrt(first_part_of_formula + second_part_of_formula)
return(res)
}
calcFrenchVolMultipleAssets <- function(x){
ndays <- nrow(x)
first_part_of_formula <- colSums(x^2)
second_part_of_formula <- 2*colSums(x[-1, ]*x[-nrow(x), ])
res <- sqrt(first_part_of_formula + second_part_of_formula)
return(res)
}
# test for the first month and the first asset
calcFrenchVolOneAsset(test_xts['2000-01', 1])
calcFrenchVolMultipleAssets(test_xts['2000-01', 1])
# apply monthly and on columns
monthly_vols <- apply.monthly(test_xts, calcFrenchVolMultipleAssets)
head(monthly_vols[, c(1:5)])
e1 e1.1 e1.2 e1.3 e1.4
2000-01-31 0.002030192 0.002402946 0.001717494 0.001888513 0.002322648
2000-02-29 0.001983995 0.002343783 0.001789346 0.001671332 0.001824278
2000-03-31 0.001910535 0.002429689 0.001709092 0.002492223 0.002068032
2000-04-30 0.001765052 0.002114554 0.001946232 0.002160436 0.002139949
2000-05-31 0.002269842 0.002476424 0.001626455 0.002030027 0.002400690
2000-06-30 0.002082933 0.001905620 0.001681579 0.001992082 0.002010535
推荐阅读
- python - 跨度标签内文本的美丽汤提取
- python - 比较列值是列表的熊猫数据帧
- oracle - 与智能合约预言机交互
- r - 基于 2 个引用字符串列创建新列
- json - JQ - 获取 json 中的所有路径,包括“null”值
- python - Python Pandas:以紧凑的形式取消堆叠嵌套的 Excel Pivot 报表以获取机器可读数据
- javascript - 如何从 vue js 应用程序上传 laravel 本地公共磁盘中的文件?
- android - MainActivity.kt 无法通过 ID 识别按钮
- java - 如何处理可以根据结果数据返回不同 JSON 数据结构的 API 调用
- android - 从后台堆栈清除片段后无法访问片段