Luz Elena Castrillón Castro
Erika Cristin Corrales
Luis Felipe Tuberquia
Este laboratorio tiene como objetivo analizar la cobertura de un portafolio de inversión compuesto por tres acciones con tendencia bajista mediante el uso de derivados financieros, específicamente opciones europeas y americanas. Se construirán árboles binomiales y se evaluará la eficacia de diferentes estrategias de cobertura considerando factores como la tasa libre de riesgo, dividendos, y apalancamiento financiero. Se realizará también un análisis técnico y fundamental del portafolio, evaluando el comportamiento del portafolio trimestralmente para medir la efectividad de la cobertura.
Las acciones seleccionadas son:
Estas acciones fueron seleccionadas por presentar una tendencia bajista o alta incertidumbre en sus fundamentales, justificando la necesidad de usar derivados financieros como cobertura.
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## [1] "F" "VZ" "AFLYY"
## [[1]]
## F.Open F.High F.Low F.Close F.Volume F.Adjusted
## 2023-01-03 11.82 11.92 11.57 11.68 45809000 9.566103
## 2023-01-04 11.88 12.08 11.74 12.01 53429700 9.836379
## 2023-01-05 12.11 12.38 11.88 12.25 50785600 10.032941
## 2023-01-06 12.12 12.59 12.10 12.58 53089100 10.303216
## 2023-01-09 12.74 12.93 12.55 12.69 50865500 10.393310
## 2023-01-10 12.68 12.87 12.50 12.84 47065500 10.516161
##
## [[2]]
## VZ.Open VZ.High VZ.Low VZ.Close VZ.Volume VZ.Adjusted
## 2023-01-03 39.77 40.23 39.38 40.12 31330700 33.88560
## 2023-01-04 40.54 41.42 40.26 41.13 28779500 34.73865
## 2023-01-05 41.20 41.95 40.82 41.70 29987200 35.22007
## 2023-01-06 41.92 42.58 41.88 42.19 26010400 35.63393
## 2023-01-09 41.38 41.67 41.31 41.37 23062200 35.49067
## 2023-01-10 41.36 41.98 41.17 41.95 16695300 35.98824
##
## [[3]]
## AFLYY.Open AFLYY.High AFLYY.Low AFLYY.Close AFLYY.Volume
## 2023-01-03 1.37 1.41 1.37 1.38 9300
## 2023-01-04 1.41 1.45 1.38 1.44 196800
## 2023-01-05 1.44 1.49 1.44 1.48 75800
## 2023-01-06 1.48 1.50 1.48 1.50 14600
## 2023-01-09 1.51 1.57 1.50 1.52 106500
## 2023-01-10 1.53 1.54 1.51 1.54 105500
## AFLYY.Adjusted
## 2023-01-03 1.38
## 2023-01-04 1.44
## 2023-01-05 1.48
## 2023-01-06 1.50
## 2023-01-09 1.52
## 2023-01-10 1.54
Se presentan los primeros registros de los precios históricos de las acciones seleccionadas para observar su comportamiento reciente en el mercado financiero.
Se construye un portafolio de mínima varianza utilizando datos históricos. Se calculan los retornos, varianzas y covarianzas para obtener los pesos óptimos.
library(quadprog)
precios <- do.call(merge, lapply(acciones, function(x) Ad(get(x))))
retornos <- na.omit(ROC(precios))
cov_matrix <- cov(retornos)
Dmat <- 2 * cov_matrix
dvec <- rep(0, ncol(retornos))
Amat <- cbind(rep(1, ncol(retornos)))
bvec <- 1
sol <- solve.QP(Dmat, dvec, Amat, bvec, meq = 1)
pesos <- sol$solution
names(pesos) <- colnames(retornos)
pesos## F.Adjusted VZ.Adjusted AFLYY.Adjusted
## 0.2076319 0.6795917 0.1127764
Los pesos óptimos asignados a cada acción dentro del portafolio minimizan la varianza del mismo, reduciendo así el riesgo general de la inversión.
Se utiliza una tasa libre de riesgo del 4.32% anual, correspondiente al rendimiento de los bonos del Tesoro de EE. UU. a 1 año, consultada en el portal oficial del Departamento del Tesoro (https://home.treasury.gov/) al 31 de marzo de 2025. Esta tasa es apropiada para valorar derivados financieros ya que representa el retorno de un activo sin riesgo en el mismo horizonte temporal.
Se simulan 5,000 trayectorias trimestrales para cada acción, modelando el comportamiento futuro de precios.
set.seed(123)
B <- 5000
T <- 1
n <- 4
r <- 0.0432
S0 <- as.numeric(tail(na.omit(precios), 1))
vol <- apply(retornos, 2, sd, na.rm = TRUE)
dt <- T/n
sim_prices <- array(NA, dim = c(B, n+1, length(acciones)))
for (i in 1:length(acciones)) {
sim_prices[,1,i] <- S0[i]
for (t in 2:(n+1)) {
z <- rnorm(B)
sim_prices[,t,i] <- sim_prices[,t-1,i] * exp((r - 0.5 * vol[i]^2) * dt + vol[i] * sqrt(dt) * z)
}
}
par(mfrow=c(1,3))
matplot(t(sim_prices[1:50,,1]), type='l', main='Simulaciones F', ylab='Precio', xlab='Trimestres', ylim = range(sim_prices[1:50,,1], na.rm = TRUE))
matplot(t(sim_prices[1:50,,2]), type='l', main='Simulaciones VZ', ylab='Precio', xlab='Trimestres', ylim = range(sim_prices[1:50,,2], na.rm = TRUE))
matplot(t(sim_prices[1:50,,3]), type='l', main='Simulaciones AFLYY', ylab='Precio', xlab='Trimestres', ylim = range(sim_prices[1:50,,3], na.rm = TRUE))Las gráficas muestran una muestra representativa de 50 trayectorias simuladas para cada una de las acciones del portafolio: F, VZ y AFLYY. Esta visualización permite examinar la dispersión de los precios proyectados bajo la dinámica estocástica del Movimiento Geométrico Browniano. Se evidencia que, a pesar de tener una tendencia promedio creciente debido al componente del rendimiento libre de riesgo, las trayectorias individuales pueden presentar una alta variabilidad, lo que refleja el riesgo inherente a cada activo. La comparación visual entre acciones sugiere que algunas presentan mayor amplitud de variaciones (volatilidad), lo que implica un riesgo más alto en la evolución de su precio. Este análisis preliminar es clave para identificar qué activos dentro del portafolio podrían beneficiarse más de estrategias de cobertura mediante opciones financieras.
Se calcula el valor del portafolio en cada trimestre usando los precios simulados. Se identifican pérdidas acumuladas.
valores_sim <- sapply(1:n, function(t) {
rowMeans(sim_prices[,t+1,] * matrix(rep(pesos, each = B), ncol = 3))
})
plot.ts(apply(valores_sim, 2, mean), main = "Valor Esperado del Portafolio", ylab = "USD", xlab = "Trimestre")La gráfica presenta la evolución del valor promedio del portafolio a lo largo de los cuatro trimestres del año, usando las 5,000 simulaciones generadas. Se puede observar la tendencia general del portafolio con base en los precios simulados de las acciones que lo componen. La disminución del valor esperado en ciertos trimestres refleja el riesgo inherente del portafolio sin cobertura, y evidencia la necesidad de implementar estrategias con derivados financieros. Los cuatro puntos representan cada trimestre del año porque la simulación se hizo dividiendo un año en cuatro periodos iguales, lo que permite hacer un análisis más fino del comportamiento estacional del portafolio.
Se crea un árbol binomial para valorar una opción put europea sobre una acción del portafolio.
S <- as.numeric(S0[1])
K <- S * 0.95
u <- exp(vol[1]*sqrt(dt))
d <- 1/u
p <- (exp(r*dt) - d) / (u - d)
arbol <- matrix(0, nrow = n+1, ncol = n+1)
for (i in 0:n) {
for (j in 0:i) {
arbol[j+1, i+1] <- S * u^j * d^(i-j)
}
}
payoff <- pmax(K - arbol[,n+1], 0)
for (i in (n):1) {
for (j in 1:i) {
payoff[j] <- exp(-r*dt) * (p * payoff[j+1] + (1-p) * payoff[j])
}
}
payoff[1]## [1] 0
Este cálculo permite determinar el valor teórico de una opción put al vencimiento utilizando un modelo binomial, el cual considera múltiples escenarios de precios futuros.
Se analiza la efectividad de la cobertura evaluando la pérdida del portafolio y la recuperación proporcionada por las opciones.
perdida_portafolio <- valores_sim[,4] - valores_sim[,1]
pago_opcion <- pmax(K - sim_prices[,5,1], 0)
recuperacion_total <- pago_opcion * 1000
plot(density(perdida_portafolio), col="red", main="Distribución de Pérdidas y Cobertura", xlab="USD")
lines(density(recuperacion_total), col="blue")
legend("topright", legend = c("Pérdida Portafolio", "Recuperación Opción"), col = c("red", "blue"), lty = 1)Interpretación de la cobertura con opciones
put:
En esta gráfica se observa la distribución de pérdidas proyectadas del
portafolio (en rojo) frente a la recuperación que aportan las opciones
put (en azul). Cuando ambas curvas se traslapan, significa que hay
escenarios donde la cobertura logra compensar parcialmente las pérdidas.
No obstante, se evidencia que la cobertura no es perfecta, ya que
depende del precio strike, del número de opciones compradas, y de la
magnitud de la caída del portafolio. Este tipo de análisis ayuda a
visualizar la efectividad y limitaciones del uso de derivados como
protección.
Se logró modelar un portafolio con acciones bajistas y cubrirlo parcialmente mediante opciones tipo put. Se valoraron las opciones usando un modelo binomial y se evaluó la cobertura simulando precios. Se identificó que la cobertura no es total, y depende del tipo de opción, su strike, y la inversión disponible. También se observó que el uso del préstamo debe ser optimizado para maximizar la protección del portafolio.