Return Return.cumulative 与 apply.yearly returns 的数据不同?

Return data from Return.cumulative vs apply.yearly returns differs?

所以我的问题是 Return.cumulative 函数的输出数据不同于 apply.yearly 得到相同的 return 数字。

这是要重现的代码

require(quantmod)
require(PerformanceAnalytics)

from <- as.Date("2016-01-01")
to <- as.Date("2017-01-01")

getSymbols("GOOGL", from = from, to = to)

dat <- GOOGL[,6]
returns <- na.omit(ROC(dat,n = 1,"discrete"))

# Cumulative return
cumReturn <- Return.cumulative(returns)

# Apply return
sumReturn <- apply.yearly(returns,sum)

# Print
print(cumReturn)
print(sumReturn)

我在尝试使用 apply.monthly 函数获取每月数据时也遇到了同样的差异。

离散 returns 应该按几何方式跨时间聚合(乘法)。对离散 returns 求和会得出不准确的结果。 Return.cumulative 默认使用几何聚合。

R> Return.cumulative(returns)
                  GOOGL.Adjusted
Cumulative Return     0.04346625
R> apply.yearly(returns+1, prod)-1
           GOOGL.Adjusted
2016-12-30     0.04346625

有关这两种 return 类型之间的差异和关系的讨论,请参阅 A Tale of Two Returns

如果 returns 包含连续复合 (log) returns,那么您的 apply.yearly 调用将是正确的,您应该在 [=12] 中设置 geometric = FALSE =]打电话。

R> Return.cumulative(returns, geometric = FALSE)
                  GOOGL.Adjusted
Cumulative Return     0.06251856
R> apply.yearly(returns, sum)
           GOOGL.Adjusted
2016-12-30     0.06251856