【问题标题】:how to calculate rolling volatility如何计算滚动波动率
【发布时间】:2012-07-01 16:23:05
【问题描述】:

我正在尝试设计一个计算 30 天滚动波动率的函数。 我有一个包含 3 列的文件:日期和 2 只股票的每日收益。

我该怎么做?我在总结前 30 个条目以获得我的 vol 时遇到问题。

编辑:

因此它将读取一个包含 3 列的 excel 文件:日期和每日回报。

daily.ret = read.csv("abc.csv")

例如日期 库存1 库存2 01/01/2000 0.01 0.02

等等等等,有多年的数据。我想计算滚动 30 天的年化成交量。 这是我的功能:

calc_30day_vol = function()
{
stock1 = abc$stock1^2
stock2 = abc$stock1^2
j = 30
approx_days_in_year = length(abc$stock1)/10
vol_1 = 1: length(a1) 
vol_2 = 1: length(a2)

for (i in 1 : length(a1))
{
vol_1[j] = sqrt( (approx_days_in_year / 30 ) * rowSums(a1[i:j])

vol_2[j] = sqrt( (approx_days_in_year / 30 ) * rowSums(a2[i:j])


j = j + 1
}

}

所以 stock1 和 stock 2 是来自 excel 文件的每日回报的平方,需要计算 vol. vol_1 和 vol_2 的条目 1-30 为空,因为我们正在计算 30 天的 vol。我正在尝试使用 rowSums 函数对前 30 个条目的每日收益平方求和,然后在每次迭代中向下移动索引。 所以从第 1-30 天、第 2-31 天、第 3-32 天等开始,所以我定义了“j”。

我是 R 的新手,如果这听起来很愚蠢,我深表歉意。

【问题讨论】:

  • 谢谢,我尝试添加更多细节以进行解释。
  • 如果您在顶部的搜索框中输入“[r] rolling”,您会得到所有这些答案stackoverflow.com/search?q=%5Br%5D+rolling,因为这是一个非常常见的问题。
  • 这将下载 SPY 的价格,计算每日对数回报,然后计算 30 天滚动标准差:library(quantmod); getSymbols("SPY"); runSD(ROC(SPY), n=30)
  • 除了@GSee的建议,你还可以使用TTR::volatility
  • @GSee:(或 Joshua 或 Dirk)有人会提出答案或投票以重复关闭吗?

标签: arrays r


【解决方案1】:

这应该让你开始。

首先我必须创建一些看起来像你描述的数据

library(quantmod)
getSymbols(c("SPY", "DIA"), src='yahoo')
m <- merge(ROC(Ad(SPY)), ROC(Ad(DIA)), all=FALSE)[-1, ]
dat <- data.frame(date=format(index(m), "%m/%d/%Y"), coredata(m))
tmpfile <- tempfile()
write.csv(dat, file=tmpfile, row.names=FALSE)

现在我有一个包含您非常特定格式的数据的 csv。 使用read.zoo 读取csv,然后转换为xts 对象(有很多方法可以将数据读入R。参见R Data Import/Export

r <- as.xts(read.zoo(tmpfile, sep=",", header=TRUE, format="%m/%d/%Y"))
# each column of r has daily log returns for a stock price series
# use `apply` to apply a function to each column.
vols.mat <- apply(r, 2, function(x) {
    #use rolling 30 day window to calculate standard deviation.
    #annualize by multiplying by square root of time
    runSD(x, n=30) * sqrt(252)
})
#`apply` returns a `matrix`; `reclass` to `xts`
vols.xts <- reclass(vols.mat, r) #class as `xts` using attributes of `r`
tail(vols.xts)
#           SPY.Adjusted DIA.Adjusted
#2012-06-22    0.1775730    0.1608266
#2012-06-25    0.1832145    0.1640912
#2012-06-26    0.1813581    0.1621459
#2012-06-27    0.1825636    0.1629997
#2012-06-28    0.1824120    0.1630481
#2012-06-29    0.1898351    0.1689990

#Clean-up
unlink(tmpfile)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    相关资源
    最近更新 更多