快速计算R中滚动实现波动率的方法

快速计算R中滚动实现波动率的方法,r,xts,R,Xts,我想计算一系列指数的滚动20天已实现波动率。下面是我用来下载指数价格、计算每日收益率和20天已实现波动率的代码 library(quantmod) library(PerformanceAnalytics) tickers = c("^RUT","^STOXX50E","^HSI", "^N225", "^KS11") myEnv <- new.env() getSymbols(tickers, src='yahoo', from = "2003-01-01", env = myEnv)

我想计算一系列指数的滚动20天已实现波动率。下面是我用来下载指数价格、计算每日收益率和20天已实现波动率的代码

library(quantmod)
library(PerformanceAnalytics)

tickers = c("^RUT","^STOXX50E","^HSI", "^N225", "^KS11")
myEnv <- new.env()
getSymbols(tickers, src='yahoo', from = "2003-01-01", env = myEnv)
index <- do.call(merge, c(eapply(myEnv, Ad), all=FALSE))

#Calculate daily returns for all indices and convert to arithmetic returns
index.ret <- exp(CalculateReturns(index,method="compound")) - 1
index.ret[1,] <- 0

#Calculate realized volatility
realizedvol <- rollapply(index.ret, width = 20, FUN=sd.annualized)
库(quantmod)
库(性能分析)
股票代码=c(“^RUT”、“^STOXX50E”、“^HSI”、“^N225”、“^KS11”)

myEnv您可以在TTR包(由quantmod加载)中使用
runSD
,但您需要将
runSD
应用到每列,将
apply
的结果转换回xts对象,并手动将结果年度化

realized.vol <- xts(apply(index.ret,2,runSD,n=20), index(index.ret))*sqrt(252)

realized.vol我建议使用
ROC
计算回报;PerformanceAnalytics无法决定如何设置默认值<代码>index.ret谢谢你的提示。我尝试将我的大多数函数限制在尽可能少的库中,以防在开始混合来自不同库的函数时出现不兼容或不一致的情况。我的这种想法完全被误导了吗?一点也不。您必须加载的库越少,加载库所需的时间就越短,您的代码从上游中断的可能性就越小,而且其他人不必安装新软件包就可以使用您的代码的可能性就越大。这非常有效-大约需要2秒钟。为什么这比我的方法快得多?@mchangun:
runSD
几乎所有的计算都是用C语言完成的,而你的方法大部分的计算都是用纯R语言完成的。@GSee:其中之一。我已经在将它们从Fortran迁移到C的过程中有相当一段时间了。最终TTR中的run*函数将被移动到zoo和xts中的roll*函数。@JoshuaUlrich这可能有点离题,但这个已实现的波动实际上是历史波动,对吗?我这样问是因为有一大堆模型在估计未知的已实现波动率;或者我可能把自己和行话搞混了。@stucash:你说得对。估计“未知已实现波动率”的模型是隐含波动率模型,使用期权数据预测已实现波动率。