# PARÁMETROS INICIALES

tickers <- c("WMT", "ROST", "DLTR")
indice <- "^GSPC"  # S&P 500
capital_inicial <- 10000000
tasa_libre_riesgo <- 0.0402
fecha_inicio_datos <- "2015-07-31"
fecha_fin_datos <- "2025-07-31"
dias_comerciales <- 252
# DESCARGA DE DATOS HISTÓRICOS (10 AÑOS)

# Descargar precios ajustados
precios <- NULL
for (ticker in c(tickers, indice)) {
  tryCatch({
    datos <- getSymbols(ticker, from = fecha_inicio_datos, 
                       to = fecha_fin_datos, auto.assign = FALSE)
    precios <- cbind(precios, Ad(datos))
    cat("✓", ticker, "descargado exitosamente\n")
  }, error = function(e) {
    cat("✗ Error descargando", ticker, "\n")
  })
}
## ✓ WMT descargado exitosamente
## ✓ ROST descargado exitosamente
## ✓ DLTR descargado exitosamente
## ✓ ^GSPC descargado exitosamente
colnames(precios) <- c(tickers, "SP500")
# Calcular retornos logarítmicos
retornos <- na.omit(diff(log(precios)))
retornos_acciones <- retornos[, 1:3]
retornos_indice <- retornos[, 4]

cat("\nPeríodo de datos:", as.character(index(retornos)[1]), "a", 
    as.character(index(retornos)[nrow(retornos)]), "\n")
## 
## Período de datos: 2015-08-03 a 2025-07-30
cat("Observaciones:", nrow(retornos), "días de negociación\n")
## Observaciones: 2513 días de negociación

ANÁLISIS FUNDAMENTAL

WMT: Perspectiva POSITIVA - Líder en retail con transformación digital exitosa Expectativa: Crecimiento sostenido impulsado por e-commerce y eficiencia

ROST:Perspectiva MODERADA - Modelo de negocio resistente, posible presión margen Expectativa: Estabilidad con crecimiento moderado, resistente a volatilidad

DLTR: Perspectiva CAUTELOSA - Competencia intensa, presión inflacionaria Expectativa: Volatilidad moderada, beneficio en entornos económicos difíciles

# PARTE 1: PORTAFOLIO ÓPTIMO DE INVERSIÓN

# 1.1 ANÁLISIS FUNDAMENTAL Y EXPECTATIVA DE PRECIOS

precio_actual <- as.numeric(tail(precios[, 1:3], 1))
precio_inicial <- as.numeric(head(precios[, 1:3], 1))
retorno_periodo <- (precio_actual - precio_inicial) / precio_inicial * 100

analisis_fundamental <- data.frame(
  Ticker = tickers,
  Sector = c("Consumer Staples", "Consumer Discretionary", "Consumer Discretionary"),
  Empresa = c("Walmart Inc.", "Ross Stores Inc.", "Dollar Tree Inc."),
  Precio_Actual_31Jul2025 = round(precio_actual, 2),
  Retorno_10_años = paste0(round(retorno_periodo, 2), "%"),
  Características = c(
    "Líder retail, e-commerce fuerte, diversificación global",
    "Descuentos off-price, resistente recesiones, márgenes sólidos",
    "Dollar stores, mercado bajo ingreso, expansión agresiva"
  )
)
# 1.2 RETORNOS ANUALES Y MATRIZ DE COVARIANZAS

# Anualizar estadísticas
retornos_anuales <- colMeans(retornos_acciones) * dias_comerciales
desv_std_anual <- apply(retornos_acciones, 2, sd) * sqrt(dias_comerciales)

# Matriz de varianzas y covarianzas anualizada
matriz_cov <- cov(retornos_acciones) * dias_comerciales
matriz_corr <- cor(retornos_acciones)


tabla_retornos <- data.frame(
  Acción = tickers,
  Retorno_Anual = paste0(round(retornos_anuales * 100, 2), "%"),
  Desv_Std_Anual = paste0(round(desv_std_anual * 100, 2), "%"),
  Coef_Variación = round(desv_std_anual / abs(retornos_anuales), 2)
)
print(kable(tabla_retornos))
## 
## 
## |     |Acción |Retorno_Anual |Desv_Std_Anual | Coef_Variación|
## |:----|:------|:-------------|:--------------|--------------:|
## |WMT  |WMT    |16%           |21.72%         |           1.36|
## |ROST |ROST   |10.58%        |32.18%         |           3.04|
## |DLTR |DLTR   |3.81%         |36.57%         |           9.59|
cat("\n\nMATRIZ DE COVARIANZAS ANUALIZADA:\n")
## 
## 
## MATRIZ DE COVARIANZAS ANUALIZADA:
print(round(matriz_cov, 6))
##           WMT     ROST     DLTR
## WMT  0.047192 0.019725 0.025079
## ROST 0.019725 0.103532 0.045209
## DLTR 0.025079 0.045209 0.133708
cat("\n\nMATRIZ DE CORRELACIONES:\n")
## 
## 
## MATRIZ DE CORRELACIONES:
print(round(matriz_corr, 3))
##        WMT  ROST  DLTR
## WMT  1.000 0.282 0.316
## ROST 0.282 1.000 0.384
## DLTR 0.316 0.384 1.000
# 1.3 PORTAFOLIO DE MÍNIMA VARIANZA


# Portafolio de mínima varianza
n_activos <- length(tickers)
matriz_unos <- rep(1, n_activos)
matriz_cov_inv <- solve(matriz_cov)

# Pesos óptimos (mínima varianza)
pesos_optimos <- (matriz_cov_inv %*% matriz_unos) / 
                 as.numeric(t(matriz_unos) %*% matriz_cov_inv %*% matriz_unos)
pesos_optimos <- as.vector(pesos_optimos)
names(pesos_optimos) <- tickers

# Estadísticas del portafolio
retorno_port <- sum(pesos_optimos * retornos_anuales)
varianza_port <- t(pesos_optimos) %*% matriz_cov %*% pesos_optimos
desv_std_port <- sqrt(varianza_port)
sharpe_ratio <- (retorno_port - tasa_libre_riesgo) / desv_std_port

cat("RETORNO ESPERADO DEL PORTAFOLIO:", round(retorno_port * 100, 2), "%\n")
## RETORNO ESPERADO DEL PORTAFOLIO: 13.74 %
cat("DESVIACIÓN ESTÁNDAR DEL PORTAFOLIO:", round(desv_std_port * 100, 2), "%\n")
## DESVIACIÓN ESTÁNDAR DEL PORTAFOLIO: 19.86 %
cat("SHARPE RATIO DEL PORTAFOLIO:", round(sharpe_ratio, 4), "\n\n")
## SHARPE RATIO DEL PORTAFOLIO: 0.4894
cat("Interpretación del Sharpe Ratio:\n")
## Interpretación del Sharpe Ratio:
if (sharpe_ratio > 1) {
  cat("✓ Excelente - El portafolio ofrece muy buen retorno ajustado por riesgo\n")
} else if (sharpe_ratio > 0.5) {
  cat("✓ Bueno - El portafolio ofrece retorno razonable por unidad de riesgo\n")
} else {
  cat("⚠ Moderado - El retorno ajustado por riesgo es limitado\n")
}
## ⚠ Moderado - El retorno ajustado por riesgo es limitado
# 1.4 PESOS ÓPTIMOS Y ASIGNACIÓN DE CAPITAL

capital_por_accion <- pesos_optimos * capital_inicial
acciones_compradas <- capital_por_accion / precio_actual

asignacion <- data.frame(
  Ticker = tickers,
  Peso_Óptimo = paste0(round(pesos_optimos * 100, 2), "%"),
  Capital_Asignado = dollar(capital_por_accion),
  Precio_Acción = dollar(precio_actual),
  Acciones = round(acciones_compradas, 0)
)

print(kable(asignacion, caption = "Asignación Óptima de Capital"))
## 
## 
## Table: Asignación Óptima de Capital
## 
## |     |Ticker |Peso_Óptimo |Capital_Asignado |Precio_Acción | Acciones|
## |:----|:------|:-----------|:----------------|:-------------|--------:|
## |WMT  |WMT    |69.94%      |$6,994,295       |$97.36        |    71838|
## |ROST |ROST   |20.67%      |$2,066,781       |$138.11       |    14965|
## |DLTR |DLTR   |9.39%       |$938,924         |$114.15       |     8225|
# PARTE 2: ÓPTIMO DE CONTRATOS DE FUTUROS

# 2.1 CÁLCULO DEL VAR AL 1% Y 5%

# Retornos diarios del portafolio
retornos_port_diarios <- as.vector(retornos_acciones %*% pesos_optimos)

# VaR paramétrico
media_diaria <- mean(retornos_port_diarios)
desv_std_diaria <- sd(retornos_port_diarios)

z_1 <- qnorm(0.01)
z_5 <- qnorm(0.05)

var_1_porcentaje <- media_diaria + z_1 * desv_std_diaria
var_5_porcentaje <- media_diaria + z_5 * desv_std_diaria

var_1_dolares <- capital_inicial * var_1_porcentaje
var_5_dolares <- capital_inicial * var_5_porcentaje

# VaR histórico
var_hist_1 <- quantile(retornos_port_diarios, 0.01)
var_hist_5 <- quantile(retornos_port_diarios, 0.05)

var_hist_1_dolares <- capital_inicial * var_hist_1
var_hist_5_dolares <- capital_inicial * var_hist_5

cat("VaR PARAMÉTRICO (Distribución Normal):\n")
## VaR PARAMÉTRICO (Distribución Normal):
cat("─────────────────────────────────────\n")
## ─────────────────────────────────────
cat("VaR al 1% (diario):", dollar(var_1_dolares), "│", 
    round(var_1_porcentaje * 100, 2), "%\n")
## VaR al 1% (diario): -$285,576 │ -2.86 %
cat("VaR al 5% (diario):", dollar(var_5_dolares), "│", 
    round(var_5_porcentaje * 100, 2), "%\n\n")
## VaR al 5% (diario): -$200,320 │ -2 %
cat("VaR HISTÓRICO:\n")
## VaR HISTÓRICO:
cat("──────────────\n")
## ──────────────
cat("VaR al 1% (diario):", dollar(var_hist_1_dolares), "│", 
    round(var_hist_1 * 100, 2), "%\n")
## VaR al 1% (diario): -$319,109 │ -3.19 %
cat("VaR al 5% (diario):", dollar(var_hist_5_dolares), "│", 
    round(var_hist_5 * 100, 2), "%\n\n")
## VaR al 5% (diario): -$180,893 │ -1.81 %
cat("INTERPRETACIÓN DE ESCENARIOS:\n")
## INTERPRETACIÓN DE ESCENARIOS:
cat("─────────────────────────────\n")
## ─────────────────────────────
cat("• VaR 1%: Con 99% de confianza, la pérdida máxima diaria NO superará", 
    dollar(abs(var_1_dolares)), "\n")
## • VaR 1%: Con 99% de confianza, la pérdida máxima diaria NO superará $285,576
cat("         En 1 de cada 100 días, las pérdidas podrían exceder este monto.\n")
##          En 1 de cada 100 días, las pérdidas podrían exceder este monto.
cat("         Este es el VALOR DE CUBRIMIENTO para escenarios extremos.\n\n")
##          Este es el VALOR DE CUBRIMIENTO para escenarios extremos.
cat("• VaR 5%: Con 95% de confianza, la pérdida máxima diaria NO superará", 
    dollar(abs(var_5_dolares)), "\n")
## • VaR 5%: Con 95% de confianza, la pérdida máxima diaria NO superará $200,320
cat("         En 1 de cada 20 días, las pérdidas podrían exceder este monto.\n")
##          En 1 de cada 20 días, las pérdidas podrían exceder este monto.
cat("         Este es el VALOR DE CUBRIMIENTO para escenarios normales adversos.\n\n")
##          Este es el VALOR DE CUBRIMIENTO para escenarios normales adversos.
# 2.2 CÁLCULO DE BETAS (CAPM)

# Beta de cada acción
betas <- numeric(3)
r_squared <- numeric(3)
for (i in 1:3) {
  modelo_capm <- lm(retornos_acciones[, i] ~ retornos_indice)
  betas[i] <- coef(modelo_capm)[2]
  r_squared[i] <- summary(modelo_capm)$r.squared
}
names(betas) <- tickers

# Beta del portafolio
beta_portafolio <- sum(pesos_optimos * betas)

cat("BETAS INDIVIDUALES (vs S&P 500):\n")
## BETAS INDIVIDUALES (vs S&P 500):
cat("────────────────────────────────\n")
## ────────────────────────────────
for (i in 1:3) {
  cat(sprintf("%-6s β = %6.4f (R² = %.3f)", tickers[i], betas[i], r_squared[i]))
  if (betas[i] > 1) {
    cat("  → Más volátil que el mercado\n")
  } else if (betas[i] < 1) {
    cat("  → Menos volátil que el mercado\n")
  } else {
    cat("  → Igual volatilidad que el mercado\n")
  }
}
## WMT    β = 0.5181 (R² = 0.194)  → Menos volátil que el mercado
## ROST   β = 1.0267 (R² = 0.347)  → Más volátil que el mercado
## DLTR   β = 0.7351 (R² = 0.138)  → Menos volátil que el mercado
cat("\n\nBETA DEL PORTAFOLIO: β =", round(beta_portafolio, 4), "\n")
## 
## 
## BETA DEL PORTAFOLIO: β = 0.6436
cat("Cálculo: β_p = ", paste0(round(pesos_optimos, 3), "×", round(betas, 3), collapse = " + "), 
    " = ", round(beta_portafolio, 4), "\n")
## Cálculo: β_p =  0.699×0.518 + 0.207×1.027 + 0.094×0.735  =  0.6436
if (beta_portafolio > 1) {
  cat("\nInterpretación: El portafolio es MÁS VOLÁTIL que el S&P 500\n")
  cat("Por cada 1% que se mueva el mercado, el portafolio se moverá aproximadamente", 
      round(beta_portafolio, 2), "%\n")
} else {
  cat("\nInterpretación: El portafolio es MENOS VOLÁTIL que el S&P 500\n")
  cat("Por cada 1% que se mueva el mercado, el portafolio se moverá aproximadamente", 
      round(beta_portafolio, 2), "%\n")
}
## 
## Interpretación: El portafolio es MENOS VOLÁTIL que el S&P 500
## Por cada 1% que se mueva el mercado, el portafolio se moverá aproximadamente 0.64 %
# 2.3 NÚMERO ÓPTIMO DE CONTRATOS

# Parámetros del contrato futuro E-mini S&P 500
valor_sp500 <- as.numeric(tail(precios[, "SP500"], 1))
multiplicador <- 50  # E-mini S&P 500
valor_contrato <- valor_sp500 * multiplicador
garantia_inicial <- 13200  # Aproximado para E-mini

# Método 1: Basado en beta
contratos_beta <- (beta_portafolio * capital_inicial) / valor_contrato

# Método 2: Basado en VaR 1%
contratos_var <- abs(var_1_dolares) / valor_contrato

cat("PARÁMETROS DEL CONTRATO E-mini S&P 500:\n")
## PARÁMETROS DEL CONTRATO E-mini S&P 500:
cat("───────────────────────────────────────\n")
## ───────────────────────────────────────
cat("Nivel del S&P 500:", round(valor_sp500, 2), "\n")
## Nivel del S&P 500: 6362.9
cat("Multiplicador:", multiplicador, "\n")
## Multiplicador: 50
cat("Valor por contrato:", dollar(valor_contrato), "\n")
## Valor por contrato: $318,145
cat("Garantía inicial (aprox):", dollar(garantia_inicial), "\n\n")
## Garantía inicial (aprox): $13,200
cat("MÉTODO 1 - Basado en BETA:\n")
## MÉTODO 1 - Basado en BETA:
cat("──────────────────────────\n")
## ──────────────────────────
cat("Fórmula: N = (β × Valor_Portafolio) / Valor_Contrato\n")
## Fórmula: N = (β × Valor_Portafolio) / Valor_Contrato
cat("N = (", round(beta_portafolio, 4), "×", dollar(capital_inicial), ") /", 
    dollar(valor_contrato), "\n")
## N = ( 0.6436 × $10,000,000 ) / $318,145
cat("N =", round(contratos_beta, 2), "contratos\n")
## N = 20.23 contratos
cat("Redondeado:", ceiling(contratos_beta), "contratos\n\n")
## Redondeado: 21 contratos
cat("MÉTODO 2 - Basado en VaR al 1%:\n")
## MÉTODO 2 - Basado en VaR al 1%:
cat("───────────────────────────────\n")
## ───────────────────────────────
cat("Fórmula: N = |VaR| / Valor_Contrato\n")
## Fórmula: N = |VaR| / Valor_Contrato
cat("N =", dollar(abs(var_1_dolares)), "/", dollar(valor_contrato), "\n")
## N = $285,576 / $318,145
cat("N =", round(contratos_var, 2), "contratos\n")
## N = 0.9 contratos
cat("Redondeado:", ceiling(contratos_var), "contratos\n\n")
## Redondeado: 1 contratos
num_contratos <- ceiling(contratos_beta)
garantia_total <- num_contratos * garantia_inicial

cat("DECISIÓN FINAL: Se utilizarán", num_contratos, "contratos (método beta)\n")
## DECISIÓN FINAL: Se utilizarán 21 contratos (método beta)
cat("Garantía total requerida:", dollar(garantia_total), "\n")
## Garantía total requerida: $277,200
cat("Valor nominal cubierto:", dollar(num_contratos * valor_contrato), "\n")
## Valor nominal cubierto: $6,681,045
cat("Ratio de cobertura:", round((num_contratos * valor_contrato) / capital_inicial * 100, 1), "%\n")
## Ratio de cobertura: 66.8 %
# ============================================================================
# 2.4 MARGIN CALL Y ANÁLISIS DE RENTABILIDAD TRIMESTRAL

# Simular 4 trimestres
set.seed(123)
trimestres <- 4
dias_por_trimestre <- 63  # ~252/4

# Usar datos históricos reales del último año para simulación
if (length(retornos_port_diarios) >= dias_por_trimestre * trimestres) {
  retornos_recientes <- tail(retornos_port_diarios, dias_por_trimestre * trimestres)
  retornos_sp_recientes <- tail(as.vector(retornos_indice), dias_por_trimestre * trimestres)
} else {
  # Si no hay suficientes datos, simular
  retornos_recientes <- rnorm(dias_por_trimestre * trimestres, 
                               mean = mean(retornos_port_diarios), 
                               sd = sd(retornos_port_diarios))
  retornos_sp_recientes <- rnorm(dias_por_trimestre * trimestres,
                                  mean = mean(retornos_indice),
                                  sd = sd(retornos_indice))
}

retornos_trimestrales <- numeric(trimestres)
mov_sp500_trimestral <- numeric(trimestres)
pnl_futuros_corto <- numeric(trimestres)
pnl_futuros_largo <- numeric(trimestres)
margin_calls <- numeric(trimestres)

for (t in 1:trimestres) {
  inicio <- (t - 1) * dias_por_trimestre + 1
  fin <- t * dias_por_trimestre
  
  # Retorno del portafolio
  retornos_trimestrales[t] <- sum(retornos_recientes[inicio:fin])
  
  # Movimiento del S&P 500
  mov_sp500_trimestral[t] <- sum(retornos_sp_recientes[inicio:fin])
  
  # P&L de futuros CORTO (cobertura típica)
  pnl_futuros_corto[t] <- -mov_sp500_trimestral[t] * num_contratos * valor_contrato
  
  # P&L de futuros LARGO (especulación)
  pnl_futuros_largo[t] <- mov_sp500_trimestral[t] * num_contratos * valor_contrato
  
  # Margin call (si pérdida > 50% de garantía en posición corta)
  retornos_diarios_trim <- retornos_sp_recientes[inicio:fin]
  peor_dia <- max(retornos_diarios_trim)  # Peor para posición corta
  perdida_peor_dia <- peor_dia * num_contratos * valor_contrato
  
  if (perdida_peor_dia > garantia_total * 0.5) {
    margin_calls[t] <- perdida_peor_dia - garantia_total * 0.5
  } else {
    margin_calls[t] <- 0
  }
}

cat("ANÁLISIS TRIMESTRAL DE FUTUROS (Posición CORTA - Cobertura):\n")
## ANÁLISIS TRIMESTRAL DE FUTUROS (Posición CORTA - Cobertura):
cat("════════════════════════════════════════════════════════════\n\n")
## ════════════════════════════════════════════════════════════
pnl_portafolio <- retornos_trimestrales * capital_inicial
pnl_total_corto <- pnl_portafolio + pnl_futuros_corto

tabla_trimestral <- data.frame(
  Trim = paste0("Q", 1:trimestres),
  Ret_Port = paste0(round(retornos_trimestrales * 100, 2), "%"),
  PnL_Port = dollar(pnl_portafolio),
  Mov_SP500 = paste0(round(mov_sp500_trimestral * 100, 2), "%"),
  PnL_Futuros = dollar(pnl_futuros_corto),
  Margin_Call = dollar(margin_calls),
  PnL_Total = dollar(pnl_total_corto)
)

print(kable(tabla_trimestral))
## 
## 
## |Trim |Ret_Port |PnL_Port   |Mov_SP500 |PnL_Futuros |Margin_Call |PnL_Total |
## |:----|:--------|:----------|:---------|:-----------|:-----------|:---------|
## |Q1   |8.79%    |$879,158   |6.23%     |-$416,045   |$13,602     |$463,112  |
## |Q2   |12.84%   |$1,284,110 |4.34%     |-$290,112   |$28,301     |$993,998  |
## |Q3   |-0.95%   |-$95,227   |-8.72%    |$582,803    |$468,673    |$487,576  |
## |Q4   |4.24%    |$424,109   |13.47%    |-$900,183   |$75,461     |-$476,074 |
cat("\n\nRESUMEN DE 4 TRIMESTRES:\n")
## 
## 
## RESUMEN DE 4 TRIMESTRES:
cat("════════════════════════\n")
## ════════════════════════
cat("Total P&L Portafolio sin cobertura:", dollar(sum(pnl_portafolio)), 
    sprintf("(%.2f%%)", sum(retornos_trimestrales) * 100), "\n")
## Total P&L Portafolio sin cobertura: $2,492,150 (24.92%)
cat("Total P&L Futuros (corto):", dollar(sum(pnl_futuros_corto)), "\n")
## Total P&L Futuros (corto): -$1,023,538
cat("Total P&L CON cobertura:", dollar(sum(pnl_total_corto)), "\n")
## Total P&L CON cobertura: $1,468,612
cat("Total Margin Calls:", dollar(sum(margin_calls)), "\n")
## Total Margin Calls: $586,036
cat("Costo roll-over estimado (0.15% trimestral):", 
    dollar(num_contratos * valor_contrato * 0.0015 * 4), "\n\n")
## Costo roll-over estimado (0.15% trimestral): $40,086.27
cat("EFECTIVIDAD DE LA COBERTURA:\n")
## EFECTIVIDAD DE LA COBERTURA:
cat("────────────────────────────\n")
## ────────────────────────────
reduccion_volatilidad <- sd(pnl_total_corto) / sd(pnl_portafolio)
cat("Reducción de volatilidad:", round((1 - reduccion_volatilidad) * 100, 1), "%\n")
## Reducción de volatilidad: -3.2 %
cat("Correlación Port-Futuros:", round(cor(pnl_portafolio, pnl_futuros_corto), 3), "\n\n")
## Correlación Port-Futuros: -0.489
cat("\n\nANÁLISIS COMPARATIVO: LARGO vs CORTO\n")
## 
## 
## ANÁLISIS COMPARATIVO: LARGO vs CORTO
cat("═════════════════════════════════════\n\n")
## ═════════════════════════════════════
pnl_total_largo <- pnl_portafolio + pnl_futuros_largo

tabla_comparativa <- data.frame(
  Trimestre = paste0("Q", 1:trimestres),
  Solo_Portafolio = dollar(pnl_portafolio),
  Con_Cobertura_Corta = dollar(pnl_total_corto),
  Con_Posicion_Larga = dollar(pnl_total_largo)
)

print(kable(tabla_comparativa))
## 
## 
## |Trimestre |Solo_Portafolio |Con_Cobertura_Corta |Con_Posicion_Larga |
## |:---------|:---------------|:-------------------|:------------------|
## |Q1        |$879,158        |$463,112            |$1,295,203         |
## |Q2        |$1,284,110      |$993,998            |$1,574,222         |
## |Q3        |-$95,227        |$487,576            |-$678,029          |
## |Q4        |$424,109        |-$476,074           |$1,324,292         |
cat("\n\nRESULTADOS FINALES:\n")
## 
## 
## RESULTADOS FINALES:
cat("───────────────────\n")
## ───────────────────
cat("1. Solo Portafolio:", dollar(sum(pnl_portafolio)), "\n")
## 1. Solo Portafolio: $2,492,150
cat("2. Portafolio + Cobertura (CORTO):", dollar(sum(pnl_total_corto)), "\n")
## 2. Portafolio + Cobertura (CORTO): $1,468,612
cat("3. Portafolio + Especulación (LARGO):", dollar(sum(pnl_total_largo)), "\n\n")
## 3. Portafolio + Especulación (LARGO): $3,515,688
cat("ANÁLISIS DE ESTRATEGIAS:\n")
## ANÁLISIS DE ESTRATEGIAS:
cat("════════════════════════\n\n")
## ════════════════════════
cat("ESTRATEGIA 1 - TODO EN CORTO (Full Hedge):\n")
## ESTRATEGIA 1 - TODO EN CORTO (Full Hedge):
cat("───────────────────────────────────────────\n")
## ───────────────────────────────────────────
cat("• Objetivo: Protección total contra caídas del mercado\n")
## • Objetivo: Protección total contra caídas del mercado
cat("• Resultado observado:", dollar(sum(pnl_futuros_corto)), "en futuros\n")
## • Resultado observado: -$1,023,538 en futuros
cat("• Ventaja: Minimiza pérdidas cuando el mercado cae\n")
## • Ventaja: Minimiza pérdidas cuando el mercado cae
cat("• Desventaja: Limita ganancias cuando el mercado sube\n")
## • Desventaja: Limita ganancias cuando el mercado sube
cat("• Beta efectivo: ~0 (neutral al mercado)\n")
## • Beta efectivo: ~0 (neutral al mercado)
if (sum(mov_sp500_trimestral) < 0) {
  cat("• ✓ En este período PROTEGIÓ contra caídas del mercado\n")
} else {
  cat("• ✗ En este período LIMITÓ las ganancias del mercado alcista\n")
}
## • ✗ En este período LIMITÓ las ganancias del mercado alcista
cat("\n")
cat("ESTRATEGIA 2 - TODO EN LARGO (Especulación):\n")
## ESTRATEGIA 2 - TODO EN LARGO (Especulación):
cat("─────────────────────────────────────────────\n")
## ─────────────────────────────────────────────
cat("• Objetivo: Amplificar ganancias del mercado alcista\n")
## • Objetivo: Amplificar ganancias del mercado alcista
cat("• Resultado observado:", dollar(sum(pnl_total_largo)), "total\n")
## • Resultado observado: $3,515,688 total
cat("• Ventaja: Duplica exposición si mercado sube\n")
## • Ventaja: Duplica exposición si mercado sube
cat("• Desventaja: Duplica pérdidas si mercado cae\n")
## • Desventaja: Duplica pérdidas si mercado cae
cat("• Beta efectivo: ~", round(beta_portafolio * 2, 2), "(doble exposición)\n")
## • Beta efectivo: ~ 1.29 (doble exposición)
cat("• ⚠ ALTO RIESGO - No recomendado como cobertura\n")
## • ⚠ ALTO RIESGO - No recomendado como cobertura
if (sum(mov_sp500_trimestral) > 0) {
  cat("• ✓ En este período AMPLIFICÓ las ganancias\n")
} else {
  cat("• ✗ En este período AMPLIFICÓ las pérdidas\n")
}
## • ✓ En este período AMPLIFICÓ las ganancias
cat("\n")
cat("ESTRATEGIA RECOMENDADA - ROLL-OVER TRIMESTRAL:\n")
## ESTRATEGIA RECOMENDADA - ROLL-OVER TRIMESTRAL:
cat("───────────────────────────────────────────────\n")
## ───────────────────────────────────────────────
cat("• Rebalancear posición cada trimestre según β actual\n")
## • Rebalancear posición cada trimestre según β actual
cat("• Costos estimados:\n")
## • Costos estimados:
cat("  - Comisión por contrato: ~$2.50\n")
##   - Comisión por contrato: ~$2.50
cat("  - Spread bid-ask: ~0.25 puntos ($12.50 por contrato)\n")
##   - Spread bid-ask: ~0.25 puntos ($12.50 por contrato)
cat("  - Costo total por roll-over:", dollar((2.50 + 12.50) * num_contratos), "\n")
##   - Costo total por roll-over: $315
cat("  - Costo anual (4 roll-overs):", dollar((2.50 + 12.50) * num_contratos * 4), "\n")
##   - Costo anual (4 roll-overs): $1,260
cat("• Ajustar número de contratos si β cambia >5%\n")
## • Ajustar número de contratos si β cambia >5%
cat("• Mantener cobertura dinámica, no estática\n\n")
## • Mantener cobertura dinámica, no estática
# 2.5 VALOR ESPERADO DE LA COBERTURA TRIMESTRAL

# Valor esperado del portafolio sin cobertura
retorno_trimestral_esperado <- retorno_port / 4
valor_esperado_sin_cobertura <- capital_inicial * (1 + retorno_trimestral_esperado)

# Valor esperado con cobertura perfecta
retorno_libre_riesgo_trimestral <- tasa_libre_riesgo / 4
valor_esperado_con_cobertura <- capital_inicial * (1 + retorno_libre_riesgo_trimestral)

# Costo de la cobertura
costo_cobertura <- valor_esperado_sin_cobertura - valor_esperado_con_cobertura
costo_cobertura_porcentaje <- (costo_cobertura / capital_inicial) * 100

# Valor esperado del portafolio cubierto (ajustado por beta)
retorno_alpha <- retorno_port - beta_portafolio * (colMeans(retornos_indice) * dias_comerciales)
retorno_esperado_cubierto_trimestral <- (retorno_alpha + tasa_libre_riesgo) / 4
valor_esperado_cubierto_real <- capital_inicial * (1 + retorno_esperado_cubierto_trimestral)

cat("VALOR ESPERADO TRIMESTRAL:\n")
## VALOR ESPERADO TRIMESTRAL:
cat("══════════════════════════\n\n")
## ══════════════════════════
cat("1. SIN COBERTURA:\n")
## 1. SIN COBERTURA:
cat("   Valor inicial:", dollar(capital_inicial), "\n")
##    Valor inicial: $10,000,000
cat("   Retorno esperado trimestral:", round(retorno_trimestral_esperado * 100, 2), "%\n")
##    Retorno esperado trimestral: 3.43 %
cat("   Valor esperado:", dollar(valor_esperado_sin_cobertura), "\n")
##    Valor esperado: $10,343,481
cat("   Ganancia esperada:", dollar(valor_esperado_sin_cobertura - capital_inicial), "\n\n")
##    Ganancia esperada: $343,481
cat("2. CON COBERTURA COMPLETA (β neutralizado):\n")
## 2. CON COBERTURA COMPLETA (β neutralizado):
cat("   Retorno esperado trimestral:", round(retorno_libre_riesgo_trimestral * 100, 2), 
    "% (tasa libre de riesgo)\n")
##    Retorno esperado trimestral: 1 % (tasa libre de riesgo)
cat("   Valor esperado:", dollar(valor_esperado_con_cobertura), "\n")
##    Valor esperado: $10,100,500
cat("   Ganancia esperada:", dollar(valor_esperado_con_cobertura - capital_inicial), "\n\n")
##    Ganancia esperada: $100,500
cat("3. CON COBERTURA AJUSTADA (considerando alpha):\n")
## 3. CON COBERTURA AJUSTADA (considerando alpha):
cat("   Retorno esperado trimestral:", round(retorno_esperado_cubierto_trimestral * 100, 2), "%\n")
##    Retorno esperado trimestral: 2.65 %
cat("   Valor esperado:", dollar(valor_esperado_cubierto_real), "\n")
##    Valor esperado: $10,265,416
cat("   Ganancia esperada:", dollar(valor_esperado_cubierto_real - capital_inicial), "\n\n")
##    Ganancia esperada: $265,416
cat("COSTO DE LA COBERTURA:\n")
## COSTO DE LA COBERTURA:
cat("──────────────────────\n")
## ──────────────────────
cat("Costo trimestral:", dollar(costo_cobertura), 
    sprintf("(%.2f%% del capital)", costo_cobertura_porcentaje), "\n")
## Costo trimestral: $242,981 (2.43% del capital)
cat("Costo anual estimado:", dollar(costo_cobertura * 4), 
    sprintf("(%.2f%%)", costo_cobertura_porcentaje * 4), "\n\n")
## Costo anual estimado: $971,925 (9.72%)
cat("ANÁLISIS DEL VALOR ESPERADO:\n")
## ANÁLISIS DEL VALOR ESPERADO:
cat("════════════════════════════\n")
## ════════════════════════════
cat("• La cobertura REDUCE el retorno esperado en", 
    round(costo_cobertura_porcentaje, 2), "% trimestral\n")
## • La cobertura REDUCE el retorno esperado en 2.43 % trimestral
cat("• A cambio, PROTEGE contra pérdidas extremas (VaR 1% =", 
    dollar(abs(var_1_dolares)), ")\n")
## • A cambio, PROTEGE contra pérdidas extremas (VaR 1% = $285,576 )
cat("• Tasa libre de riesgo actual (^TNX 3-5Y):", 
    paste0(round(tasa_libre_riesgo * 100, 2), "%"), "\n\n")
## • Tasa libre de riesgo actual (^TNX 3-5Y): 4.02%
cat("JUSTIFICACIÓN DE LA COBERTURA:\n")
## JUSTIFICACIÓN DE LA COBERTURA:
cat("───────────────────────────────\n")
## ───────────────────────────────
ratio_beneficio_costo <- abs(var_1_dolares) / (costo_cobertura * 4)
cat("• Ratio Beneficio/Costo anual:", round(ratio_beneficio_costo, 2), "\n")
## • Ratio Beneficio/Costo anual: 0.29
cat("• Por cada $1 gastado en cobertura, se protegen $", 
    round(ratio_beneficio_costo, 0), "de pérdidas potenciales\n")
## • Por cada $1 gastado en cobertura, se protegen $ 0 de pérdidas potenciales
if (ratio_beneficio_costo > 10) {
  cat("• ✓ RECOMENDACIÓN: La cobertura es ALTAMENTE JUSTIFICADA\n")
} else if (ratio_beneficio_costo > 5) {
  cat("• ✓ RECOMENDACIÓN: La cobertura es JUSTIFICADA\n")
} else {
  cat("• ⚠ RECOMENDACIÓN: Evaluar alternativas de cobertura\n")
}
## • ⚠ RECOMENDACIÓN: Evaluar alternativas de cobertura
cat("\n• La cobertura es óptima cuando:\n")
## 
## • La cobertura es óptima cuando:
cat("  1. Se espera alta volatilidad en el mercado (σ actual:", 
    round(desv_std_diaria * sqrt(252) * 100, 1), "%)\n")
##   1. Se espera alta volatilidad en el mercado (σ actual: 19.9 %)
cat("  2. El VaR potencial supera significativamente el costo\n")
##   2. El VaR potencial supera significativamente el costo
cat("  3. El horizonte de inversión es largo (4 años en este caso)\n")
##   3. El horizonte de inversión es largo (4 años en este caso)
cat("  4. Se busca protección contra cisnes negros\n\n")
##   4. Se busca protección contra cisnes negros
# 2.6 EXPLORACIÓN DE BETAS ALTERNATIVAS (0.8 y 1.5)

betas_alternativos <- c(0.8, 1.5)
resultados_sensibilidad <- list()

for (idx in 1:length(betas_alternativos)) {
  beta_alt <- betas_alternativos[idx]
  
  # Calcular contratos para beta alternativo
  contratos_alt <- ceiling((beta_alt * capital_inicial) / valor_contrato)
  garantia_alt <- contratos_alt * garantia_inicial
  
  # Simular P&L con beta alternativo
  pnl_futuros_alt <- -mov_sp500_trimestral * contratos_alt * valor_contrato
  pnl_total_alt <- pnl_portafolio + pnl_futuros_alt
  
  # Calcular estadísticas
  retorno_total_alt <- sum(pnl_total_alt)
  volatilidad_alt <- sd(pnl_total_alt)
  sharpe_alt <- mean(pnl_total_alt) / sd(pnl_total_alt) * sqrt(4)
  
  resultados_sensibilidad[[idx]] <- list(
    beta = beta_alt,
    contratos = contratos_alt,
    garantia = garantia_alt,
    pnl_futuros = pnl_futuros_alt,
    pnl_total = pnl_total_alt,
    retorno_total = retorno_total_alt,
    volatilidad = volatilidad_alt,
    sharpe = sharpe_alt
  )
  
  cat("\n", rep("═", 70), "\n")
  cat("ESCENARIO: β =", beta_alt, "\n")
  cat(rep("═", 70), "\n\n")
  
  cat("CONFIGURACIÓN:\n")
  cat("──────────────\n")
  cat("Número de contratos:", contratos_alt, "\n")
  cat("  • Diferencia vs β original (", round(beta_portafolio, 2), "):", 
      sprintf("%+d contratos", contratos_alt - num_contratos), "\n")
  cat("  • Cambio porcentual:", 
      sprintf("%+.1f%%", (contratos_alt / num_contratos - 1) * 100), "\n")
  cat("Garantía requerida:", dollar(garantia_alt), "\n")
  cat("  • Diferencia:", sprintf("%s", dollar(garantia_alt - garantia_total)), "\n")
  cat("Valor nominal cubierto:", dollar(contratos_alt * valor_contrato), "\n")
  cat("Ratio de cobertura:", 
      round((contratos_alt * valor_contrato) / capital_inicial * 100, 1), "%\n\n")
  
  cat("RESULTADOS TRIMESTRALES (4 trimestres):\n")
  cat("═══════════════════════════════════════\n\n")
  
  tabla_alt <- data.frame(
    Trim = paste0("Q", 1:trimestres),
    PnL_Port = dollar(pnl_portafolio),
    PnL_Fut = dollar(pnl_futuros_alt),
    PnL_Total = dollar(pnl_total_alt)
  )
  print(kable(tabla_alt))
  
  cat("\n\nRESUMEN DE PERFORMANCE:\n")
  cat("───────────────────────\n")
  cat("P&L Total en futuros:", dollar(sum(pnl_futuros_alt)), "\n")
  cat("P&L Total combinado:", dollar(retorno_total_alt), "\n")
  cat("Volatilidad del portafolio cubierto:", dollar(volatilidad_alt), "\n")
  cat("Sharpe Ratio anualizado:", round(sharpe_alt, 3), "\n\n")
  
  cat("COMPARACIÓN CON β ORIGINAL:\n")
  cat("───────────────────────────\n")
  diferencia_pnl <- retorno_total_alt - sum(pnl_total_corto)
  diferencia_vol <- volatilidad_alt - sd(pnl_total_corto)
  
  cat("Diferencia en P&L:", dollar(diferencia_pnl))
  if (diferencia_pnl > 0) {
    cat(" (MEJOR)\n")
  } else {
    cat(" (PEOR)\n")
  }
  
  cat("Diferencia en volatilidad:", dollar(diferencia_vol))
  if (diferencia_vol < 0) {
    cat(" (Menos volátil - MEJOR)\n")
  } else {
    cat(" (Más volátil - PEOR)\n")
  }
  
  cat("\nEficiencia de cobertura:", 
      round((1 - volatilidad_alt / sd(pnl_portafolio)) * 100, 1), "%\n\n")
  
  cat("INTERPRETACIÓN:\n")
  cat("───────────────\n")
  
  if (beta_alt < beta_portafolio) {
    cat("✓ SUB-COBERTURA (β =", beta_alt, "< β_portafolio =", 
        round(beta_portafolio, 2), ")\n\n")
    cat("Características:\n")
    cat("  • Protección PARCIAL contra movimientos del mercado\n")
    cat("  • Mayor exposición al riesgo de mercado\n")
    cat("  • Menor costo de cobertura\n")
    cat("  • Participa más en mercados alcistas\n")
    cat("  • Sufre más en mercados bajistas\n\n")
    cat("Cuándo usar:\n")
    cat("  • Perspectiva moderadamente alcista del mercado\n")
    cat("  • Busca balance entre protección y crecimiento\n")
    cat("  • Presupuesto limitado para garantías\n")
    cat("  • Mayor tolerancia al riesgo\n")
    
  } else if (beta_alt > beta_portafolio) {
    cat("✓ SOBRE-COBERTURA (β =", beta_alt, "> β_portafolio =", 
        round(beta_portafolio, 2), ")\n\n")
    cat("Características:\n")
    cat("  • Protección EXCESIVA - invierte exposición al mercado\n")
    cat("  • Gana cuando el mercado cae (posición neta corta)\n")
    cat("  • Pierde cuando el mercado sube\n")
    cat("  • Mayor costo de cobertura (más contratos)\n")
    cat("  • Estrategia de apuesta bajista\n\n")
    cat("Cuándo usar:\n")
    cat("  • Perspectiva BAJISTA del mercado\n")
    cat("  • Especulación direccional a la baja\n")
    cat("  • Expectativa de corrección significativa\n")
    cat("  • NO recomendado como cobertura tradicional\n")
    cat("  • ⚠ ALTO RIESGO - esto es ESPECULACIÓN, no cobertura\n")
  }
  
  cat("\n")
}
## 
##  ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ 
## ESCENARIO: β = 0.8 
## ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ 
## 
## CONFIGURACIÓN:
## ──────────────
## Número de contratos: 26 
##   • Diferencia vs β original ( 0.64 ): +5 contratos 
##   • Cambio porcentual: +23.8% 
## Garantía requerida: $343,200 
##   • Diferencia: $66,000 
## Valor nominal cubierto: $8,271,770 
## Ratio de cobertura: 82.7 %
## 
## RESULTADOS TRIMESTRALES (4 trimestres):
## ═══════════════════════════════════════
## 
## 
## 
## |Trim |PnL_Port   |PnL_Fut     |PnL_Total |
## |:----|:----------|:-----------|:---------|
## |Q1   |$879,158   |-$515,104   |$364,054  |
## |Q2   |$1,284,110 |-$359,187   |$924,923  |
## |Q3   |-$95,227   |$721,565    |$626,338  |
## |Q4   |$424,109   |-$1,114,512 |-$690,403 |
## 
## 
## RESUMEN DE PERFORMANCE:
## ───────────────────────
## P&L Total en futuros: -$1,267,237 
## P&L Total combinado: $1,224,913 
## Volatilidad del portafolio cubierto: $702,821 
## Sharpe Ratio anualizado: 0.871 
## 
## COMPARACIÓN CON β ORIGINAL:
## ───────────────────────────
## Diferencia en P&L: -$243,700 (PEOR)
## Diferencia en volatilidad: $89,720.76 (Más volátil - PEOR)
## 
## Eficiencia de cobertura: -18.3 %
## 
## INTERPRETACIÓN:
## ───────────────
## ✓ SOBRE-COBERTURA (β = 0.8 > β_portafolio = 0.64 )
## 
## Características:
##   • Protección EXCESIVA - invierte exposición al mercado
##   • Gana cuando el mercado cae (posición neta corta)
##   • Pierde cuando el mercado sube
##   • Mayor costo de cobertura (más contratos)
##   • Estrategia de apuesta bajista
## 
## Cuándo usar:
##   • Perspectiva BAJISTA del mercado
##   • Especulación direccional a la baja
##   • Expectativa de corrección significativa
##   • NO recomendado como cobertura tradicional
##   • ⚠ ALTO RIESGO - esto es ESPECULACIÓN, no cobertura
## 
## 
##  ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ 
## ESCENARIO: β = 1.5 
## ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ 
## 
## CONFIGURACIÓN:
## ──────────────
## Número de contratos: 48 
##   • Diferencia vs β original ( 0.64 ): +27 contratos 
##   • Cambio porcentual: +128.6% 
## Garantía requerida: $633,600 
##   • Diferencia: $356,400 
## Valor nominal cubierto: $15,270,960 
## Ratio de cobertura: 152.7 %
## 
## RESULTADOS TRIMESTRALES (4 trimestres):
## ═══════════════════════════════════════
## 
## 
## 
## |Trim |PnL_Port   |PnL_Fut     |PnL_Total   |
## |:----|:----------|:-----------|:-----------|
## |Q1   |$879,158   |-$950,961   |-$71,803    |
## |Q2   |$1,284,110 |-$663,114   |$620,996    |
## |Q3   |-$95,227   |$1,332,120  |$1,236,894  |
## |Q4   |$424,109   |-$2,057,561 |-$1,633,452 |
## 
## 
## RESUMEN DE PERFORMANCE:
## ───────────────────────
## P&L Total en futuros: -$2,339,515 
## P&L Total combinado: $152,635 
## Volatilidad del portafolio cubierto: $1,235,993 
## Sharpe Ratio anualizado: 0.062 
## 
## COMPARACIÓN CON β ORIGINAL:
## ───────────────────────────
## Diferencia en P&L: -$1,315,977 (PEOR)
## Diferencia en volatilidad: $622,893 (Más volátil - PEOR)
## 
## Eficiencia de cobertura: -108.1 %
## 
## INTERPRETACIÓN:
## ───────────────
## ✓ SOBRE-COBERTURA (β = 1.5 > β_portafolio = 0.64 )
## 
## Características:
##   • Protección EXCESIVA - invierte exposición al mercado
##   • Gana cuando el mercado cae (posición neta corta)
##   • Pierde cuando el mercado sube
##   • Mayor costo de cobertura (más contratos)
##   • Estrategia de apuesta bajista
## 
## Cuándo usar:
##   • Perspectiva BAJISTA del mercado
##   • Especulación direccional a la baja
##   • Expectativa de corrección significativa
##   • NO recomendado como cobertura tradicional
##   • ⚠ ALTO RIESGO - esto es ESPECULACIÓN, no cobertura
# Tabla comparativa final
cat("\n\n", rep("═", 70), "\n")
## 
## 
##  ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
cat("TABLA COMPARATIVA DE TODOS LOS ESCENARIOS DE BETA\n")
## TABLA COMPARATIVA DE TODOS LOS ESCENARIOS DE BETA
cat(rep("═", 70), "\n\n")
## ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═ ═
comparacion_final <- data.frame(
  Beta = c(beta_portafolio, betas_alternativos),
  Contratos = c(num_contratos, 
                resultados_sensibilidad[[1]]$contratos,
                resultados_sensibilidad[[2]]$contratos),
  Garantia = c(garantia_total,
               resultados_sensibilidad[[1]]$garantia,
               resultados_sensibilidad[[2]]$garantia),
  PnL_Total = c(sum(pnl_total_corto),
                resultados_sensibilidad[[1]]$retorno_total,
                resultados_sensibilidad[[2]]$retorno_total),
  Volatilidad = c(sd(pnl_total_corto),
                  resultados_sensibilidad[[1]]$volatilidad,
                  resultados_sensibilidad[[2]]$volatilidad),
  Sharpe = c(mean(pnl_total_corto) / sd(pnl_total_corto) * sqrt(4),
             resultados_sensibilidad[[1]]$sharpe,
             resultados_sensibilidad[[2]]$sharpe)
)

comparacion_final$Beta <- round(comparacion_final$Beta, 2)
comparacion_final$Garantia <- dollar(comparacion_final$Garantia)
comparacion_final$PnL_Total <- dollar(comparacion_final$PnL_Total)
comparacion_final$Volatilidad <- dollar(comparacion_final$Volatilidad)
comparacion_final$Sharpe <- round(comparacion_final$Sharpe, 3)

print(kable(comparacion_final, caption = "Comparación de Escenarios de Beta"))
## 
## 
## Table: Comparación de Escenarios de Beta
## 
## | Beta| Contratos|Garantia |PnL_Total  |Volatilidad | Sharpe|
## |----:|---------:|:--------|:----------|:-----------|------:|
## | 0.64|        21|$277,200 |$1,468,612 |$613,100    |  1.198|
## | 0.80|        26|$343,200 |$1,224,913 |$702,821    |  0.871|
## | 1.50|        48|$633,600 |$152,635   |$1,235,993  |  0.062|
cat("\n\nCONCLUSIONES FINALES:\n")
## 
## 
## CONCLUSIONES FINALES:
cat("═════════════════════\n\n")
## ═════════════════════
cat("1. IMPACTO EN NÚMERO DE CONTRATOS:\n")
## 1. IMPACTO EN NÚMERO DE CONTRATOS:
cat("   • β = 0.8:  ", resultados_sensibilidad[[1]]$contratos, "contratos (",
    sprintf("%+.1f%%", (resultados_sensibilidad[[1]]$contratos/num_contratos - 1) * 100), 
    "vs β original)\n")
##    • β = 0.8:   26 contratos ( +23.8% vs β original)
cat("   • β = 1.5:  ", resultados_sensibilidad[[2]]$contratos, "contratos (",
    sprintf("%+.1f%%", (resultados_sensibilidad[[2]]$contratos/num_contratos - 1) * 100),
    "vs β original)\n\n")
##    • β = 1.5:   48 contratos ( +128.6% vs β original)
cat("2. IMPACTO EN RESULTADOS:\n")
## 2. IMPACTO EN RESULTADOS:
mejor_sharpe <- which.max(c(mean(pnl_total_corto) / sd(pnl_total_corto),
                             resultados_sensibilidad[[1]]$sharpe,
                             resultados_sensibilidad[[2]]$sharpe))
betas_todos <- c(beta_portafolio, 0.8, 1.5)

cat("   • Mejor Sharpe Ratio: β =", betas_todos[mejor_sharpe], "\n")
##    • Mejor Sharpe Ratio: β = 0.8
cat("   • Menor volatilidad: β =", 
    betas_todos[which.min(c(sd(pnl_total_corto),
                            resultados_sensibilidad[[1]]$volatilidad,
                            resultados_sensibilidad[[2]]$volatilidad))], "\n")
##    • Menor volatilidad: β = 0.6435922
cat("   • Mayor P&L (este período): β =",
    betas_todos[which.max(c(sum(pnl_total_corto),
                            resultados_sensibilidad[[1]]$retorno_total,
                            resultados_sensibilidad[[2]]$retorno_total))], "\n\n")
##    • Mayor P&L (este período): β = 0.6435922
cat("3. SENSIBILIDAD DEL MODELO:\n")
## 3. SENSIBILIDAD DEL MODELO:
cat("   • Un cambio de β de", round(beta_portafolio, 2), "a 0.8 (-", 
    round((1 - 0.8/beta_portafolio) * 100, 0), "%)\n")
##    • Un cambio de β de 0.64 a 0.8 (- -24 %)
cat("     requiere", 
    abs(num_contratos - resultados_sensibilidad[[1]]$contratos), 
    "contratos MENOS\n")
##      requiere 5 contratos MENOS
cat("   • Un cambio de β de", round(beta_portafolio, 2), "a 1.5 (+",
    round((1.5/beta_portafolio - 1) * 100, 0), "%)\n")
##    • Un cambio de β de 0.64 a 1.5 (+ 133 %)
cat("     requiere",
    abs(resultados_sensibilidad[[2]]$contratos - num_contratos),
    "contratos MÁS\n\n")
##      requiere 27 contratos MÁS
cat("4. RECOMENDACIÓN ESTRATÉGICA:\n")
## 4. RECOMENDACIÓN ESTRATÉGICA:
cat("   • Para COBERTURA conservadora: β = 0.8 (sub-cobertura)\n")
##    • Para COBERTURA conservadora: β = 0.8 (sub-cobertura)
cat("   • Para COBERTURA óptima: β =", round(beta_portafolio, 2), 
    "(beta del portafolio)\n")
##    • Para COBERTURA óptima: β = 0.64 (beta del portafolio)
cat("   • Para ESPECULACIÓN bajista: β = 1.5 (sobre-cobertura)\n\n")
##    • Para ESPECULACIÓN bajista: β = 1.5 (sobre-cobertura)
cat("   ⚠ IMPORTANTE: El β óptimo depende de:\n")
##    ⚠ IMPORTANTE: El β óptimo depende de:
cat("     - Perspectiva del mercado (alcista/bajista)\n")
##      - Perspectiva del mercado (alcista/bajista)
cat("     - Tolerancia al riesgo del inversionista\n")
##      - Tolerancia al riesgo del inversionista
cat("     - Horizonte de inversión\n")
##      - Horizonte de inversión
cat("     - Costos de transacción y garantías disponibles\n\n")
##      - Costos de transacción y garantías disponibles
# RESUMEN EJECUTIVO FINAL

cat("PORTAFOLIO ÓPTIMO:\n")
## PORTAFOLIO ÓPTIMO:
cat("══════════════════\n")
## ══════════════════
cat("Capital inicial:", dollar(capital_inicial), "\n")
## Capital inicial: $10,000,000
cat("Composición:\n")
## Composición:
for (i in 1:length(tickers)) {
  cat("  •", tickers[i], ":", sprintf("%5.1f%%", pesos_optimos[i] * 100),
      "│", dollar(capital_por_accion[i]), "\n")
}
##   • WMT :  69.9% │ $6,994,295 
##   • ROST :  20.7% │ $2,066,781 
##   • DLTR :   9.4% │ $938,924
cat("\nRetorno esperado anual:", round(retorno_port * 100, 2), "%\n")
## 
## Retorno esperado anual: 13.74 %
cat("Volatilidad anual:", round(desv_std_port * 100, 2), "%\n")
## Volatilidad anual: 19.86 %
cat("Sharpe Ratio:", round(sharpe_ratio, 3), "\n")
## Sharpe Ratio: 0.489
cat("Beta del portafolio:", round(beta_portafolio, 4), "\n\n")
## Beta del portafolio: 0.6436
cat("ESTRATEGIA DE COBERTURA:\n")
## ESTRATEGIA DE COBERTURA:
cat("════════════════════════\n")
## ════════════════════════
cat("Instrumento: E-mini S&P 500 Futures\n")
## Instrumento: E-mini S&P 500 Futures
cat("Número de contratos:", num_contratos, "\n")
## Número de contratos: 21
cat("Valor por contrato:", dollar(valor_contrato), "\n")
## Valor por contrato: $318,145
cat("Garantía total:", dollar(garantia_total), "\n")
## Garantía total: $277,200
cat("Valor nominal cubierto:", dollar(num_contratos * valor_contrato), "\n\n")
## Valor nominal cubierto: $6,681,045
cat("MÉTRICAS DE RIESGO:\n")
## MÉTRICAS DE RIESGO:
cat("═══════════════════\n")
## ═══════════════════
cat("VaR diario (1%):", dollar(var_1_dolares), "\n")
## VaR diario (1%): -$285,576
cat("VaR diario (5%):", dollar(var_5_dolares), "\n")
## VaR diario (5%): -$200,320
cat("Reducción de volatilidad con cobertura:", 
    round((1 - sd(pnl_total_corto) / sd(pnl_portafolio)) * 100, 1), "%\n\n")
## Reducción de volatilidad con cobertura: -3.2 %
cat("PROYECCIÓN 4 AÑOS:\n")
## PROYECCIÓN 4 AÑOS:
cat("══════════════════\n")
## ══════════════════
cat("Valor esperado sin cobertura:", dollar(capital_inicial * (1 + retorno_port * 4)), "\n")
## Valor esperado sin cobertura: $15,495,701
cat("Costo estimado de cobertura anual:", 
    dollar(costo_cobertura * 4 + (2.50 + 12.50) * num_contratos * 4), "\n")
## Costo estimado de cobertura anual: $973,185
cat("Roll-overs requeridos: 16 (trimestrales)\n\n")
## Roll-overs requeridos: 16 (trimestrales)
cat("═══════════════════════════════════════════════════════════════════\n")
## ═══════════════════════════════════════════════════════════════════
cat("           Análisis completado exitosamente\n")
##            Análisis completado exitosamente
cat("           Fecha:", format(Sys.Date(), "%d de %B de %Y"), "\n")
##            Fecha: 27 de octubre de 2025
cat("═══════════════════════════════════════════════════════════════════\n")
## ═══════════════════════════════════════════════════════════════════