使用1年窗口计算每个月末的收益波动率

时间:2019-01-15 23:12:29

标签: r rstudio xts zoo quantmod

我正在处理股票回报的时间序列。数据包括数千只股票以及1985-2010年期间每只股票的日收益。由于暂停交易而缺少回报。对于每只股票,我试图使用上一年的收益来计算每个月末(数据集中每个月的最后一个交易日)的收益变动幅度。我有一些数据:

         date name   return
   1985-01-01    A   -0.044
   1985-01-01    C    0.038
   1985-01-02    A    0.041
   1985-01-02    B   -0.005
   1985-01-02    C   -0.052
   1985-01-03    B    0.018
   1985-01-03    C   -0.034

请注意,公司B在1985-01-01没有进行交易,因此当天没有退货数据。我查找了一些有用的软件包,例如TTR,zoo,xts。但是,所有功能都需要输入每年的期间数,每个库存中的数字都不同。我的模糊想法是,首先使用xts中的split来按公司名称拆分数据,然后应用终结点函数来查找每月的最后一天。我被困在那里。由于我的数据集很大,因此我希望快速使用某些方法。谢谢!

1 个答案:

答案 0 :(得分:1)

假定末尾的注释中可重复显示的数据,并假定每个日期至少出现在一只股票中(但不必出现在任何特定的股票中)。 252通常使用一年,对于大多数用途来说可能足够接近。但是,考虑到问题中数据的长度,我们在此示例中使用2:

library(zoo)

z <- read.zoo(DF, split = "name")
r <- rollapplyr(z, 2, sd, na.rm = TRUE)
aggregate(r, as.yearmon, tail, 1)
##           A          B          C
## Jan 1985 NA 0.01626346 0.01272792

注意

Lines <- "
         date name   return
   1985-01-01    A   -0.044
   1985-01-01    C    0.038
   1985-01-02    A    0.041
   1985-01-02    B   -0.005
   1985-01-02    C   -0.052
   1985-01-03    B    0.018
   1985-01-03    C   -0.034"

library(zoo)
DF <- read.table(text = Lines, header = TRUE)