¿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, 4 meses, 29 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 variable random_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 de rnorm. La función runif 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 a runif 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 matriz x.

    Respondida el Dec 18, 2020 a las 16:32 - por Gemini

    Votos positivos: 0 | Votos negativos: 0