我基本上想要计算xts时间序列的累积回报(和指数值),我为每个时期都有一个回报。但是,由于我正在查看定义的时间段来比较这些时间序列,我想要从该时间段开始到结束的累积回报和指数值以及每行中的当前累积回报。
让我们说我的数据是这样的(基本索引值是100):
Return Index Cumulative Return
Date0 0 100 0
Date1 0.05 105 0.05
Date2 0.10 115.5 0.155
Date3 -0.1 103.95 0.0395
我如何在R中实现这一目标?
答案 0 :(得分:3)
# First create an xts object similar to the one you describe
x <- .xts(c(100,105,115.5,103.95), 1:4, dimnames=list(NULL, "Index"), tzone="UTC")
x$Return <- c(0, ROC(x$Index, type="discrete", na.pad=FALSE))
任何时候的累积算术回报只是1加上回报(减去1)的乘积。 cumprod
会为您计算累计产品。
x$CumulativeReturn <- cumprod(1 + x$Return) - 1
# Index Return CumulativeReturn
#1970-01-01 00:00:01 100.00 0.00 0.0000
#1970-01-01 00:00:02 105.00 0.05 0.0500
#1970-01-01 00:00:03 115.50 0.10 0.1550
#1970-01-01 00:00:04 103.95 -0.10 0.0395
如果您正在使用日志返回,则可以执行cumsum(x$Return)