У меня есть xts ежедневных возвратов, и я хотел бы преобразовать их в ежемесячные.
Я могу найти тонны потоков для преобразования ежедневных цен в доходность за период, но мне нужно конвертировать ежедневные доходности.
Следуя советам в этом поток, который работает хорошо, я заметил, что результаты не геометрические, а арифметические.
Поэтому мне нужно что-то вроде cumprod (x + 1) ^ (365/12) -1.
Однако замена sum (cx) на это не работает.
Вот мой код в его нынешнем виде:
# Generate data like the type I'm working with
testdata <- cbind(rnorm(100,0.0001,0.01),rnorm(100,0.0001,0.01))
testdata <- as.xts(testdata, order.by = seq(Sys.Date()-99,Sys.Date(),1))
myFun <- function(x) {
# need coredata, so c.xts will not be dispatched
cx <- coredata(x)
Return = sum(cx)
}
MonthlyReturns <- NULL
for (i in 1:ncol(testdata)){
MonthlyReturns <- cbind(MonthlyReturns,period.apply(testdata[,i], endpoints(testdata[,i], "months"),
myFun))
}
Любая помощь приветствуется!
РЕДАКТИРОВАТЬ - выходные данные должны быть в том же формате, что и входные - таблица ежемесячных доходов вместо ежедневных. Либо xts, либо dataframe / matrix.
РЕДАКТИРОВАТЬ. Для тех, кто интересуется происхождением матрицы возвратов, я использую функцию Return.annualized
из пакета Performance Analytics, как показано здесь. (На самом деле я изменил его, используя Return.cumulative
, что намного быстрее). Итак, да, хотя у меня есть матрица цен и я могу легко рассчитать из нее ежемесячную доходность, у меня есть дополнительные столбцы в моей матрице ежедневной доходности из других расчетов, поэтому мне нужно преобразовать дневную доходность, а не дневные цены.
returns
, это уже рассчитано по отношению кbasis
? Думаю, здесь будет полезен dput (). - person Chris   schedule 09.04.2020