根据每日收益计算连续累积收益

时间:2019-11-12 20:57:58

标签: r

类似于此问题:R: Cumulative return, what is the correct way?

但是有一种方法可以计算出总运行量吗? 也就是说,c(0.5, 0.3, -0.2)的输入将返回

c(0.5, 0.95, 0.56)

我想我可以通过for循环/重叠应用来计算运行总计,但是还有一种更优雅的方法吗?

edit:修复输出中的错字。返回的计算方式如下:

first element = first element 
second element = -1 + ((1 + 0.5) * (1 + 0.3)) = 0.95
third element = -1 + ((1 + 0.95) * (1 + -0.2)) = 0.56

2 个答案:

答案 0 :(得分:2)

这里是accumulate

的一个选项
library(purrr)
accumulate(v1, ~ ((1 + .x) * (1 + .y)) - 1)
#[1] 0.50 0.95 0.56

或在base R中与Reduce

Reduce(function(x, y) ((1 + x) * (1 + y)) - 1, v1, accumulate = TRUE)
#[1] 0.50 0.95 0.56

数据

v1 <- c(0.5, 0.3, -0.2)

答案 1 :(得分:1)

另一种选择是使用cumprod链接几何返回:

x <- c(0.5, 0.3, -0.2)
cumprod(1+x)-1
#[1] 0.50 0.95 0.56