log return 多家公司计算 r

log return calculation by many companies r

我有一个这样的文件。

head(Historical_Stock_Prices_R)
    Date1     MSFT    AAPL   GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04

想使用这个公式 ln(当前 price/previous 价格) 计算 log return,我的预期输出是这样的

 Date1        MSFT   AAPL    GOOGL          
26-01-05    -0.04%  0.28%    6.62%
27-01-05     0.38%  0.54%   -0.61% 

试图通过之前堆栈溢出答案中的代码解决但失败

logs=data.frame( cbind.data.frame(newdates[-1], 

diff(as.matrix(log(Historical_Stock_Prices_R[,-1]))))) 

试试这个:

df = read.table(text="
Date1     MSFT    AAPL   GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04",header=T)

cbind.data.frame(date=df$Date1[-1],apply(df[,2:4],2,function(x) log(x[-1]/x[-length(x)])*100))

#       date        MSFT      AAPL      GOOGL
# 2 26-01-05 -0.03842896 0.2772061  6.6188582
# 3 27-01-05  0.38372143 0.5383395 -0.6148647

如果您能更准确地说明 "fail" 的意思,那将会很有帮助。例如添加您的错误消息。查看更多 here 好问题

无论如何我怀疑如果你用下面的代码替换你的代码它应该工作。

logs=data.frame( cbind.data.frame(Historical_Stock_Prices_R["Date1",-1], diff(as.matrix(log(Historical_Stock_Prices_R[,-1]))))) 

您的代码失败的原因是您的环境中可能没有名为 "newdates" 的对象,因此您必须参考原始数据框。 然后您可以在之后重命名该列。

使用 TTR 包和 ROC

> library(TTR)
> stocks
     Date1     MSFT     AAPL GOOGL
1 25-01-05 21.02985 4.873362 88.56
2 26-01-05 21.02177 4.886890 94.62
3 27-01-05 21.10259 4.913269 94.04


> rocMSFT <- ROC(stocks[,"MSFT"])
> rocMSFT
[1]            NA -0.0003842896  0.0038372143

还要看看 dailyReturn:从 quantmod 计算每日 returns http://www.quantmod.com/documentation/periodReturn.html