El objetivo del laboratorio es diseñar y evaluar estrategias de cobertura mediante opciones para proteger el 85% de un portafolio de USD 10 millones durante un horizonte de 2 años, analizando cómo cambia su nivel de riesgo con la cobertura. El informe está organizado en tres bloques: en el Bloque I se realiza la selección de los activos y la construcción del portafolio óptimo; en el Bloque II se realiza la simulación mediante el MBG con GARCH y se calcula el VaR del portafolio sin cobertura; y en el Bloque III se seleccionan las opciones y se construyen las tres estrategias de cobertura, para posteriormente analizar su comportamiento y efecto sobre el riesgo del portafolio.
doc <- read.csv(file.path(carpeta, "documentacion_datos.csv"))
knitr::kable(doc, caption = "Documentación de los datos descargados")
| ticker | empresa | sector | mercado | primera_fecha | ultima_fecha | n_obs_crudas | faltantes | fuente | descarga |
|---|---|---|---|---|---|---|---|---|---|
| CSCO | Cisco Systems, Inc. | Tecnología (redes y equipos de telecomunicaciones) | NASDAQ | 2021-10-01 | 2026-09-24 | 1250 | 0 | Yahoo Finance (quantmod) | 2026-09-21 10:00 |
| VEEV | Veeva Systems Inc. | Salud (software para ciencias de la vida) | NYSE | 2021-10-01 | 2026-09-24 | 1250 | 0 | Yahoo Finance (quantmod) | 2026-09-21 10:00 |
| MRVL | Marvell Technology, Inc. | Tecnología (semiconductores) | NASDAQ | 2021-10-01 | 2026-09-24 | 1250 | 0 | Yahoo Finance (quantmod) | 2026-09-21 10:00 |
Las tres acciones se eligieron, en primer lugar, por liquidez de opciones: necesitábamos acciones donde fuera posible encontrar puts y calls con vencimientos entre 12 y 24 meses y con condiciones de mercado razonables (bid-ask ajustado, open interest suficiente). En segundo lugar, buscamos algo de diversificación entre ellas. CSCO y MRVL pertenecen al sector Tecnología, pero CSCO está más relacionada con redes e infraestructura, mientras que MRVL está enfocada en semiconductores. VEEV, por su parte, pertenece a un sector completamente distinto: software para ciencias de la vida. Es decir, aunque dos de las tres comparten el mismo sector amplio, no dependen del mismo negocio ni de los mismos factores de demanda, lo que ayuda a que el portafolio no esté totalmente concentrado en un solo tipo de riesgo.
Para las acciones CSCO, VEEV y MRVL se verificó la disponibilidad de información histórica desde el 20 de septiembre de 2016, obteniendo 2.516 observaciones para cada activo. Por lo tanto, las tres acciones cuentan con información suficiente para cumplir con la ventana histórica de 10 años requerida para la estimación de volatilidad mediante el modelo GARCH.
liquidez <- read.csv("liquidez_opciones_candidatos.csv")
knitr::kable(liquidez, digits = 3, caption = "Liquidez por vencimiento (paso 1)")
| ticker | spot | div_yield | vencimiento | dias | puts_con_bid | calls_con_bid | spread_rel_put_med | spread_rel_call_med | oi_put_med | vol_put_sum | iv_put_med |
|---|---|---|---|---|---|---|---|---|---|---|---|
| MRVL | 261.935 | 0.001 | 2027-12-17 | 452 | 6 | 5 | 0.023 | 0.025 | 101.5 | 21 | 0.604 |
| MRVL | 261.935 | 0.001 | 2028-06-16 | 634 | 6 | 5 | 0.028 | 0.033 | 415.5 | 13 | 0.591 |
| MRVL | 261.935 | 0.001 | 2028-01-21 | 487 | 6 | 5 | 0.034 | 0.040 | 243.5 | 20 | 0.601 |
| MRVL | 261.935 | 0.001 | 2028-03-17 | 543 | 6 | 5 | 0.036 | 0.035 | 42.0 | 33 | 0.598 |
| CSCO | 106.700 | 0.016 | 2028-06-16 | 634 | 4 | 4 | 0.088 | 0.132 | 125.5 | 6 | 0.322 |
| CSCO | 106.700 | 0.016 | 2028-01-21 | 487 | 7 | 4 | 0.095 | 0.081 | 224.0 | 97 | 0.332 |
| CSCO | 106.700 | 0.016 | 2027-12-17 | 452 | 7 | 4 | 0.114 | 0.089 | 286.0 | 80 | 0.342 |
| VEEV | 280.680 | 0.000 | 2028-01-21 | 487 | 6 | 5 | 0.133 | 0.085 | 44.5 | 19 | 0.394 |
Para escoger el vencimiento de las opciones comparamos el spread, el interés abierto y el volumen. En VEEV solo encontramos un vencimiento dentro del rango de 12 a 24 meses, que fue el 21 de enero de 2028. En CSCO, este vencimiento tuvo el mejor spread (0,0583) y el mayor volumen (96), aunque otro vencimiento tuvo un interés abierto un poco mayor. En MRVL, el 21 de enero de 2028 no tuvo el mejor spread, pero sí tuvo un buen interés abierto (349) y el mayor volumen (26). Por esta razón, escogimos el 21 de enero de 2028 como vencimiento común para las tres acciones, ya que así podemos realizar la cobertura de todo el portafolio en la misma fecha y comparar sus resultados. En MRVL aceptamos un spread un poco mayor porque era importante mantener el mismo vencimiento y, al mismo tiempo, tenía buenas condiciones de volumen e interés abierto.
port_opt <- read.csv(file.path(carpeta, "portafolio_optimo.csv"))
knitr::kable(port_opt, digits = 4, caption = "Retorno, volatilidad y contribución al riesgo")
| ticker | peso | mu_anual | sigma_anual | contrib_vol | pct_del_riesgo |
|---|---|---|---|---|---|
| CSCO | 0.605 | 0.1619 | 0.2611 | 0.1293 | 0.4517 |
| VEEV | 0.150 | -0.0089 | 0.3932 | 0.0256 | 0.0895 |
| MRVL | 0.245 | 0.2994 | 0.6439 | 0.1313 | 0.4587 |
Las correlaciones entre las tres acciones muestran que sí hay beneficio de diversificación, porque ninguna se mueve casi igual que la otra (ninguna correlación cercana a 1): entre CSCO y VEEV es de 0,17, entre CSCO y MRVL de 0,42, y entre VEEV y MRVL de 0,24. Esto quiere decir que, aunque a veces se muevan en la misma dirección, no lo hacen de forma idéntica, así que juntarlas en el portafolio ayuda a bajar el riesgo comparado con invertir en una sola.
Por otro lado, se observó que lo que cada acción aporta al riesgo total no depende solamente de qué tanto peso tiene en el portafolio. Por ejemplo, CSCO tiene cerca del 60% del portafolio, pero solo aporta entre 44% y 52% del riesgo total, mientras que VEEV, con el peso mínimo de 15%, aporta apenas cerca del 9%. Esto pasa porque el aporte de cada activo depende también de qué tan volátil es por sí sola y de qué tanto se correlaciona con las otras dos: CSCO es la que tiene menor volatilidad individual del grupo, y VEEV, aunque por separado es más volátil, es la que menos correlación tiene con las otras dos (0,17 con CSCO y 0,24 con MRVL). Esa baja correlación hace que buena parte de su riesgo se “cancele” dentro del portafolio, y por eso termina aportando menos riesgo del que uno esperaría solo mirando su volatilidad individual.
comp <- read.csv(file.path(carpeta, "comparacion_portafolios.csv"))
knitr::kable(comp, digits = 4, caption = "Máximo Sharpe vs. mínima varianza")
| portafolio | CSCO | VEEV | MRVL | retorno_anual | volatilidad | sharpe |
|---|---|---|---|---|---|---|
| Máximo Sharpe | 0.6050 | 0.1500 | 0.245 | 0.170 | 0.2862 | 0.4277 |
| Mínima varianza | 0.6125 | 0.2375 | 0.150 | 0.142 | 0.2570 | 0.3673 |
Se trabajó con el portafolio de máximo Sharpe porque, aunque el de mínima varianza tiene menos volatilidad anual (25,71% frente a 28,88%), también da un retorno esperado más bajo (14,11% frente a 17,06%). El índice de Sharpe sirve justo para eso: mirar el retorno y el riesgo juntos, no por separado. Y ahí el portafolio de máximo Sharpe gana con 0,4267 contra 0,3645 del de mínima varianza, o sea que por cada unidad de riesgo que se asume, genera más retorno. Por eso se escogió este portafolio: buscando un punto medio entre retorno y riesgo, en lugar de quedarse solo con el que tiene menor volatilidad.
posicion <- read.csv(file.path(carpeta, "posicion_y_cobertura.csv"))
knitr::kable(posicion, digits = 2, caption = "Acciones, contratos y cobertura del 85%")
| ticker | peso | spot | inversion_usd | acciones | acciones_a_cubrir_85 | contratos_aprox | criterio |
|---|---|---|---|---|---|---|---|
| CSCO | 0.60 | 106.97 | 6050000 | 56557 | 48073 | 481 | sharpe |
| VEEV | 0.15 | 274.84 | 1500000 | 5457 | 4638 | 46 | sharpe |
| MRVL | 0.24 | 258.95 | 2450000 | 9461 | 8042 | 80 | sharpe |
garch <- read.csv(file.path(carpeta, "garch_parametros.csv"))
knitr::kable(garch, digits = 4, caption = "Parámetros GARCH(1,1) por activo")
| ticker | n_obs | omega | alpha1 | beta1 | persistencia | vol_anual_incondicional | vol_anual_ultima | vol_anual_pronost_final |
|---|---|---|---|---|---|---|---|---|
| CSCO | 2516 | 0e+00 | 0.2105 | 0.7119 | 0.9223 | 0.2994 | 0.3687 | 0.2994 |
| VEEV | 2516 | 1e-04 | 0.0503 | 0.8287 | 0.8789 | 0.3886 | 0.3755 | 0.3886 |
| MRVL | 2516 | 0e+00 | 0.1529 | 0.8272 | 0.9801 | 0.7327 | 0.5943 | 0.7327 |
La persistencia del modelo GARCH muestra cuánto tiempo tienden a mantenerse los efectos de un choque fuerte en la volatilidad. Cuando está cerca de 1, como en MRVL (0,98), quiere decir que ese choque casi no se olvida: si hay una noticia que mueve mucho el precio, ese efecto sigue afectando las estimaciones de los días siguientes durante bastante tiempo. CSCO y VEEV tienen persistencias más moderadas (0,92 y 0,88), así que también tienen memoria, pero sus choques se van disipando un poco más rápido que en MRVL.
Se usó GARCH en vez de una volatilidad histórica fija porque el riesgo de una acción no es siempre el mismo: hay épocas más tranquilas y otras más agitadas. El GARCH va actualizando la estimación de volatilidad combinando lo que pasó recientemente con la volatilidad de períodos anteriores, mientras que una volatilidad fija asumiría el mismo nivel de riesgo todo el tiempo, sin importar lo que esté pasando en el mercado. Por eso resulta más adecuado para las simulaciones: permite que el riesgo del portafolio vaya cambiando a lo largo de los dos años, en vez de suponer que siempre es igual.
Se usó como deriva la tasa libre de riesgo menos el dividendo (r − q) porque es un supuesto que se apoya en información que sí se puede observar hoy en el mercado, y no en suponer que lo que pasó antes con cada acción se va a repetir. Por ejemplo, MRVL tuvo una deriva histórica de casi 30% anual, pero asumir que va a seguir creciendo así de rápido los próximos dos años sería arriesgado, porque rendimientos pasados no garantizan nada hacia adelante. En cambio, la tasa libre de riesgo sale de las tasas de los títulos del Tesoro y el dividendo es el rendimiento por dividendos del activo, o sea que son datos que uno puede consultar en el momento mismo de hacer la valoración. Por eso, para simular el MBG se prefirió usar r − q: así no se está proyectando a futuro un rendimiento histórico que a lo mejor no se vuelve a repetir.
var_sin <- read.csv(file.path(carpeta, "var_sin_cobertura_rf.csv"))
knitr::kable(var_sin, digits = 2, caption = "VaR y ES sin cobertura, por horizonte")
| horizonte | dias | VaR_95 | VaR_99 | ES_95 | VaR_95_pct_V0 | VaR_99_pct_V0 |
|---|---|---|---|---|---|---|
| 1er trimestre | 63 | 2228359 | 2988136 | 2683388 | 22.28 | 29.88 |
| Vencimiento opciones | 337 | 4522484 | 5557710 | 5165808 | 45.23 | 55.58 |
| 2 años | 504 | 5190429 | 6393957 | 5884549 | 51.91 | 63.94 |
El VaR al 95% al vencimiento de las opciones, de 45,81%, quiere decir que, para un portafolio de USD 10 millones y en los 337 días analizados, hay un 95% de confianza en que la pérdida no pase de unos USD 4,58 millones, pero también hay un 5% de probabilidad de que sí supere ese valor. Al mirar las simulaciones a 2 años, se ve que la mediana del portafolio se puede quedar estancada o incluso bajar, mientras que la media sube. Esto pasa porque la distribución tiene una cola larga hacia la derecha: hay algunos escenarios con ganancias muy altas que jalan la media hacia arriba, aunque esos casos sean pocos y la mayoría de las simulaciones se queden en valores más bajos.
Por último, se considera que este nivel de riesgo sin cobertura sí es una razón importante para analizar una cobertura del 85% del portafolio, ya que se trata de una pérdida potencial de más del 45% del capital en el escenario de cola del 5%. Aun así, el VaR por sí solo no significa que esa pérdida vaya a ocurrir necesariamente; es una medida para dimensionar el riesgo y después poder compararlo con lo que cambia al incluir las estrategias de cobertura.
candidatos <- read.csv(file.path(carpeta, "candidatos_top.csv"))
knitr::kable(candidatos[, c("ticker","tipo","strike","moneyness","tipo_moneyness",
"bid","ask","oi","volumen","iv","puntaje")],
digits = 3, caption = "Candidatos de strikes por liquidez (top 3 por tipo)")
| ticker | tipo | strike | moneyness | tipo_moneyness | bid | ask | oi | volumen | iv | puntaje |
|---|---|---|---|---|---|---|---|---|---|---|
| CSCO | call | 115.0 | 1.078 | OTM | 15.65 | 16.80 | 1360 | 58 | 0.410 | 6 |
| CSCO | call | 120.0 | 1.125 | OTM | 13.70 | 16.00 | 7254 | 150 | 0.428 | 6 |
| CSCO | call | 110.0 | 1.031 | OTM | 17.60 | 19.15 | 1456 | 4 | 0.421 | 9 |
| CSCO | put | 100.0 | 0.937 | OTM | 11.55 | 12.15 | 3125 | 2 | 0.324 | 7 |
| CSCO | put | 97.5 | 0.914 | OTM | 10.00 | 11.00 | 255 | 76 | 0.326 | 8 |
| CSCO | put | 105.0 | 0.984 | ATM | 14.00 | 14.55 | 174 | 2 | 0.319 | 10 |
| VEEV | call | 290.0 | 1.033 | OTM | 58.50 | 62.50 | 19 | 2 | 0.504 | 5 |
| VEEV | call | 300.0 | 1.069 | OTM | 54.50 | 58.50 | 252 | 1 | 0.500 | 5 |
| VEEV | call | 320.0 | 1.140 | OTM | 47.00 | 51.50 | 54 | 1 | 0.511 | 8 |
| VEEV | put | 260.0 | 0.926 | OTM | 34.00 | 38.50 | 35 | 10 | 0.392 | 6 |
| VEEV | put | 250.0 | 0.891 | OTM | 29.50 | 34.00 | 117 | 2 | 0.396 | 7 |
| VEEV | put | 230.0 | 0.819 | OTM | 21.50 | 26.00 | 179 | 2 | 0.407 | 8 |
| MRVL | call | 300.0 | 1.145 | OTM | 72.70 | 76.00 | 5840 | 49 | 0.737 | 7 |
| MRVL | call | 270.0 | 1.031 | OTM | 81.50 | 84.10 | 391 | 4 | 0.732 | 8 |
| MRVL | call | 290.0 | 1.107 | OTM | 75.60 | 78.25 | 227 | 12 | 0.735 | 8 |
| MRVL | put | 260.0 | 0.993 | ATM | 68.50 | 69.90 | 1676 | 1 | 0.598 | 7 |
| MRVL | put | 220.0 | 0.840 | OTM | 45.70 | 47.05 | 138 | 3 | 0.603 | 8 |
| MRVL | put | 230.0 | 0.878 | OTM | 50.70 | 52.45 | 349 | 10 | 0.600 | 8 |
elegidos <- read.csv(file.path(carpeta, "strikes_elegidos.csv"))
knitr::kable(elegidos, caption = "Strikes finales elegidos")
| ticker | put_strike | call_strike | criterio |
|---|---|---|---|
| CSCO | 100 | 115 | mejor puntaje (por defecto, falta decidir) |
| VEEV | 260 | 290 | mejor puntaje (por defecto, falta decidir) |
| MRVL | 260 | 300 | mejor puntaje (por defecto, falta decidir) |
CSCO: la put tiene un moneyness de 0,9115, o sea que el strike queda cerca de un 8,85% por debajo del precio spot. Eso significa que la acción tendría que caer casi un 9% antes de que la put empiece a proteger de verdad. De las tres, es la que deja la zona de caída más grande sin cubrir.
VEEV: su put tiene un moneyness de 0,9460, con el strike alrededor de 5,4% por debajo del spot. Aquí la protección arranca después de una caída más pequeña que en CSCO, así que da una cobertura más cercana al precio actual.
MRVL: con un moneyness de 0,9654, el strike queda a solo cerca de 3,46% del spot. Es la put más cercana al precio actual de las tres, así que es la que menos margen de caída deja antes de que la protección empiece a funcionar.
La elección de los strikes no se basó solo en qué tanta protección daban, sino también en qué tan fácil era negociar esas opciones. Los strikes que se escogieron tenían una buena combinación: spread relativo bajo, mayor open interest y buen volumen negociado en comparación con las otras alternativas que se tenían en mente, así que dan una protección razonable sin complicar la entrada o salida de la posición. En resumen, la selección juntó el nivel de cobertura que se quería con condiciones de liquidez que tuvieran sentido.
paridad <- read.csv(file.path(carpeta, "paridad_put_call.csv"))
iv_garch <- read.csv(file.path(carpeta, "iv_vs_garch.csv"))
knitr::kable(iv_garch, digits = 3, caption = "IV implícita (mercado) vs. GARCH vs. histórica")
| ticker | iv_mediana_puts | iv_mediana_calls | garch_vol_ultima | garch_vol_incondicional | vol_historica |
|---|---|---|---|---|---|
| CSCO | 0.332 | 0.416 | 0.369 | 0.299 | 0.261 |
| VEEV | 0.400 | 0.508 | 0.376 | 0.389 | 0.393 |
| MRVL | 0.601 | 0.733 | 0.594 | 0.733 | 0.644 |
Al comparar la paridad put-call con el precio spot, se observa que las desviaciones son pequeñas, con medianas entre 0,24% y 0,47% del spot y valores máximos inferiores al 0,92%. Esto indica que, en general, la relación de paridad se cumple razonablemente, aunque no de manera exacta debido a que se están analizando opciones americanas. Por otro lado, al comparar la volatilidad implícita con la volatilidad estimada mediante GARCH, se observa que las IV medianas de las puts son relativamente cercanas al GARCH: en CSCO son 0,341 frente a 0,369, en VEEV 0,395 frente a 0,364 y en MRVL 0,606 frente a 0,594. En cambio, las IV de las calls son superiores al GARCH en las tres acciones: 0,408 frente a 0,369 en CSCO, 0,512 frente a 0,364 en VEEV y 0,741 frente a 0,594 en MRVL. Esto muestra que existe una diferencia importante entre las volatilidades implícitas de puts y calls, especialmente en VEEV y MRVL, y ayuda a explicar por qué en la estrategia collar la venta de calls puede generar un crédito que compense parte del costo de las puts.
val <- read.csv(file.path(carpeta, "valoracion_opciones.csv"))
knitr::kable(val[, c("ticker","tipo","strike","mid","iv_yahoo","iv_propia_mid",
"precio_europeo","precio_americano","prima_ejercicio_anticipado",
"delta_americano")], digits = 4,
caption = "Valoración binomial CRR: europea vs. americana")
| ticker | tipo | strike | mid | iv_yahoo | iv_propia_mid | precio_europeo | precio_americano | prima_ejercicio_anticipado | delta_americano |
|---|---|---|---|---|---|---|---|---|---|
| CSCO | put | 100 | 11.850 | 0.3240 | 0.3541 | 11.4836 | 11.850 | 0.3664 | -0.3318 |
| CSCO | call | 115 | 16.225 | 0.4105 | 0.3714 | 16.2246 | 16.225 | 0.0004 | 0.5405 |
| VEEV | put | 260 | 36.250 | 0.3916 | 0.4238 | 34.9420 | 36.250 | 1.3080 | -0.3170 |
| VEEV | call | 290 | 60.500 | 0.5037 | 0.4488 | 60.5000 | 60.500 | 0.0000 | 0.6221 |
| MRVL | put | 260 | 69.200 | 0.5976 | 0.6614 | 67.3816 | 69.200 | 1.8184 | -0.3333 |
| MRVL | call | 300 | 74.350 | 0.7370 | 0.6913 | 74.3500 | 74.350 | 0.0000 | 0.6181 |
Al comparar la volatilidad implícita calculada por nosotros con la de Yahoo, encontramos diferencias tanto en las puts como en las calls. Por eso decidimos calcular nuestra propia IV usando el árbol binomial CRR y el precio medio de mercado, para que la valoración fuera consistente con el modelo utilizado. En cuanto al ejercicio anticipado, observamos que en las calls la diferencia es casi cero, mientras que en las puts es mayor: 0,366 en CSCO, 1,308 en VEEV y 1,818 en MRVL. Esto se debe a que los dividendos de las acciones son muy bajos o nulos, por lo que ejercer una call antes del vencimiento casi no resulta atractivo, ya que se pierde el valor del tiempo que todavía le queda a la opción. En cambio, en una put puede ser conveniente ejercer antes cuando el precio de la acción cae bastante, porque se recibe antes el dinero correspondiente al strike. Por eso el ejercicio anticipado tiene mayor valor en las puts que en las calls.
| ticker | A_protective_put | B_collar_put | B_collar_call |
|---|---|---|---|
| CSCO | 100 | 100 | 115 |
| VEEV | 260 | 260 | 290 |
| MRVL | 260 | 260 | 300 |
Protective Put: consiste en mantener la acción y comprar una opción put que da el derecho a venderla a un precio determinado. De esta forma, si el precio de la acción baja mucho, la put ayuda a limitar la pérdida.
Collar: consiste en mantener la acción, comprar una put y vender una call. La put protege al portafolio ante una caída del precio, mientras que la venta de la call genera un ingreso por la prima, pero limita parte de la ganancia si el precio de la acción sube demasiado.
Se escogió el bear put spread como tercera estrategia porque el VaR sin cobertura, de casi 45,8% al vencimiento, mostraba un riesgo bastante alto que necesitaba una protección más directa contra caídas fuertes. A diferencia del covered call, que solo genera un ingreso por la prima y da un colchón limitado si el activo cae, el bear put spread sí permite compensar parte de las pérdidas gracias a la put comprada, dejando un rango de protección hasta el strike de la put vendida. Por eso esta estrategia encaja mejor con el objetivo de reducir el riesgo de pérdidas grandes, aunque hay que tener claro que su protección también tiene un límite y un costo asociado.
costos <- read.csv(file.path(carpeta, "costos_estrategias.csv"))
knitr::kable(costos, digits = 0, caption = "Costo neto por estrategia y acción (USD; negativo = crédito)")
| ticker | protective_put | collar | bear_put_spread |
|---|---|---|---|
| CSCO | 569985 | -210438 | 64935 |
| VEEV | 166750 | -111550 | 57500 |
| MRVL | 553600 | -41200 | 182600 |
| TOTAL | 1290335 | -363188 | 305035 |
El costo de las estrategias cambia bastante según cómo están armadas. La protective put fue la más cara, con un total de $1.353.262,50, porque solo compra puts y hay que pagar toda la prima completa. El bear put spread costó menos, $409.337,50, porque vender una put con strike más bajo ayuda a financiar parte de la put comprada. El collar, en cambio, dio un resultado de -$386.805, o sea un crédito neto: lo que se recibió por vender las calls fue más de lo que costó comprar las puts.
Esa diferencia entre el collar y el bear put spread se explica porque, como se vio en la sección 4.2, la volatilidad implícita de las calls fue consistentemente más alta que la de las puts en las tres acciones, así que las primas que se reciben por vender calls son más altas. Por eso el collar termina saliendo más barato —hasta a crédito— que el bear put spread, que solo vende una put adicional con una prima más modesta. En general, las estrategias que venden opciones bajan el desembolso inicial frente a la protective put, pero a cambio limitan parte de la protección.
Para distribuir el costo de las estrategias entre las tres acciones se usó como criterio qué tanto aporta cada una al riesgo total del portafolio (pct_del_riesgo), en vez de repartir en partes iguales. En la protective put, por ejemplo, CSCO representó el 44,17% del costo frente a un 44% de participación en el riesgo; VEEV representó el 14,70% del costo frente a cerca del 9% del riesgo; y MRVL representó el 41,13% del costo frente a más o menos 47% del riesgo. Las proporciones no coinciden exactamente —sobre todo VEEV, que recibe una parte del costo un poco mayor de lo que su riesgo justificaría—, pero en general el reparto sí va en línea con la idea de asignarle más costo a los activos que más aportan al riesgo del portafolio.
No se usó una distribución de 33%/33%/33% porque eso implicaría que las tres acciones aportan el mismo riesgo, y eso no es lo que muestran los resultados: CSCO y MRVL concentran la mayor parte del riesgo, mientras que VEEV aporta bastante menos.
var_con <- read.csv(file.path(carpeta, "var_con_cobertura.csv"))
knitr::kable(var_con, digits = 2, caption = "VaR y ES por estrategia y horizonte")
| horizonte | dias | estrategia | VaR_95 | VaR_99 | ES_95 | VaR_95_pct | VaR_99_pct |
|---|---|---|---|---|---|---|---|
| 1er trimestre | 63 | Sin cobertura | 2228359.1 | 2988136.08 | 2683387.9 | 22.28 | 29.88 |
| 1er trimestre | 63 | Protective put | -1069394.5 | -669957.12 | -829664.4 | -12.28 | -7.69 |
| 1er trimestre | 63 | Collar | 1198578.7 | 1378344.32 | 1308268.5 | 11.57 | 13.30 |
| 1er trimestre | 63 | Bear put spread | 1545523.5 | 2253206.88 | 1977331.2 | 15.94 | 23.24 |
| Vencimiento opciones | 337 | Sin cobertura | 4522484.0 | 5557710.19 | 5165807.9 | 45.23 | 55.58 |
| Vencimiento opciones | 337 | Protective put | -220600.5 | -50995.96 | -115147.4 | -2.53 | -0.59 |
| Vencimiento opciones | 337 | Collar | 1435514.4 | 1602526.54 | 1538753.4 | 13.85 | 15.46 |
| Vencimiento opciones | 337 | Bear put spread | 3656555.2 | 4687953.86 | 4301532.0 | 37.72 | 48.36 |
Al comparar el VaR de las tres estrategias contra el escenario sin cobertura, la protective put es la que más reduce el riesgo: el VaR pasa de 22,99% a -9,69% a 63 días, y de 45,81% a 0,29% al vencimiento (los valores negativos quieren decir que, en el peor 5% de los escenarios, la estrategia termina en ganancia y no en pérdida). Después viene el collar, con un VaR de cerca de 14,4% a 63 días y 16,7% al vencimiento. Y por último queda el bear put spread, que es el que menos reduce el riesgo de las tres, con cerca de 15,7% y 36,3% respectivamente.
Este orden tiene sentido porque la protective put da la protección más amplia, pero a cambio hay que asumir el costo completo de la prima. En cambio, el collar y el bear put spread bajan ese costo vendiendo otra opción, y por eso mismo terminan limitando parte de la protección que se logra.
Aunque el collar usa las mismas puts compradas que la protective put, termina con un VaR más alto porque además incluye la venta de calls. Como las correlaciones entre CSCO, VEEV y MRVL son bajas o moderadas, en los escenarios extremos del portafolio no necesariamente caen las tres al tiempo: puede que una caiga fuerte mientras otra sube. Ahí es donde la call vendida sobre la que sube genera pérdidas, y eso le quita parte del efecto protector que dan las puts. Por eso la protective put logra una reducción más grande del VaR en los resultados, mientras que el collar sacrifica algo de esa protección a cambio de los ingresos que recibe por vender las calls.
El bear put spread muestra una reducción moderada del VaR al 95%, pero se pone bastante peor cuando se mira el VaR al 99%. Esto pasa porque, aunque la put comprada sí protege ante caídas, la put vendida en un strike más bajo pone un límite a hasta dónde llega esa protección. En caídas moderadas, como las del percentil 95%, es poco probable que el precio se pase de ese strike inferior, así que el spread todavía cubre bien. Pero en escenarios más extremos, como el percentil 99%, ya es más probable que el precio sí caiga por debajo de ese nivel, y ahí la protección adicional se acaba, dejando que las pérdidas del portafolio vuelvan a crecer más rápido. Por eso el bear put spread se comporta razonablemente bien ante caídas moderadas, pero queda más limitado frente a eventos extremos.
Cabe anotar que el VaR con cobertura solo se calculó hasta el vencimiento de las opciones (día 337), porque ahí termina la ventana de cobertura que se definió; a 2 años el VaR es el mismo con o sin cobertura porque las opciones ya vencieron.
A partir de los resultados, se recomienda el collar como estrategia de cobertura, usando como criterio principal el equilibrio entre reducción del riesgo y costo. Aunque la protective put fue la que más redujo el VaR, también fue la más cara, con un desembolso de $1.353.262,50. El collar, en cambio, dio un crédito neto de $386.805 y también redujo el VaR frente al escenario sin cobertura, pasando de 22,99% a cerca de 14,4% a 63 días y de 45,81% a 16,7% al vencimiento. El bear put spread tuvo un costo intermedio, pero mostró menos capacidad de protección en escenarios extremos. Entonces, mirando costo y reducción de riesgo juntos, el collar queda como un punto medio entre los dos objetivos, aunque eso sí, limita parte de la ganancia potencial por la venta de las calls.
En cuanto a las limitaciones del análisis: primero, se usó una volatilidad constante bajo el supuesto de Black-Scholes para revalorar las opciones en el Paso 6, en vez de recalcularlas con un modelo más completo para cada una de las 10.000 trayectorias, lo cual simplifica el análisis y puede no reflejar del todo los cambios de volatilidad que pasarían en escenarios reales. Segundo, los precios spot que se usaron para valorar las opciones y armar algunas partes del análisis no siempre corresponden exactamente al mismo momento de las cotizaciones de las opciones y de los precios históricos, por diferencias en fechas y fuentes de información, lo que puede generar pequeñas diferencias en la valoración y en los resultados de las estrategias.
Ryan, J. A., & Ulrich, J. M. (2024). quantmod: Quantitative financial modelling framework [Paquete de R]. https://cran.r-project.org/package=quantmod
Yahoo Finance. (2026). Cotizaciones históricas y cadenas de opciones de CSCO, VEEV y MRVL [Datos]. https://finance.yahoo.com
Board of Governors of the Federal Reserve System (US). (2026). 1-Year Treasury Constant Maturity Rate [DGS1] y 2-Year Treasury Constant Maturity Rate [DGS2] [Datos]. FRED, Federal Reserve Bank of St. Louis. https://fred.stlouisfed.org/