install.packages("quantmod")
install.packages("ggplot2")

library(quantmod)
library(ggplot2)

##ANÁLISIS DE CONVEXIDAD DE UNA OPCIÓN CALL

##INTRODUCCIÓN En este trabajo se analiza una opción tipo call utilizando el modelo de Black-Scholes. El objetivo es estudiar la convexidad del precio de la opción respecto al activo subyacente. También se analizan las griegas financieras (Delta, Gamma, Theta, Vega y Rho), que permiten medir la sensibilidad del precio de la opción frente a diferentes variables del mercado.

##DATOS DEL ACTIVO
getSymbols("AAPL", src = "yahoo", from = "2025-01-01")
## [1] "AAPL"
S0 <- as.numeric(last(Cl(AAPL)))  
K <- round(S0)                    
r <- 0.05                         
sigma <- 0.25                     
T <- 1                            

S_seq <- seq(S0*0.8, S0*1.2, by = 2)

S0
## [1] 270.23
##MODELO DE 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)
}
##CONVEXIDAD DE LA OPCIÓN
precios <- sapply(S_seq, function(x) BS_call(x,K,r,sigma,T))

df <- data.frame(S = S_seq, Precio = precios)

ggplot(df, aes(x=S, y=Precio)) +
  geom_line(color="blue") +
  ggtitle("Convexidad de la opción Call") +
  xlab("Precio del activo subyacente") +
  ylab("Precio de la opción")

##ANÁLISIS DE LA CONVEXIDAD La gráfica muestra que el precio de la opción no presenta un comportamiento lineal frente al precio del activo subyacente. Se observa una curva convexa, lo que significa que el valor de la opción aumenta cada vez más rápido cuando el activo sube. Esto ocurre porque las opciones tienen una estructura de riesgo no lineal, lo que genera sensibilidad creciente ante cambios en el activo.

##CÁLCULO DE GRIEGAS
delta_fun <- function(S,K,r,sigma,T){
  d1 <- (log(S/K)+(r+0.5*sigma^2)*T)/(sigma*sqrt(T))
  pnorm(d1)
}

gamma_fun <- function(S,K,r,sigma,T){
  d1 <- (log(S/K)+(r+0.5*sigma^2)*T)/(sigma*sqrt(T))
  dnorm(d1)/(S*sigma*sqrt(T))
}

theta_fun <- 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*dnorm(d1)*sigma/(2*sqrt(T))) - r*K*exp(-r*T)*pnorm(d2)
}

vega_fun <- function(S,K,r,sigma,T){
  d1 <- (log(S/K)+(r+0.5*sigma^2)*T)/(sigma*sqrt(T))
  S*dnorm(d1)*sqrt(T)
}

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

delta <- sapply(S_seq, function(x) delta_fun(x,K,r,sigma,T))
gamma <- sapply(S_seq, function(x) gamma_fun(x,K,r,sigma,T))
theta <- sapply(S_seq, function(x) theta_fun(x,K,r,sigma,T))
vega  <- sapply(S_seq, function(x) vega_fun(x,K,r,sigma,T))
rho   <- sapply(S_seq, function(x) rho_fun(x,K,r,sigma,T))

df_greeks <- data.frame(S_seq, delta, gamma, theta, vega, rho)
##DELTA
ggplot(df_greeks, aes(x=S_seq, y=delta)) +
  geom_line(color="darkgreen") +
  ggtitle("Delta de la opción") +
  xlab("Precio del activo") +
  ylab("Delta")

##ANÁLISIS DELTA El Delta mide la sensibilidad del precio de la opción frente al cambio en el activo subyacente. Cuando el precio del activo aumenta, el Delta se aproxima a 1, lo que indica que la opción se comporta de forma similar al activo.

##GAMMA
ggplot(df_greeks, aes(x=S_seq, y=gamma)) +
  geom_line(color="red") +
  ggtitle("Gamma de la opción") +
  xlab("Precio del activo") +
  ylab("Gamma")

##ANÁLISIS GAMMA El Gamma mide la variación del Delta. Es máximo cuando el activo está cerca del precio de ejercicio, lo que indica mayor sensibilidad en ese punto.

##THETA
ggplot(df_greeks, aes(x=S_seq, y=theta)) +
  geom_line(color="purple") +
  ggtitle("Theta de la opción") +
  xlab("Precio del activo") +
  ylab("Theta")

##ANÁLISIS THETA El Theta es negativo porque la opción pierde valor con el paso del tiempo. Esto representa el efecto del deterioro temporal del valor de la opción.

##VEGA
ggplot(df_greeks, aes(x=S_seq, y=vega)) +
  geom_line(color="orange") +
  ggtitle("Vega de la opción") +
  xlab("Precio del activo") +
  ylab("Vega")

##ANÁLISIS VEGA El Vega mide la sensibilidad frente a la volatilidad. Es mayor cuando la opción está cerca del precio de ejercicio.

##RHO
ggplot(df_greeks, aes(x=S_seq, y=rho)) +
  geom_line(color="brown") +
  ggtitle("Rho de la opción") +
  xlab("Precio del activo") +
  ylab("Rho")

##ANÁLISIS RHO El Rho mide la sensibilidad frente a la tasa de interés. Su impacto es menor en comparación con otras griegas.

##CONCLUSIÓN El análisis muestra que la opción call presenta convexidad respecto al activo subyacente, lo que indica un comportamiento no lineal del precio. Las griegas permiten entender cómo diferentes variables financieras afectan el valor de la opción.