gpt4 book ai didi

r - 股票价格模拟 R 代码 - 慢速 - 蒙特卡洛

转载 作者:行者123 更新时间:2023-12-02 02:04:52 26 4
gpt4 key购买 nike

我需要使用 R 代码执行股票价格模拟。问题是代码有点慢。基本上我需要模拟每个时间步长(每天)的股票价格并将其存储在矩阵中。

假设股票过程是几何布朗运动的例子

for(j in 1:100000){
for(i in 1:252){
S[i] <- S[i-1]*exp((r-v^2/2)*dt+v*sqrt(dt)*rnorm(1))
}
U[j,] <- S
}

有什么改进和加速代码的建议吗?

最佳答案

假设S[0] = 1 ,您可以按如下方式构建 U:

Ncols <- 252

Nrows <- 100000

U <- matrix(exp((r-v^2/2)*dt+v*sqrt(dt)*rnorm(Ncols*Nrows)), ncol=Ncols, nrow=Nrows)

U <- do.call(rbind, lapply(1:Nrows, function(j)cumprod(U[j,])))

编辑:使用 Joshua 和 Ben 的建议:

产品版本:

U <- matrix(exp((r-v^2/2)*dt+v*sqrt(dt)*rnorm(Ncols*Nrows)), ncol=Ncols, nrow=Nrows)

U <- t(apply(U, 1, cumprod))

总结版本:

V <- matrix((r-v^2/2)*dt+v*sqrt(dt)*rnorm(Ncols*Nrows), ncol=Ncols, nrow=Nrows)

V <- exp( t(apply(V, 1, cumsum)) )

编辑:按照@Paul 的建议:

每个提案的执行时间(使用 10000 行而不是 10^5):

使用 apply + cumprod

 user  system elapsed 
0.61 0.01 0.62

使用 apply + cumsum

 user  system elapsed 
0.61 0.02 0.63

使用OP的原始代码

 user  system elapsed 
67.38 0.00 67.52

注:以上时间为system.time的第三次测量.每个代码的前两个度量被丢弃。我用过 r <- sqrt(2) , v <- sqrt(3)dt <- pi .在他的原始代码中,我还替换了 S[i-1]对于 ifelse(i==1,1,S[i-1]) , 并预分配 U .

关于r - 股票价格模拟 R 代码 - 慢速 - 蒙特卡洛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15534270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com