我需要模拟股票价格,遵循随机波动过程(赫斯顿模型)。我已经问过,如何加快我的循环,但在这种情况下,由于 V[i-1] 依赖性,我无法使用一些技巧。
基本上代码是: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 使用了很多不好的东西,但我想不出更好的解决方案。