使用 1 年 window 在每个月底计算 return 的波动率
calculating volatility of return at end of each month using 1 year window
我正在处理股票 return 的时间序列。数据包括从 1985 年到 2010 年的数千只股票和每只股票的每日 returns。由于交易暂停,缺少 returns。对于每只股票,我试图使用前一年 returns 计算每个月末(数据集中每个月的最后一个交易日)的移动波动率。我有一些数据:
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没有交易,所以当天没有return数据。我查找了一些有用的软件包,例如 TTR、zoo、xts。但是所有函数都需要输入每年的期数,每个股票都不一样。我模糊的想法是先在xts中使用split按公司名称拆分数据,然后应用endpoints函数找到每个月的最后一天。我被困在那里。由于我有一个大数据集,我更喜欢一些快速的方法。谢谢!
假设末尾注释中显示的数据可重现,并且还假设每个日期至少出现在一只股票中(但不需要出现在任何特定股票中)。 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)
我正在处理股票 return 的时间序列。数据包括从 1985 年到 2010 年的数千只股票和每只股票的每日 returns。由于交易暂停,缺少 returns。对于每只股票,我试图使用前一年 returns 计算每个月末(数据集中每个月的最后一个交易日)的移动波动率。我有一些数据:
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没有交易,所以当天没有return数据。我查找了一些有用的软件包,例如 TTR、zoo、xts。但是所有函数都需要输入每年的期数,每个股票都不一样。我模糊的想法是先在xts中使用split按公司名称拆分数据,然后应用endpoints函数找到每个月的最后一天。我被困在那里。由于我有一个大数据集,我更喜欢一些快速的方法。谢谢!
假设末尾注释中显示的数据可重现,并且还假设每个日期至少出现在一只股票中(但不需要出现在任何特定股票中)。 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)