2012-11-12 43 views
0

我正在寻找一种快速计算滚动FORWARD查找基础上的已实现波动率的方法。所以我想用今天的标准差作为未来n天的第一次观察。根据前瞻性基础计算滚动实现的波动

此刻,我计算已实现波动率与下面的代码的反方向:

​​

我试着设置n = -125,但勿庸置疑,这是行不通的。

谢谢。

编辑

为了澄清什么,我试图做的,这里是for循环,我使用来实现:

for(i in 1:nrow(index.ret)){ 
    bear.realized[i,] = sd(bear.ret[i:(i+124),]) * sqrt(252) 
    index.realized[i,] = sd(index.ret[i:(i+124),]) * sqrt(252) 
} 

在过去的124个观察,我没有足够的数据来计算波动性,我希望它能够进行最后的“正确”计算,并将其用于系列的其余部分。

回答

0

OK我解决了它。其实很简单,只是想着这是完全错误的方式。

index.realized <- xts(apply(index.ret,2,runSD,n=125), index(index.ret))*sqrt(252) 
index.realized <- lag(index.realized, -124) 
index.realized <- na.locf(index.realized) 

只是计算实际波动率按正常,然后由适当数量的滞后,以便它是“前瞻性”。

3

一种方式来做到这一点是“滞后”的系列负面k(注意:klag.xts不同的解释比lag.tslag.zoo)。

getSymbols("SPY") 
spy <- ROC(Cl(SPY)) 
# note that k is interpreted differently from lag.ts and lag.zoo 
spy$SPY.Lag <- lag(spy,-125) 
# remove trailing NA 
spy <- na.omit(spy) 
rv <- runSD(spy$SPY.Lag,n=125)*sqrt(252) 
+0

感谢您的回复。 我试过这个解决方案,但我不认为它确实是我想要的。当我滞后-125时,我失去了前125个观测值。所以当我运行runSD时,我得到了125个观察值的NAs,因此错过了前125个实现波动的读数。 – mchangun