расчет волатильности доходности в конце каждого месяца с использованием окна за 1 год - PullRequest
0 голосов
/ 16 января 2019

Я имею дело с временными рядами доходности акций. Данные включают тысячи акций и ежедневную доходность каждой акции с 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. Тем не менее, все функции должны вводить номер периода в году, который отличается для каждого запаса. Моя смутная идея состоит в том, чтобы сначала использовать split в xts для разделения данных по названиям компаний, а затем применить функцию конечных точек, чтобы найти последний день каждого месяца. Я застрял там. Поскольку у меня большой набор данных, я предпочитаю некоторые методы быстро. Спасибо!

1 Ответ

0 голосов
/ 16 января 2019

Примите данные, воспроизводимые в примечании в конце, а также предположите, что каждая дата присутствует хотя бы в одной акции (но не обязательно должна присутствовать в какой-либо конкретной акции). 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)
...