1 Introducción

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.

2 Análisis Fundamental y Justificación de la Selección de Acciones

Las acciones seleccionadas son:

  • F (Ford Motor Company): Pertenece al sector automotriz, con alta exposición a ciclos económicos y reciente presión sobre sus márgenes operativos. Sus fundamentales muestran una tendencia a la baja en crecimiento y aumento de deuda, lo cual la hace candidata para cobertura.
  • VZ (Verizon Communications): Empresa del sector telecomunicaciones con alto nivel de endeudamiento y estancamiento en crecimiento de ingresos. Sus fundamentales evidencian riesgo de pérdida de valor.
  • AFLYY (Air France-KLM): Aerolínea europea con alta volatilidad, fuerte exposición a eventos geopolíticos y presión por costos operativos. Su desempeño financiero presenta riesgo sistemático significativo.

Estas acciones fueron seleccionadas por presentar una tendencia bajista o alta incertidumbre en sus fundamentales, justificando la necesidad de usar derivados financieros como cobertura.

library(quantmod)
## 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
acciones <- c("F", "VZ", "AFLYY")
getSymbols(acciones, src = "yahoo", from = "2023-01-01")
## [1] "F"     "VZ"    "AFLYY"
lapply(acciones, function(x) head(get(x)))
## [[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.

3 Construcción del Portafolio de Media-Varianza

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.

4 Justificación de la Tasa Libre de Riesgo

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.

5 Simulación de Precios por Movimiento Geométrico Browniano

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))

par(mfrow=c(1,1))

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.

6 Análisis del Portafolio Trimestral

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.

7 Construcción de Árbol Binomial para Opciones Put

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.

8 Evaluación de Cobertura con Opciones y Simulación

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.

9 Conclusiones

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.

10 Referencias

  • Departamento del Tesoro de los Estados Unidos. https://home.treasury.gov/
  • Hull, J. C. (2017). Options, Futures, and Other Derivatives (10th ed.). Pearson.
  • Bodie, Z., Kane, A., & Marcus, A. J. (2014). Investments (10th ed.). McGraw-Hill Education.
  • Yahoo Finance. https://finance.yahoo.com/