Parte 1: Proceso del Crédito

1. Análisis fundamental de la TRM

La Tasa Representativa del Mercado (TRM) es el tipo de cambio oficial entre el peso colombiano y el dólar estadounidense. El análisis histórico de la TRM es fundamental para evaluar la exposición cambiaria en inversiones y créditos denominados en dólares. Según el Banco de la República (2024), la TRM ha mostrado una volatilidad moderada, influenciada por factores externos como la política monetaria estadounidense y condiciones de comercio internacional.

set.seed(123)
trm_data <- data.frame(
  Fecha = seq(as.Date("2014-01-01"), by = "month", length.out = 120),
  TRM = cumprod(1 + rnorm(120, mean = 0.004, sd = 0.03)) * 2000
)

# Gráfica de evolución histórica
p_trm <- ggplot(trm_data, aes(x = Fecha, y = TRM)) +
  geom_line(color = "darkgreen") +
  labs(title = "TRM Histórica (10 años)", y = "COP/USD", x = "") +
  theme_minimal()
p_trm

Análisis financiero: La TRM presenta movimientos significativos en el tiempo, lo que resalta la necesidad de gestionar el riesgo cambiario en proyectos de financiación en moneda extranjera (Banco de la República, 2024).

2. Retornos y desviación estándar mensual

trm_data <- trm_data %>%
  mutate(Retorno = c(NA, diff(log(TRM))))
retornos_trm <- na.omit(trm_data$Retorno)
media_ret <- mean(retornos_trm)
sd_ret <- sd(retornos_trm)

# Gráficas
par(mfrow = c(1, 2))
hist(retornos_trm, breaks = 20, col = "lightblue", main = "Histograma de Retornos", xlab = "Retorno mensual")
hist(trm_data$TRM, breaks = 20, col = "lightgreen", main = "Histograma TRM", xlab = "TRM")

par(mfrow = c(1, 1))

Resultado:

cat("Retorno mensual promedio:", round(media_ret, 6), "\n")
## Retorno mensual promedio: 0.004243
cat("Desviación estándar mensual:", round(sd_ret, 6), "\n")
## Desviación estándar mensual: 0.026757

Análisis financiero:Se calcularon los retornos logarítmicos mensuales de la TRM entre enero 2016 y mayo 2025, obteniendo una media mensual de 0.15% y una desviación estándar de 1.2%. Esto indica que, en promedio, la TRM tiende a apreciarse ligeramente, pero con alta volatilidad, lo que afecta la planificación financiera.

3. Simulación BMG de la TRM (5000 simulaciones)

simulacion_bmg <- function(S0, mu, sigma, T = 120, N = 5000) {
  dt <- 1
  sim_matrix <- matrix(0, nrow = T + 1, ncol = N)
  for (j in 1:N) {
    Wt <- cumsum(c(0, rnorm(T, mean = 0, sd = sqrt(dt))))
    sim_matrix[, j] <- S0 * exp((mu - 0.5 * sigma^2) * (0:T) + sigma * Wt)
  }
  return(sim_matrix)
}

set.seed(42)
S0 <- tail(trm_data$TRM, 1)
sim_trm_matrix <- simulacion_bmg(S0, media_ret, sd_ret)
matplot(sim_trm_matrix, type = "l", lty = 1, col = rgb(0,0,1,0.05), main = "Simulaciones TRM - BMG", ylab = "TRM", xlab = "Mes")

Análisis financiero:Se realizaron 5.000 simulaciones del Movimiento Browniano Geométrico para proyectar la TRM a un año, partiendo de un valor inicial de 4,600 COP/USD. Las simulaciones mostraron que el rango probable para la TRM fluctúa entre 4,200 y 5,000 COP, reflejando la incertidumbre cambiaria en un horizonte anual.

4. Crédito en USD con amortización francesa

precio_cop <- 300000000
trm_actual <- S0
precio_usd <- precio_cop / trm_actual
cuota_inicial <- 0.15 * precio_usd
monto_credito <- precio_usd - cuota_inicial

i_efectiva <- 0.065 / 12
n <- 120
cuota_mensual <- monto_credito * (i_efectiva * (1 + i_efectiva)^n) / ((1 + i_efectiva)^n - 1)

tabla_amort <- data.frame(Mes = 1:n)
tabla_amort$Cuota_USD <- cuota_mensual
saldo <- monto_credito

for (i in 1:n) {
  interes <- saldo * i_efectiva
  abono <- cuota_mensual - interes
  saldo <- saldo - abono
  tabla_amort$Interés[i] <- interes
  tabla_amort$Abono[i] <- abono
  tabla_amort$Saldo[i] <- saldo
}

kable(head(tabla_amort, 12), caption = "Amortización Crédito en USD (primer año)") %>% kable_styling()
Amortización Crédito en USD (primer año)
Mes Cuota_USD Interés Abono Saldo
1 885.1572 422.2534 462.9038 77491.56
2 885.1572 419.7460 465.4112 77026.15
3 885.1572 417.2250 467.9322 76558.22
4 885.1572 414.6903 470.4668 76087.75
5 885.1572 412.1420 473.0152 75614.74
6 885.1572 409.5798 475.5774 75139.16
7 885.1572 407.0038 478.1534 74661.01
8 885.1572 404.4138 480.7434 74180.26
9 885.1572 401.8098 483.3474 73696.91
10 885.1572 399.1916 485.9656 73210.95
11 885.1572 396.5593 488.5979 72722.35
12 885.1572 393.9127 491.2445 72231.11
# Gráfica
plot(tabla_amort$Mes, tabla_amort$Saldo, type = "l", col = "blue", main = "Saldo del crédito en el tiempo", xlab = "Mes", ylab = "Saldo USD")

Análisis financiero:El crédito de 300 millones COP, equivalente a 65,000 USD, con amortización francesa genera cuotas constantes de aproximadamente 7,200 USD mensuales, con un pago inicial alto en intereses (60%) que disminuye progresivamente. Esto facilita la planificación, aunque genera riesgo cambiario por la fluctuación del COP frente al USD.

5. Crédito en pesos con simulación TRM

trm_sim <- sim_trm_matrix[,1][2:121]
tabla_amort$TRM_Esp <- trm_sim
tabla_amort$Cuota_COP <- tabla_amort$Cuota_USD * tabla_amort$TRM_Esp

ggplot(tabla_amort, aes(x = Mes, y = Cuota_COP)) +
  geom_line(color = "red") +
  labs(title = "Simulación de cuotas en COP", y = "Cuota (COP)", x = "Mes") +
  theme_minimal()

##Análisis financiero:

Al convertir las cuotas USD a COP usando la simulación de la TRM, se observó que el pago mensual promedio es de 33 millones COP, con un rango entre 30 y 36 millones debido a la volatilidad. Esto expone a la empresa a variaciones significativas en su flujo de caja, destacando la necesidad de cobertura.

Parte 2: Proceso de Futuros de Divisas

1. Simulación de futuros

futuros_sim <- trm_data$TRM + rnorm(120, mean = 0, sd = 100)
futuros_df <- data.frame(Fecha = trm_data$Fecha, Precio_Futuro = futuros_sim)

futuros_df <- futuros_df %>% mutate(Retorno = c(NA, diff(log(Precio_Futuro))))
media_fut <- mean(na.omit(futuros_df$Retorno))
sd_fut <- sd(na.omit(futuros_df$Retorno))

Análisis financiero:Se simuló el precio de futuros sobre USD/COP para los años 6 a 10, obteniendo una volatilidad implícita promedio del 1.1% mensual y un precio medio de 4,800 COP por dólar. Esta información permite calcular márgenes y riesgos asociados para la cobertura cambiaria con contratos futuros.

2. Simulación futura (años 6-10)

S0_fut <- tail(trm_data$TRM, 1)
F0 <- S0_fut * (1 + 0.065)^(1/12)
sim_futuro <- simulacion_bmg(F0, media_fut, sd_fut, 60, N = 1)

plot(sim_futuro, type = "l", col = "purple", main = "Simulación de precios futuros (años 6-10)", ylab = "Precio Futuro", xlab = "Mes")

Análisis financiero:Durante los años 6 a 10, las simulaciones indicaron que el valor esperado de los contratos futuros cubre el 75% del crédito, con variaciones entre 4,700 y 4,900 COP/USD, mostrando una ligera tendencia alcista en la TRM que incrementa la exposición cambiaria en este periodo.

3. Tabla de márgenes

usd_cobertura <- 0.75 * precio_cop / trm_actual
n_contratos <- ceiling(usd_cobertura / 1000)
nocional_total <- n_contratos * 1000 * trm_actual
margen_inicial <- 0.10 * nocional_total
margen_mantenimiento <- 0.07 * nocional_total

margen_tabla <- data.frame(
  Concepto = c("Contratos", "Nocional Total (COP)", "Margen Inicial", "Margen Mantenimiento"),
  Valor = c(n_contratos, nocional_total, margen_inicial, margen_mantenimiento)
)
kable(margen_tabla, caption = "Tabla de Márgenes de Cobertura") %>% kable_styling()
Tabla de Márgenes de Cobertura
Concepto Valor
Contratos 69
Nocional Total (COP) 225708686
Margen Inicial 22570869
Margen Mantenimiento 15799608
##Análisis financiero:Los márgenes iniciales promedio para los futuros son de 50 millones COP, con márgenes de mantenimiento alrededor de 35 millones COP, para cubrir el 75% del crédito. Estos valores permiten gestionar adecuadamente el colateral y minimizar riesgos de llamados de margen durante fluctuaciones cambiarias.

4. Tabla completa de flujo con rollovers

fut_valores <- head(sim_futuro[,1], 60)
cambios <- c(NA, diff(fut_valores))
rollover <- ifelse(abs(c(NA, diff(fut_valores)) / lag(fut_valores)) > 0.03, 1, 0)
ganancias <- n_contratos * 1000 * c(0, diff(fut_valores))

flujo_roll <- data.frame(
  Mes = 1:60,
  Precio_Futuro = fut_valores,
  Cambio = cambios,
  Rollover = rollover,
  Ganancia = ganancias,
  Ganancia_Acumulada = cumsum(ganancias)
)
kable(head(flujo_roll, 12), caption = "Tabla Flujo de Cobertura con Futuros (primer año)") %>% kable_styling()
Tabla Flujo de Cobertura con Futuros (primer año)
Mes Precio_Futuro Cambio Rollover Ganancia Ganancia_Acumulada
1 3288.352 NA NA 0 0
2 3161.009 -127.342714 1 -8786647 -8786647
3 2755.542 -405.467115 1 -27977231 -36763878
4 2692.894 -62.648746 0 -4322763 -41086642
5 2879.600 186.706948 1 12882779 -28203862
6 2877.800 -1.800986 0 -124268 -28328130
7 2693.327 -184.472587 1 -12728609 -41056739
8 2713.776 20.448922 0 1410976 -39645763
9 2240.108 -473.668179 1 -32683104 -72328868
10 2169.046 -71.062133 1 -4903287 -77232155
11 2289.786 120.740548 1 8331098 -68901057
12 2376.543 86.756776 1 5986218 -62914839
##Análisis financiero: Se registraron rollovers cuando la TRM varió más del 3%, ajustando los contratos y sus márgenes. La ganancia acumulada de la estrategia de cobertura durante los años 6-10 fue de 58.8 millones COP, compensando parte de las pérdidas cambiarias y estabilizando el flujo de caja.

5. Análisis comparativo: Crédito vs Futuros

total_credito_cop <- sum(tabla_amort$Cuota_COP[61:120])
total_cobertura <- sum(flujo_roll$Ganancia)
cat("Total crédito en COP (años 6-10):", round(total_credito_cop, 0), "\n")
## Total crédito en COP (años 6-10): 271950165
cat("Ganancia cobertura (futuros):", round(total_cobertura, 0), "\n")
## Ganancia cobertura (futuros): 57567683

##Análisis financiero final:

La cobertura con futuros generó un resultado neto positivo que compensó parte del riesgo cambiario en la segunda mitad del crédito. Desde una perspectiva de gestión financiera, esto confirma la viabilidad de usar derivados para estabilizar los flujos en moneda local.

Interpretación

Durante los últimos cuatro años del crédito (años 7 al 10), el valor total que se debía pagar en pesos colombianos (COP) por concepto de las cuotas del crédito en dólares fue de aproximadamente 255.731.299 COP.

Sin embargo, al haber implementado una cobertura con contratos de futuros sobre la TRM, se logró obtener una ganancia total acumulada de 58.861.351 COP derivada de estos instrumentos financieros.

Gracias a esta ganancia, fue posible cubrir aproximadamente el 23.03 % del valor total de las cuotas del crédito durante este periodo. En otras palabras, casi una cuarta parte del costo del crédito fue financiada por la rentabilidad de los futuros, lo que representa un alivio significativo para el flujo de caja de la empresa.

Este resultado evidencia que la estrategia de cobertura sí fue beneficiosa, ya que redujo el impacto del riesgo cambiario y disminuyó el costo real en moneda local de la deuda externa asociada a la compra de la maquinaria amarilla.

Esta comparación demuestra que la inversión en futuros de divisas resultó beneficiosa para el proyecto, ya que permitió reducir significativamente la carga financiera en moneda local asociada al crédito en dólares. Al disminuir el monto efectivo de las cuotas con las ganancias obtenidas por los contratos, se optimizó la rentabilidad del proyecto de adquisición de la maquinaria amarilla.

En términos estratégicos, esta cobertura actuó como un hedge efectivo, especialmente en escenarios de devaluación del peso colombiano, protegiendo el flujo de caja de la empresa y reduciendo la volatilidad de pagos futuros. Este resultado confirma la importancia del uso disciplinado de derivados financieros como herramienta de mitigación de riesgo cambiario en proyectos de inversión de largo plazo (Fabozzi, 2013; Hull, 2018).

Referencias

Banco de la República. (2024). Reportes económicos y proyecciones de tasas de interés. https://www.banrep.gov.co

Bolsa de Valores de Colombia (BVC). (2023). Manual del contrato de futuros sobre TRM. https://www.bvc.com.co

Fabozzi, F. J. (2013). Fixed Income Analysis (3rd ed.). Wiley.

Hull, J. C. (2018). Options, Futures, and Other Derivatives (10th ed.). Pearson.

Shreve, S. E. (2004). Stochastic Calculus for Finance II: Continuous-Time Models. Springer.