library(quantmod)
library(PerformanceAnalytics)
getSymbols("YHOO",src="google")
stock_dat=data.table(PerformanceAnalytics::
CalculateReturns(Cl(YHOO)[1:10],'discrete'))
stock_dat[,Price:=0]
stock_dat[1,2]=Cl(YHOO)[1]
stock_dat[,D:=(1+YHOO.Close)*shift(Price,1)]
上面的代码生成以下结果:
stock_dat
YHOO.Close Price D
1: NA 25.61 NA
2: 0.048418586 0.00 26.85
3: 0.033147114 0.00 0.00
4: 0.006488825 0.00 0.00
5: -0.012177650 0.00 0.00
6: 0.040609137 0.00 0.00
7: 0.017421603 0.00 0.00
8: 0.008561644 0.00 0.00
9: -0.005432937 0.00 0.00
10: -0.008193923 0.00 0.00
YHOO.Close 被假定为模拟收益,我需要从中取消价格。我使用第一个价格作为基础。理想情况下,上述代码需要使用第 3 行 D 中的价格。
nrowsDF <- nrow(stock_dat)
for(i in 2:nrowsDF){
stock_dat[i,2]=(1+stock_dat[i,1,with=FALSE])*stock_dat[i-1,2,with=FALSE]
}
上面的代码解决了这个问题。但我正在寻找一种更有效的方法来做到这一点,因为我必须对超过 5000 个模拟返回系列重复此操作
下面是我真正需要的答案
stock_dat
YHOO.Close Price
1: NA 25.61
2: 0.048418586 26.85
3: 0.033147114 27.74
4: 0.006488825 27.92
5: -0.012177650 27.58
6: 0.040609137 28.70
7: 0.017421603 29.20
8: 0.008561644 29.45
9: -0.005432937 29.29
10: -0.008193923 29.05