在R中每天计算回报

时间:2017-09-10 17:56:53

标签: r

需要每天计算每个公司在给定年份的份额的回报。

Date         AMZN         GOOG      WFM          MSFT
4/1/2016    636.98999   741.840027  33.27       54.799999
5/1/2016    633.789978  742.580017  33.650002   55.049999
6/1/2016    632.650024  743.619995  33.43       54.049999
7/1/2016    607.940002  726.390015  32.5        52.169998
8/1/2016    607.049988  714.469971  31.98       52.330002

从csv文件读取数据并将其存储在数据帧mydf中。要计算每日回报,我们需要执行以下计算 - (价格(5/1) - 价格(4/1))/(价格(4/1))

如何让数据框中的所有条目重复出现?我可以通过使用diff(mydf $ AMZN)

来获得差异

3 个答案:

答案 0 :(得分:2)

使用quantmod::Delt

尝试此操作
library(quantmod)
apply(df[,2:5], 2, Delt)

             AMZN          GOOG          WFM         MSFT
[1,]           NA            NA           NA           NA
[2,] -0.005023646  0.0009975062  0.011421761  0.004562044
[3,] -0.001798631  0.0014004928 -0.006537949 -0.018165305
[4,] -0.039057964 -0.0231704098 -0.027819324 -0.034782628
[5,] -0.001463983 -0.0164099778 -0.016000000  0.003066973

添加日期

cbind(df[,1], apply(df[,2:5], 2, Delt))

       Date         AMZN          GOOG          WFM         MSFT
1: 4/1/2016           NA            NA           NA           NA
2: 5/1/2016 -0.005023646  0.0009975062  0.011421761  0.004562044
3: 6/1/2016 -0.001798631  0.0014004928 -0.006537949 -0.018165305
4: 7/1/2016 -0.039057964 -0.0231704098 -0.027819324 -0.034782628
5: 8/1/2016 -0.001463983 -0.0164099778 -0.016000000  0.003066973

答案 1 :(得分:1)

试试这个:

cbind(mydf[-1,1],apply(mydf[,-1],2,function(x) diff(x)/head(x,-1)))

输出:

       Date         AMZN          GOOG          WFM         MSFT
1: 5/1/2016 -0.005023646  0.0009975062  0.011421761  0.004562044
2: 6/1/2016 -0.001798631  0.0014004928 -0.006537949 -0.018165305
3: 7/1/2016 -0.039057964 -0.0231704098 -0.027819324 -0.034782628
4: 8/1/2016 -0.001463983 -0.0164099778 -0.016000000  0.003066973

答案 2 :(得分:1)

收集和操纵股票价格的好R套餐是quantmod。尝试:

library(quantmod)
symbols <- c("AMZN", "GOOG", "WFM", "MSFT")
getSymbols(symbols, src = 'google')
closing.prices <- merge.xts(AMZN[,4], GOOG[,4], WFM[,4], MSFT[,4])["2016-01-04/2016-01-08"]

请注意,所有内容都将使用xts时间序列完成。时间序列closing.prices可以使用ROC包中的TTR转换为一系列退货:

library(TTR)
price.returns = ROC(closing.prices)