2013-05-22 44 views
1

我正嘗試使用R中的TTR包和volatility()函數來計算兩個底線之間的點差的滾動30日波動率。計算R點差(具有正值和負值)的波動率R

這裏是我的代碼剝離版本至今(已拉/清理的數據,日期匹配等):

asset1 <-c(rnorm(100, mean=50)) 
asset2 <-c(rnorm(100, mean=50)) 
spread <-c(asset1-asset2) 
vClose.spread <-volatility(spread, n=30, calc="close", N=252) 

現在我來到這裏的錯誤是:

Error in runCov(x, x, n, use = "all.obs", sample = sample, cumulative) : 
    Series contain non-leading NAs 
In addition: Warning message: 
In log(x) : NaNs produced 

任何協助或方向,不勝感激。

+0

拍在這裏暗,但嘗試'vClose.spread <-volatility(擴散,N = 30,計算值= 「關閉」,N = 252,類型= 「連續」)' – qwwqwwq

回答

3

volatility計算價格時間序列的波動率: 它只適用於正數量。 您可以直接使用runSD

# Standard deviation of the spread 
sqrt(252) * runSD(spread, 30) 
# Standard deviation of the change in spread 
sqrt(252) * runSD(diff(spread), 30) 
+0

謝謝@文森特。 我知道從時間序列計算出來的波動性,但是我之前並沒有意識到它不會處理0或負的價格。爲了得到年化波動率,我稍微改變了你的第二個等式: 'x2 < - (sqrt(1/252))* runSD(diff(spreadb12,30))* 100' 這似乎給出了結果與我在市場上看到的一致。你有什麼想法嗎?再次感謝你的幫助。 –

+0

用sqrt(252)進行劃分看起來不正確: 每日波動率(由'runSD'計算)應該比年化波動率低 。 這可能是您的評論中的錯字 ,但'30'不應位於diff中:它是'runSD'的參數。 –

+0

你說得對。在我的數據集中出現什麼奇怪的是: 當我看着我的數據集和檢查每日卷,30天卷和90天實現卷,我有以下結果: 90d實現了最高平均值和中位數隨後是30天,然後每天。我不會期望這是正常分佈。每日與30天和90天相比,SD和範圍要大得多(這很直觀)。 我的理解是否正確:數據可能有極端峯度,在較長的時間框架內變得無聲?這是我能想到這樣一個結果的唯一方法。 –