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
所以我的问题是 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