Prices Xts中多列的累积收益
我有以下数据,并试图计算复合回报率Prices Xts中多列的累积收益,r,xts,R,Xts,我有以下数据,并试图计算复合回报率 sample_data <- data.frame(Date = c ("2017-01-31","2017-02-28", "2017-03-31", "2017-04-30"), stock1 = c(9,12,13,14), stock2 = c(5,6,8,9), stock3 = c(4,4.5,5,4), stock4 = c(6,7.8,8,8.5), stock5 = c(5,5.5,6.2,7)) 您的s
sample_data <- data.frame(Date = c ("2017-01-31","2017-02-28", "2017-03-31", "2017-04-30"),
stock1 = c(9,12,13,14), stock2 = c(5,6,8,9), stock3 = c(4,4.5,5,4), stock4 = c(6,7.8,8,8.5), stock5 = c(5,5.5,6.2,7))
您的
sample_数据
不是xts
对象。它是一个数据帧
。您可以采取以下措施来克服:
sample_data <- data.frame(Date = c ("2017-01-31","2017-02-28",
"2017-03-31", "2017-04-30"),
stock1 = c(9,12,13,14), stock2 = c(5,6,8,9),
stock3 = c(4,4.5,5,4), stock4 = c(6,7.8,8,8.5),
stock5 = c(5,5.5,6.2,7))
class(sample_data) ## check the structure of your data
x = xts(sample_data[, -1], order.by=as.Date(sample_data$Date))
Return.calculate(x, method = c("compound"))
非常感谢你,现在如果我想在同一张图上绘制ggplot(几何线)这些股票(即每只股票画一条线),这可能吗?而且这似乎做得不对,例如,在2017年1月31日至2017年2月28日期间,股票1的价格从9上涨至12,应为33%,随后的结果应在此基础上复合?是的,您当然可以使用
ggplot
绘制它们。我认为如果你问一个新问题会更好。这是做正确的思考——当你计算复合回报时,你要取价格之间的对数差。在您的示例中,它将是log(12/9)
,返回0.287682078
。如果计算简单返回值,结果将是(12-9)/9
,即0.33333
。这清楚吗?如果我的回答有帮助,请随意接受/投票
sample_data <- data.frame(Date = c ("2017-01-31","2017-02-28",
"2017-03-31", "2017-04-30"),
stock1 = c(9,12,13,14), stock2 = c(5,6,8,9),
stock3 = c(4,4.5,5,4), stock4 = c(6,7.8,8,8.5),
stock5 = c(5,5.5,6.2,7))
class(sample_data) ## check the structure of your data
x = xts(sample_data[, -1], order.by=as.Date(sample_data$Date))
Return.calculate(x, method = c("compound"))
> Return.calculate(x, method = c("compound"))
stock1 stock2 stock3 stock4 stock5
2017-01-31 NA NA NA NA NA
2017-02-28 0.28768207 0.1823216 0.1177830 0.26236426 0.09531018
2017-03-31 0.08004271 0.2876821 0.1053605 0.02531781 0.11980120
2017-04-30 0.07410797 0.1177830 -0.2231436 0.06062462 0.12136086