我正在对大约500只股票进行MC模拟,以产生252天的股价。我正在使用sde包中的GBM函数。
为此,我有500个股票的数据框架,它给出了平均交易量,平均收益率,每日波动率和价格,如下所示:
Teste=data.frame(matrix(runif(25), nrow=5, ncol=4))
colnames(Teste) <- c("AVG_VOLUME","AVG_RETURN","VOL","PRICE")
AVG_VOLUME AVG_RETURN VOL PRICE
Stock 1 0.7028197 0.09264265 0.002169411 100
Stock 2 0.7154557 0.03314615 0.004839466 100
Stock 3 0.4038030 0.04347487 0.003441471 100
Stock 4 0.5392530 0.06414982 0.004482528 100
Stock 5 0.8720084 0.09615865 0.008081017 100
我还有一个函数,它将上面的data.frame和所需的模拟数量作为参数:
Monte_Carlo_Stocks <- function(Dados_Acoes,Numero_Simulacoes){
start.time <- Sys.time()
MC <- matrix(0,nrow = 253,ncol=nrow(Dados_Acoes))
for (n in 1:Numero_Simulacoes){
MC1 <- MC
MC <- apply(Dados_Acoes,1,function(x) {
GBM(x["PRICE"],0,x["VOL"]*100,1,252)
})
MC <- MC/Numero_Simulacoes
MC <- MC+MC1
}
end.time <- Sys.time()
time.taken <- end.time - start.time
print(time.taken)
return(MC)
}
该函数获取矩阵每一行的数据并将其作为参数值传递给GBM函数,然后我对结果进行平均,以便在252天内返回500个股票的平均股票价格模拟矩阵。
我正在使用0漂移,但我也可以通过avarage返回作为GBM的第二个参数
这给了我预期的结果,但我想知道是否有更有效的方法来做到这一点。
参数是葡萄牙语:
Dados_Acoes =股票数据
Numero_Simulacoes =模拟次数
任何难以理解?