Este trabajo analiza la convexidad de una opción call europea sobre
la accion Apple, utilizando el modelo de Black-Scholes.
La convexidad se mide mediante la Gamma, que representa la segunda
derivada del precio de la opción respecto al precio del activo
subyacente.
getSymbols("AAPL", src="yahoo", from="2024-01-01")
## [1] "AAPL"
S0 <- as.numeric(last(Cl(AAPL))) # Precio actual
K <- round(S0) # Strike cercano
r <- 0.05 # Tasa libre de riesgo
sigma <- 0.25 # Volatilidad inicial
T_total <- 1 # 1 año
d1 <- function(S, K, r, sigma, T){
(log(S/K) + (r + 0.5*sigma^2)*T) / (sigma*sqrt(T))
}
d2 <- function(S, K, r, sigma, T){
d1(S,K,r,sigma,T) - sigma*sqrt(T)
}
call_price <- function(S, K, r, sigma, T){
S*pnorm(d1(S,K,r,sigma,T)) - K*exp(-r*T)*pnorm(d2(S,K,r,sigma,T))
}
gamma_fun <- function(S, K, r, sigma, T){
dnorm(d1(S,K,r,sigma,T)) / (S*sigma*sqrt(T))
}
delta_fun <- function(S, K, r, sigma, T){
pnorm(d1(S,K,r,sigma,T))
}
vega_fun <- function(S, K, r, sigma, T){
S*dnorm(d1(S,K,r,sigma,T))*sqrt(T)
}
theta_fun <- function(S, K, r, sigma, T){
- (S*dnorm(d1(S,K,r,sigma,T))*sigma)/(2*sqrt(T)) - r*K*exp(-r*T)*pnorm(d2(S,K,r,sigma,T))
}
rho_fun <- function(S, K, r, sigma, T){
K*T*exp(-r*T)*pnorm(d2(S,K,r,sigma,T))
}
T_seq <- seq(1, 0.01, length.out=12)
sigma_seq <- seq(sigma-0.02, sigma+0.02, length.out=12)
S_seq <- seq(0.5*S0, 1.5*S0, length.out=100)
results <- data.frame()
for(t in 1:length(T_seq)){
for(s in S_seq){
results <- rbind(results, data.frame(
S = s,
Precio = call_price(s, K, r, sigma, T_seq[t]),
Gamma = gamma_fun(s, K, r, sigma, T_seq[t]),
Tiempo = paste0("Mes ", t)
))
}
}
plot_ly(results, x=~S, y=~Precio, color=~Tiempo,
type="scatter", mode="lines") %>%
layout(title="Convexidad de la Opción Call",
xaxis=list(title="Precio del activo"),
yaxis=list(title="Precio de la opción"))
## Warning in RColorBrewer::brewer.pal(max(N, 3L), "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
## Warning in RColorBrewer::brewer.pal(max(N, 3L), "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
La gráfica muestra que el precio de la opción call no aumenta de manera lineal cuando el precio del activo subyacente sube. En cambio, se observa una forma curva, lo que refleja la convexidad de la opción. Esto significa que, a medida que el activo aumenta de valor, el precio de la opción también crece, pero a un ritmo cada vez mayor.
Además, se nota que conforme se acerca la fecha de vencimiento, la curva se vuelve más marcada alrededor del precio strike. Esto indica que la opción se vuelve más sensible a pequeños cambios en el precio del activo en esa zona, especialmente cuando está cerca del dinero (ATM).
plot_ly(results, x=~S, y=~Gamma, color=~Tiempo,
type="scatter", mode="lines") %>%
layout(title="Gamma",
xaxis=list(title="Precio del activo"),
yaxis=list(title="Gamma"))
## Warning in RColorBrewer::brewer.pal(max(N, 3L), "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
## Warning in RColorBrewer::brewer.pal(max(N, 3L), "Set2"): n too large, allowed maximum for palette Set2 is 8
## Returning the palette you asked for with that many colors
La gamma es más alta cuando el precio del activo está cerca del precio de ejercicio (strike), es decir, cuando la opción está at-the-money. En ese punto se puede ver que la convexidad es mayor y el delta cambia más rápido.
También se observa que cuando se acerca la fecha de vencimiento, la gamma se va concentrando más alrededor del strike. Esto hace que la opción sea más sensible a pequeños cambios en el precio del activo, aumentando un poco el riesgo en esa zona.
meses <- c(1,6,12)
greeks <- data.frame()
for(t in meses){
for(s in S_seq){
greeks <- rbind(greeks, data.frame(
S = s,
Delta = delta_fun(s,K,r,sigma,T_seq[t]),
Gamma = gamma_fun(s,K,r,sigma,T_seq[t]),
Vega = vega_fun(s,K,r,sigma,T_seq[t]),
Theta = theta_fun(s,K,r,sigma,T_seq[t]),
Rho = rho_fun(s,K,r,sigma,T_seq[t]),
Tiempo = paste0("Mes ", t)
))
}
}
plot_ly(greeks, x=~S, y=~Delta, color=~Tiempo,
type="scatter", mode="lines") %>%
layout(title="Delta",
xaxis=list(title="Precio del activo"),
yaxis=list(title="Delta"))
El delta presenta una forma sigmoide, variando entre 0 y 1. Para precios bajos del activo, el delta es cercano a 0, mientras que para precios altos se aproxima a 1. Esto refleja que la probabilidad de ejercer la opción aumenta con el precio del activo. Además, a medida que se acerca el vencimiento, la transición del delta se vuelve más abrupta, especialmente cerca del strike.
La convexidad de la opción se evidencia en la curvatura de la
relación entre el precio del activo subyacente y el precio de la
opción.
La Gamma muestra que esta curvatura es mayor cuando la opción está cerca
del dinero (at-the-money) y cuando el tiempo al vencimiento es
menor.
Esto implica que el riesgo de cambios en el delta aumenta a medida que
la opción se acerca al vencimiento.
Básicamente, lo que muestran las gráficas es que la forma en la que cambia el precio de la opción no es siempre la misma.
Se puede ver que la sensibilidad de la opción (delta) y su “curvatura” (gamma) van cambiando con el tiempo. En general, el riesgo no se mantiene fijo, sino que aumenta cuando se acerca la fecha de vencimiento y cuando el precio del activo está cerca del strike (at-the-money).
En otras palabras, la opción se vuelve más “inestable” o sensible en esos momentos.