#r #ttr
#r #ttr
Вопрос:
Я пытаюсь найти совокупный возврат следующих 4 векторов, используя функцию cummulative_return (приведенную ниже), но результат не соответствует ожиданиям.
library(TTR) # ROC function
a = c(-1000,-2000,-3000,-4000,-5000,-6000,-7000,-8000)
b = c(1,2,3,4,5,6,7,8)
c = c(-7, -1, -20, -50, -93, 112, 212)
d = c(7, 1, 20, 50, 93, -112, -212)
cummulative_return <- function(x){
y <- ROC(x, type = c("discrete"), na.pad = T) * sign(lag(x))
cumprod(na.omit(y) 1) - 1
}
cummulative_return(a)
[1] -1 -1 -1 -1 -1 -1 -1
cummulative_return(b)
[1] 1 2 3 4 5 6 7
cummulative_return(c)
[1] 0.8571429 -34.4285714 15.7142857 1.3400000 6.4980645 13.1927650
cummulative_return(d)
[1] -0.8571429 1.8571429 6.1428571 12.2857143 -17.0000000 -2.7142857
Неверен только ответ для вектора ‘a’, и ожидаемый результат должен быть
cummulative_return(a)
[1] -1 -2 -3 -4 -5 -6 -7
Можете ли вы указать на ошибку в функции cummulative_return?
Кроме того, есть ли аналогичная функция в какой-либо библиотеке, которая может найти кумулятивный возврат отрицательных и положительных чисел без таких ошибок?
Ответ №1:
если я правильно определил кумулятивный доход, это разница между значением в позиции x и начальным значением, деленная на начальное значение для нормализации. Это может быть достигнуто с помощью следующей функции:
cummulative_return <- function(x) {
(x[2:length(x)]-x[1])/abs(x[1])
}
> cummulative_return(a)
[1] -1 -2 -3 -4 -5 -6 -7
> cummulative_return(b)
[1] 1 2 3 4 5 6 7
> cummulative_return(c)
[1] 0.8571429 -1.8571429 -6.1428571 -12.2857143 17.0000000 31.2857143
> cummulative_return(d)
[1] -0.8571429 1.8571429 6.1428571 12.2857143 -17.0000000 -31.2857143