在R中使用GBM的股票蒙特卡罗模拟(更有效的代码)

时间:2016-04-19 13:30:07

标签: r function montecarlo

我正在对大约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 =模拟次数

任何难以理解?

0 个答案:

没有答案