Cada uno de los cuatro forwards de la estrategia de cobertura dura un año, así que esta sección cotiza y valora un contrato a 12 meses (plazo superior al mínimo de seis meses que pide la guía), con fecha de valoración el 2 de septiembre de 2026 y año comercial de 252 días (t/T = 252/252 = 1, por lo que la base de días no afecta el resultado a este plazo).
S <- 3184.00 # TRM del 2-sep-2026, Banco de la República (Datos Abiertos Colombia)
r_COP <- 0.12 # tasa de política del Banco de la República, consulta 2-9 sep 2026 (aproxima el IBR a 12 meses; supuesto)
r_USD <- 0.0418 # U.S. Treasury, T-bill a 12 meses, vía Forbes Advisor (1-sep-2026)
t_T <- 252/252 # año comercial de 252 días -> 1 año completo
datos <- data.frame(
Dato = c("TRM del 2-sep-2026 (S)", "Tasa en pesos (r_COP)", "Tasa en dólares (r_USD)",
"Plazo (t/T)", "Forward observado en SET-FX"),
Valor = c(sprintf("%.2f COP/USD", S), sprintf("%.2f %%", r_COP*100),
sprintf("%.2f %%", r_USD*100), "252/252 = 1", "[pendiente de consultar]"),
`Fuente y fecha` = c("Banco de la República (Datos Abiertos Colombia)",
"Banco de la República, tasa de política (supuesto: aproxima el IBR a 12 meses)",
"U.S. Treasury, T-bill a 12 meses, vía Forbes Advisor",
"Supuesto del trabajo: año comercial de 252 días",
"SET-FX, mesa NDF (o Bloomberg, COP forward a 1 año)")
)
kable(datos, align = "lll") %>% kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE)| Dato | Valor | Fuente.y.fecha |
|---|---|---|
| TRM del 2-sep-2026 (S) | 3184.00 COP/USD | Banco de la República (Datos Abiertos Colombia) |
| Tasa en pesos (r_COP) | 12.00 % | Banco de la República, tasa de política (supuesto: aproxima el IBR a 12 meses) |
| Tasa en dólares (r_USD) | 4.18 % | U.S. Treasury, T-bill a 12 meses, vía Forbes Advisor |
| Plazo (t/T) | 252/252 = 1 | Supuesto del trabajo: año comercial de 252 días |
| Forward observado en SET-FX | [pendiente de consultar] | SET-FX, mesa NDF (o Bloomberg, COP forward a 1 año) |
El forward observado en SET-FX queda marcado como pendiente porque no se encontró una cotización confiable, fechada y de plazo comparable (≈12 meses) en las fuentes públicas disponibles. La sección de comparación más abajo queda lista para completarse en cuanto se tenga el dato.
Con S en COP por USD (peso doméstico, dólar extranjero), la paridad cubierta de tasas vista en clase es
\[F = S \times \left(\frac{1+r_{COP}}{1+r_{USD}}\right)^{t/T}\]
que es la versión discreta de la ecuación (5.9) de Hull, \(F_0 = S_0\, e^{(r-r_f)T}\) (Hull, 11.ª ed., sección 5.10, p. 138, con \(r_c=\ln(1+r)\)); la lógica es de no arbitraje.
factor_paridad <- (1 + r_COP) / (1 + r_USD)
F_teorico <- S * factor_paridad^t_T
puntos_forward <- F_teorico - S
prima_anual <- puntos_forward / S
# verificación con la fórmula continua de Hull (5.9)
r_COP_cont <- log(1 + r_COP)
r_USD_cont <- log(1 + r_USD)
F_hull <- S * exp((r_COP_cont - r_USD_cont) * t_T)
tabla_forward <- data.frame(
Concepto = c("Factor de paridad", "Forward teórico a 12 meses (F)",
"Puntos forward", "Prima anual",
"Verificación con Hull (ec. 5.9, forma continua)"),
Resultado = c(sprintf("%.6f", factor_paridad),
sprintf("%.2f COP/USD", F_teorico),
sprintf("+%.2f COP", puntos_forward),
sprintf("%.2f %%", prima_anual*100),
sprintf("%.2f COP/USD", F_hull))
)
kable(tabla_forward) %>% kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE)| Concepto | Resultado |
|---|---|
| Factor de paridad | 1.075062 |
| Forward teórico a 12 meses (F) | 3423.00 COP/USD |
| Puntos forward | +239.00 COP |
| Prima anual | 7.51 % |
| Verificación con Hull (ec. 5.9, forma continua) | 3423.00 COP/USD |
Las dos formas de la paridad (discreta y continua de Hull) coinciden en 3423.00 COP/USD, con una prima de 7.51 % — exactamente el diferencial de tasas compuesto. El forward no pronostica el dólar: es el costo de financiarse en pesos en lugar de dólares.
La empresa compra dólares a plazo, es decir, el banco los vende, y cotiza con las tasas menos favorables para el cliente. Suponemos 50 pb sobre la tasa en pesos y 25 pb bajo la tasa en dólares (supuesto propio, señalado).
spread_cop <- 0.005
spread_usd <- 0.0025
calc_forward <- function(rc, ru) S * ((1+rc)/(1+ru))^t_T
banda <- data.frame(
`Posición del banco` = c("Venta de USD (la empresa compra)", "Punto medio", "Compra de USD"),
r_COP = sprintf("%.2f %%", c(r_COP+spread_cop, r_COP, r_COP-spread_cop)*100),
r_USD = sprintf("%.2f %%", c(r_USD-spread_usd, r_USD, r_USD+spread_usd)*100),
Forward = sprintf("%.2f", c(calc_forward(r_COP+spread_cop, r_USD-spread_usd),
calc_forward(r_COP, r_USD),
calc_forward(r_COP-spread_cop, r_USD+spread_usd))),
check.names = FALSE
)
kable(banda) %>% kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE)| Posición del banco | r_COP | r_USD | Forward |
|---|---|---|---|
| Venta de USD (la empresa compra) | 12.50 % | 3.93 % | 3446.55 |
| Punto medio | 12.00 % | 4.18 % | 3423.00 |
| Compra de USD | 11.50 % | 4.43 % | 3399.56 |
F_venta <- calc_forward(r_COP+spread_cop, r_USD-spread_usd)
F_compra <- calc_forward(r_COP-spread_cop, r_USD+spread_usd)
# sensibilidad: +100 pb en cada tasa, manteniendo la otra fija
sens_rCOP <- calc_forward(r_COP+0.01, r_USD) - F_teorico
sens_rUSD <- calc_forward(r_COP, r_USD+0.01) - F_teoricoLa banda va de 3399.56 a 3446.55 COP/USD (±0.7 %). 100 pb más en la tasa en pesos suben el forward en 30.56 pesos; 100 pb más en la tasa en dólares lo bajan en 32.54 pesos: el supuesto de usar la tasa de política en vez del IBR mueve el resultado tanto como el spread del banco.
r_COP_seq <- seq(0.09, 0.15, by = 0.0025)
F_seq <- sapply(r_COP_seq, function(rc) calc_forward(rc, r_USD))
df_plot <- data.frame(r_COP = r_COP_seq*100, Forward = F_seq)
if (has_plotly) {
plot_ly(df_plot, x = ~r_COP, y = ~Forward, type = "scatter", mode = "lines+markers",
line = list(color = "#2C3E50"), marker = list(color = "#18BC9C")) %>%
layout(title = "Forward teórico COP/USD vs. tasa en pesos (r_USD fija en 4,18 %)",
xaxis = list(title = "Tasa en pesos, r_COP (%)"),
yaxis = list(title = "Forward teórico (COP/USD)"),
shapes = list(list(type = "line", x0 = r_COP*100, x1 = r_COP*100,
y0 = min(F_seq), y1 = max(F_seq),
line = list(dash = "dot", color = "#E74C3C"))))
} else {
plot(df_plot$r_COP, df_plot$Forward, type = "l", col = "#2C3E50", lwd = 2,
xlab = "Tasa en pesos, r_COP (%)", ylab = "Forward teórico (COP/USD)",
main = "Forward teórico COP/USD vs. tasa en pesos")
}comparacion <- data.frame(
Concepto = c("Fecha/hora, spot SET-FX, forward 12m (compra/venta), puntos y devaluación implícita",
"Diferencia frente al teórico (COP y %) y ¿dentro de la banda?"),
`Valor observado` = c("[pendiente]", "[pendiente]"),
check.names = FALSE
)
kable(comparacion) %>% kable_styling(bootstrap_options = c("striped","hover"), full_width = TRUE)| Concepto | Valor observado |
|---|---|
| Fecha/hora, spot SET-FX, forward 12m (compra/venta), puntos y devaluación implícita | [pendiente] |
| Diferencia frente al teórico (COP y %) y ¿dentro de la banda? | [pendiente] |
Si el observado cae dentro de la banda (3399.56–3446.55), la diferencia es spread de negociación y el mercado es coherente con la paridad; fuera de ella, las causas habituales son liquidez (menor a plazos largos), riesgo de crédito (contraparte en el OTC), convenciones de mercado (días hábiles/calendario, base 360/365/252, TRM vs. spot de cierre) y desalineación entre tasas (política vs. IBR, T-bill vs. SOFR/OIS, horas distintas, flujos de pensiones y no residentes).
El forward teórico (3423.00) queda 97 pesos (2.9 %) por encima del valor más probable del modelo A.3 a 12 meses (3.326): la cobertura solo paga si el peso se deprecia más de 7.5 %, fuera del escenario central pero dentro del rango simulado (2.795 a 3.953).
También queda por encima de la mediana de las proyecciones de bancos citadas en A.1 (3.300) y en el extremo bajo del rango de Cibest (3.400–3.650), aunque esas proyecciones son a cierre de 2026 y el forward es a 12 meses. Durante 2026 el forward habría pronosticado ≈7,5 % de devaluación mientras el peso se fortaleció ≈19 %: quien se hubiera cubierto habría pagado la prima sin recibir protección, lo que confirma que la utilidad de la cobertura está en la estabilidad del flujo, no en acertar el rumbo del dólar (se evalúa en B.2 y B.3).
Este cálculo es válido solo para un forward a 12 meses con las tasas de hoy; no se puede extrapolar a los años 7 a 10 (si el 7.5 % se mantuviera constante siete años, el forward rondaría 5285, nivel que el mercado no suele cotizar porque las curvas convergen a plazos largos). El precio de esos vencimientos depende de las curvas de TES y de Tesoros.
Fuentes: Banco de la República (Datos Abiertos Colombia); U.S. Treasury vía Forbes Advisor; Hull, J. C. (11.ª ed.), Options, Futures, and Other Derivatives, sección 5.10; diapositivas de clase “Forwards”.