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
我有一个这样的文件。
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