2012-11-06 59 views
7

我試圖計算滾動20期歷史波動率。我把每天的回報:適用於時間序列

ret<-ROC(data1) 

然後我用rollapply以獲取每列20天的HV:

vol<-rollapply(ret,20,sd,by.column=T,fill=NA) 

的問題是,在體積意見開始十天後這是錯誤的出現如I所指明20.

出於演示這裏是數據的樣本:

0.000000000, 0.005277045, 0.023622047, 0.002564103,-0.002557545, -0.020512821, 
0.007853403,-0.012987013, 0.007894737, 0.015665796, 0.000000000, -0.002570694, 
0.002577320, -0.015424165, 0.002610966, 0.010416667, 0.002577320, 0.015424165, 
0.000000000, -0.002531646, -0.002538071, 0.030534351, 0.014814815, -0.007299270, 
-0.009803922, -0., 0.002506266, -0.015000000,-0.002538071, 0.002544529 

假設上述被存儲在x時,則數據:

rollapply(x,20,sd,fill=NA) 

將在第10行得到第一觀察,而不是20。此外在SD是錯了。

我應該在這裏失蹤的東西...

回答

18

您需要使用align='right'而不是使用默認這是align='center',或代替使用rollapply,使用rollapplyr包裝具有align='right'作爲默認的。

?rollapply

對準結果的索引 specifyies是否應當是左或右對齊或居中(默認值)相比,觀測的滾動窗口。只有寬度代表寬度時才使用此參數。

雖然,爲此,我個人使用TTR包中的runSD,因爲它使用了編譯代碼,並且速度會更快。

這些都應該做你期望的,但第二個會更快。

library(zoo) 
rollapply(x, 20, sd, fill=NA, align='right') 

library(TTR) 
runSD(x, 20) 
相關問題