【问题标题】:Autofill rows in R, daily volatility calculationR中的自动填充行,每日波动率计算
【发布时间】:2019-11-15 04:52:05
【问题描述】:

我的数据集如下所示:

set.seed(1234)
mydata <- data.frame("Returns" = sample(1:20,200, replace=T), "Vol" = 0)

我计算了新列中前 21 行的年化每日波动率:

d_vol <- sd(mydata$Returns[1:21]) 
y_vol <- d_vol*sqrt(252)

上述计算将第 21 列 vol 中的值替换为 83.38345

我想学习的是:

如何使用 (y_vol) 中使用的公式滚动或自动填充剩余的 (22:200) 行。

谢谢,

【问题讨论】:

  • 你可以使用zoo::rollapply(mydata$Returns, 21, sd, fill=NA, align="right") * sqrt(252)data.table::frollapply(mydata$Returns, 21, sd) * sqrt(252)

标签: r volatility computational-finance


【解决方案1】:

只使用base r:

mydata$Vol[21:200] <- mapply(function(x, y) sd(mydata$Returns[x:y])*sqrt(252), 1:180, 21:200)

另外,仅供参考,

mydata <- data.frame(Returns = sample(1:20,200, replace=T), Vol = NA)

工作得很好。不需要在列名周围加上引号。此外,您应该使用 NA 而不是 0 作为Vol 的初始值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多