Descripción del ejercicio

Este ejercicio analiza el efecto de convexidad en una opción europea tipo Call sobre una acción del S&P 500 (Apple - AAPL), considerando vencimientos mensuales hasta un horizonte de un año.

Se implementa el modelo de Black-Scholes-Merton y se construyen visualizaciones dinámicas con Plotly.


Supuestos del Modelo



Parámetros Iniciales

S0 <- 190
K  <- 190

# Tiempo (en años)
T_vec <- seq(1, 0, length.out = 13)

# Tasa libre de riesgo interpolada
r_vec <- approx(x=c(0,0.5,1),
                y=c(0.043,0.046,0.048),
                xout=T_vec)$y

# Volatilidad
sigma_vec <- seq(0.23, 0.25, length.out = 13)

Simulación del Precio del Activo

set.seed(123)

n_sim <- 10000
Z <- rnorm(n_sim)

T <- 1
r <- 0.048
sigma <- 0.25

ST <- S0 * exp((r - 0.5*sigma^2)*T + sigma*sqrt(T)*Z)

S_min <- quantile(ST, 0.025)
S_max <- quantile(ST, 0.975)

S_grid <- seq(S_min, S_max, by = 2)

Función Black-Scholes

BS_call <- function(S,K,r,sigma,T){
  d1 <- (log(S/K)+(r+0.5*sigma^2)*T)/(sigma*sqrt(T))
  d2 <- d1 - sigma*sqrt(T)
  S*pnorm(d1) - K*exp(-r*T)*pnorm(d2)
}

Tabla de Convexidad

price_matrix <- sapply(1:length(T_vec), function(i){
  BS_call(S_grid, K, r_vec[i], sigma_vec[i], T_vec[i])
})

Gráfico de Convexidad

fig <- plot_ly()

for(i in 1:length(T_vec)){
  fig <- fig %>%
    add_lines(x = S_grid,
              y = price_matrix[,i],
              name = paste("T =", round(T_vec[i],2)))
}

fig

Interpretación


Cálculo de Griegas

greeks <- function(S,K,r,sigma,T){
  d1 <- (log(S/K)+(r+0.5*sigma^2)*T)/(sigma*sqrt(T))
  d2 <- d1 - sigma*sqrt(T)
  
  delta <- pnorm(d1)
  gamma <- dnorm(d1)/(S*sigma*sqrt(T))
  vega  <- S*dnorm(d1)*sqrt(T)
  theta <- -(S*dnorm(d1)*sigma)/(2*sqrt(T)) - r*K*exp(-r*T)*pnorm(d2)
  rho   <- K*T*exp(-r*T)*pnorm(d2)
  
  data.frame(delta, gamma, vega, theta, rho)
}

Griegas para Tres Vencimientos

idx <- c(1, 7, 13)

greeks_list <- lapply(idx, function(i){
  greeks(S_grid, K, r_vec[i], sigma_vec[i], T_vec[i])
})

Gráfico Delta

plot_ly() %>%
  add_lines(x=S_grid, y=greeks_list[[1]]$delta, name="T inicial") %>%
  add_lines(x=S_grid, y=greeks_list[[2]]$delta, name="T medio") %>%
  add_lines(x=S_grid, y=greeks_list[[3]]$delta, name="T final")

Gráfico Gamma

plot_ly() %>%
  add_lines(x=S_grid, y=greeks_list[[1]]$gamma, name="T inicial") %>%
  add_lines(x=S_grid, y=greeks_list[[2]]$gamma, name="T medio") %>%
  add_lines(x=S_grid, y=greeks_list[[3]]$gamma, name="T final")

Gráfico Vega

plot_ly() %>%
  add_lines(x=S_grid, y=greeks_list[[1]]$vega, name="T inicial") %>%
  add_lines(x=S_grid, y=greeks_list[[2]]$vega, name="T medio") %>%
  add_lines(x=S_grid, y=greeks_list[[3]]$vega, name="T final")

Conclusiones


```