У меня есть xts ежедневных возвратов , и я хотел бы преобразовать их в ежемесячные возвраты.
Я могу найти тонны нитей для ежедневного преобразования цены в периоды, но мне нужно конвертировать ежедневно возвраты .
Следуя совету в этой ветке, которая работает хорошо, я заметил, что возвраты не являются геометрией c, они арифметические c.
Поэтому мне нужно что-то вроде cumprod (x + 1) ^ (365/12) -1.
Однако, замена суммы ( 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.
EDIT - для тех, кто интересуется происхождением матрицы возвратов, я использую функцию Return.annualized
из пакета Performance Analytics, как показано здесь . (На самом деле, я изменил его, используя Return.cumulative
, что намного быстрее). Так что да, хотя у меня есть матрица цен и я могу легко рассчитать месячные доходы от нее, у меня есть дополнительные столбцы в моей матрице ежедневных доходов из других расчетов, поэтому мне нужно преобразовать дневные доходы, а не дневные цены.