¿Cómo modifiqué mi código de tal manera que el precio de stock diferente se utiliza con diferente número aleatorio
Tengo un código que parece que esto, lo que estoy tratando de hacer es simular la ruta del stock, sin embargo, obviamente estaba usando el mismo número al azar para el mismo vector de fila (una ruta particular del stock) ¿Cómo puedo modificar esto de tal manera que podría utilizar un número aleatorio diferente para un precio de stock. Gracias por cualquier comentario.
options_monte_DO <- function(r, q, sigma, T, n, m, k, s_0, B) {
x <- matrix(NA, nrow=n, ncol=m)
y <- matrix(NA, nrow=n, ncol=m)
dt <- T/m
for (i in 1:n) {
x[i, ] <- s_0*exp(cumsum((r - q - 0.5*sigma^2)*dt +
sigma*sqrt(dt)*rnorm(n, 0, 1)))
}
y <- x
y[rowSums(x < B) > 0, ] <- NA
option_payoff <- exp(-r*T)*pmax(k - y[, m], 0)
z <- mean(option_payoff, na.rm=T)
hist(option_payoff)
return(z)
}
Pregunta hecha hace 3 años, 5 meses, 6 días - Por markupmaestro
2 Respuestas:
-
Para modificar tu código de manera que puedas usar un número aleatorio diferente para cada precio de stock en una ruta particular, puedes generar números aleatorios únicos para cada fila de la matriz
x
. Puedes hacerlo de la siguiente manera:r options_monte_DO <- function(r, q, sigma, T, n, m, k, s_0, B) { x <- matrix(NA, nrow=n, ncol=m) y <- matrix(NA, nrow=n, ncol=m) dt <- T/m for (i in 1:n) { random_nums <- rnorm(m, 0, 1)
Genera números aleatorios únicos para cada fila
x[i, ] <- s_0exp(cumsum((r - q - 0.5sigma^2)dt + sigmasqrt(dt)random_nums)) } y <- x y[rowSums(x < B) > 0, ] <- NA option_payoff <- exp(-rT)*pmax(k - y[, m], 0) z <- mean(option_payoff, na.rm=T) hist(option_payoff) return(z) }Con esta modificación, cada fila de la matriz
x
utilizará un conjunto único de números aleatorios generados en la variablerandom_nums
, lo que garantiza que cada precio de stock en una ruta particular se calcule con un número aleatorio diferente.Respondida el Dec 18, 2020 a las 16:27 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para utilizar un número aleatorio diferente para cada fila (ruta de stock) en tu código, puedes utilizar la función
runif
en lugar dernorm
. La funciónrunif
genera números aleatorios uniformes en el intervalo [0, 1]. Aquí tienes el código modificado:options_monte_DO <- function(r, q, sigma, T, n, m, k, s_0, B) { x <- matrix(NA, nrow=n, ncol=m) y <- matrix(NA, nrow=n, ncol=m) dt <- T/m for (i in 1:n) { x[i, ] <- s_0exp(cumsum((r - q - 0.5sigma^2)dt + sigmasqrt(dt)runif(n, 0, 1))) } y <- x y[rowSums(x < B) > 0, ] <- NA option_payoff <- exp(-rT)pmax(k - y[, m], 0) z <- mean(option_payoff, na.rm=T) hist(option_payoff) return(z) }
Ten en cuenta que también he cambiado la función
rnorm
arunif
en la línea:x[i, ] <- s_0exp(cumsum((r - q - 0.5sigma^2)dt + sigmasqrt(dt)runif(n, 0, 1)))
Esto generará un número aleatorio uniforme para cada uno de los elementos de la fila
i
de la matrizx
.Respondida el Dec 18, 2020 a las 16:32 - por Gemini
Votos positivos: 0 | Votos negativos: 0