我需要模擬股票價格,它跟隨隨機波動過程(Heston Model)。 我已經問過,如何加速我的循環,但對於這種情況,由於V [i-1]的依賴性,我無法使用一些提示。Heston Simulation Monte Carlo:Slow R code
基本上的代碼是: V是股票的波動性,S是股票價格。和:a,b,c ...常量。
下面是代碼:
V[1] <- 0.04
S[1] <- 40
U <- matrix(NA, nrow=100000, ncol=200, byrow=TRUE)
### Function ###
Inv.Phi <- function(y){
if (y <= p) {0} else {log(1-p)}
}
### Simulation ####
for(j in 1:100000){
for(i in 2:200){
m <- V[i-1] * c
n <- V[i-1] * d
phi <- n/m
if(phi <= 1.5){
Z <- rnorm(1)
V[i] <- rnorm(1) * e
K <- V[i-1] * f
}else{
p <- (phi-1)/(phi+1)
u <- runif(1)
V[i] <- Inv.Phi(u)
K <- V[i-1] * g
}
S[i] <- S[i-1] * exp(K * V[i-1]) * exp(V[i] * rnorm(1))
}
U[j,] = S
}
任何建議,以加快這一進程!我知道,我對R使用了很多不好的東西,但我無法找出更好的解決方案。
這與你的其他問題有什麼不同? http://stackoverflow.com/questions/15534270/stock-price-simulation-r-code-slow-monte-carlo – 2013-03-22 21:03:26
是否有人得到懷疑我們被要求做這個人的商學院作業? – 2013-03-22 22:20:12
如果它是[Heston模型](http://en.wikipedia.org/wiki/Heston_model) (它看起來不同:在你的模型中有一個閾值), 你可以嘗試'sde :: sde.sim '以模擬波動率,並且向量化你的代碼,就像在你之前的問題中那樣,來計算價格。 如果這還不夠,您可以嘗試重寫C/C++, 中的循環,例如使用[Rcpp](https://github.com/hadley/devtools/wiki/Rcpp)重寫循環。 – 2013-03-22 22:34:00