Este trabajo se enfoca en el análisis financiero de la adquisición de una maquinaria amarilla importada desde Estados Unidos, cuya compra se financia mediante un crédito en dólares (USD) con cuotas fijas, bajo el esquema de amortización francés. Dado que el préstamo está denominado en una moneda extranjera, la exposición a la volatilidad de la tasa de cambio COP/USD representa un riesgo significativo a lo largo del plazo del crédito.
Ante este escenario, se evalúa la posibilidad de mitigar dicho riesgo a través del uso de instrumentos derivados, específicamente contratos de futuros sobre la Tasa Representativa del Mercado (TRM). El objetivo es identificar posibles compensaciones obtenidas mediante las liquidaciones de estos contratos durante los últimos cuatro años de vigencia del crédito. Esta estrategia se basa en una expectativa de apreciación del dólar frente al peso colombiano en el mediano y largo plazo, respaldada por proyecciones de mercado que sugieren una tendencia alcista de la divisa.
Analizar la evolución de la TRM en Colombia y evaluar estrategias de cobertura mediante contratos de futuros, a través de herramientas estadísticas y de simulación, con el fin de reducir la exposición al riesgo cambiario en operaciones financieras denominadas en dólares.
Caracterizar el comportamiento histórico de la TRM en Colombia durante los últimos cinco años, identificando su volatilidad, retornos y factores macroeconómicos que la afectan.
Calcular y analizar estadísticamente los retornos mensuales y la desviación estándar de la TRM, como base para medir su riesgo y variabilidad.
Identificar los principales factores internos y externos que influyen en la TRM, incluyendo política monetaria, precios internacionales del petróleo, tasas de interés globales y eventos políticos locales.
Simular escenarios futuros de la TRM mediante el modelo de Movimiento Browniano Geométrico (GBM), con el objetivo de estimar posibles trayectorias del tipo de cambio en el largo plazo.
Evaluar el impacto financiero de contratos de futuros como mecanismo de cobertura cambiaria para créditos en dólares, midiendo su efectividad para reducir los flujos netos de pago en pesos colombianos.
Analizar los riesgos operativos y financieros que se encuentran asociados a las estrategias de cobertura, considerando la periodicidad de los contratos, la selección de posiciones (corta o larga) y la precisión de las proyecciones.
Análisis Fundamental de la Tasa Representativa del Mercado (TRM) en Colombia
La Tasa Representativa del Mercado (TRM) refleja el valor promedio diario del dólar estadounidense frente al peso colombiano y es un indicador clave para la economía del país. Su comportamiento impacta directamente en el comercio exterior, la inversión extranjera, las decisiones empresariales y la formulación de políticas económicas.
En contextos de volatilidad internacional o cambios en las condiciones macroeconómicas, como variaciones en las tasas de interés de EE. UU. o los precios del petróleo, la TRM puede presentar fuertes fluctuaciones. Por ello, monitorear su evolución permite anticipar riesgos cambiarios y tomar decisiones informadas, especialmente en sectores con alta exposición al dólar (Banco de la República, Informe de Política Monetaria, 2025).
El análisis de los retornos mensuales de la TRM permite identificar tendencias de apreciación o depreciación del peso colombiano frente al dólar. Estos retornos reflejan el comportamiento promedio del tipo de cambio en el tiempo, mientras que la desviación estándar mensual mide su volatilidad.
Una alta desviación estándar indica mayor incertidumbre cambiaria y exposición al riesgo, lo que puede afectar decisiones de cobertura y planificación financiera en empresas con pasivos en dólares. Este análisis es clave para anticipar movimientos del mercado y evaluar la conveniencia de instrumentos derivados.
La TRM se ve influenciada por factores externos e internos que impactan la oferta y demanda de dólares en Colombia.
Un aumento en las tasas de interés de la Reserva Federal de EE. UU. fortalece el dólar, atrayendo capitales y presionando al alza la TRM (Federal Reserve, 2024). Además, los precios internacionales del petróleo, las tensiones comerciales globales y la calificación crediticia del país afectan significativamente el tipo de cambio.
La política monetaria del Banco de la República, el crecimiento económico, el déficit fiscal y los flujos de inversión extranjera son determinantes clave. La confianza de los inversionistas y la estabilidad política también influyen en la evolución de la TRM.
La evolución de la TRM está sujeta a diversos riesgos y factores de sensibilidad que pueden afectar significativamente sus proyecciones.
La incertidumbre derivada de cambios en reformas fiscales, laborales o políticas públicas puede minar la confianza de los inversionistas nacionales e internacionales, generando salidas de capital y presión sobre el tipo de cambio.
Una posible desaceleración económica o recesión en economías clave como Estados Unidos o Europa reduciría la demanda por exportaciones colombianas, debilitando el peso frente al dólar y alterando las expectativas cambiarias.
Dado que Colombia es un importante exportador de petróleo, las fluctuaciones negativas en los precios internacionales de este recurso afectan directamente los ingresos en divisas, impactando la balanza comercial y aumentando la volatilidad de la TRM.
Cambios abruptos en las tasas de interés globales, movimientos especulativos en los mercados de divisas, o variaciones inesperadas en los flujos de capital pueden amplificar la sensibilidad del tipo de cambio.
Considerar estos riesgos es esencial para diseñar estrategias de cobertura y mitigación que reduzcan la exposición a la volatilidad cambiaria, especialmente en créditos o inversiones denominadas en dólares.
paquetes <- c("lubridate", "dplyr", "readr")
instalar_y_cargar <- function(pkg) {
if (!require(pkg, character.only = TRUE)) {
install.packages(pkg, repos = "https://cloud.r-project.org/", type = "binary")
library(pkg, character.only = TRUE)
}
}
invisible(lapply(paquetes, instalar_y_cargar))
## Cargando paquete requerido: lubridate
## Warning: package 'lubridate' was built under R version 4.5.1
##
## Adjuntando el paquete: 'lubridate'
## The following objects are masked from 'package:base':
##
## date, intersect, setdiff, union
## Cargando paquete requerido: dplyr
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Cargando paquete requerido: readr
## Warning: package 'readr' was built under R version 4.5.1
library(dplyr) # Manipulación de datos
library(lubridate) # Manipulación de fechas
library(ggplot2) # Graficar
library(tidyr) # Transformar datos (pivot_longer)
library(purrr) # Funciones para aplicar
library(readr) # Leer archivos CSV
options(scipen = 999)
set.seed(1234)
data=read.table(file.choose(),head=T)
head(data)
## Fecha TRM
## 1 1/1/2015 2392.46
## 2 2/1/2015 2392.46
## 3 3/1/2015 2383.37
## 4 4/1/2015 2383.37
## 5 5/1/2015 2383.37
## 6 6/1/2015 2412.82
trm <- data %>%
mutate(date = as.Date(Fecha, format = "%d/%m/%Y"), # Convertimos la fecha
trm = as.numeric(TRM)) %>% # Convertimos TRM a numérico
arrange(date) %>% # Ordenamos los datos por fecha
filter(!is.na(date), !is.na(trm))
head(trm)
## Fecha TRM date trm
## 1 1/1/2015 2392.46 2015-01-01 2392.46
## 2 2/1/2015 2392.46 2015-01-02 2392.46
## 3 3/1/2015 2383.37 2015-01-03 2383.37
## 4 4/1/2015 2383.37 2015-01-04 2383.37
## 5 5/1/2015 2383.37 2015-01-05 2383.37
## 6 6/1/2015 2412.82 2015-01-06 2412.82
trm <- trm %>%
filter(date >= as.Date("2015-01-01") & date <= as.Date("2025-12-31"))
head(trm)
## Fecha TRM date trm
## 1 1/1/2015 2392.46 2015-01-01 2392.46
## 2 2/1/2015 2392.46 2015-01-02 2392.46
## 3 3/1/2015 2383.37 2015-01-03 2383.37
## 4 4/1/2015 2383.37 2015-01-04 2383.37
## 5 5/1/2015 2383.37 2015-01-05 2383.37
## 6 6/1/2015 2412.82 2015-01-06 2412.82
trm_mensual <- trm %>%
mutate(year = year(date), month = month(date)) %>% # Extraemos el año y mes
group_by(year, month) %>% # Agrupamos por año y mes
summarise(trm = last(trm), date = last(date), .groups = "drop") %>% # Tomamos el último valor de cada mes
arrange(date) # Ordenamos los datos por fecha
ret_mensual <- trm_mensual %>%
mutate(ret = log(trm / lag(trm))) %>% # Calculamos los retornos logarítmicos
filter(!is.na(ret)) # Eliminamos valores NA que aparecen en el primer mes
El código calcula la media anualizada y la desviación estándar anualizada de los retornos mensuales, dos métricas clave para evaluar el rendimiento y riesgo financiero.
Estos indicadores permiten medir el rendimiento esperado y la volatilidad anual, fundamentales para decisiones de inversión y gestión de riesgo.
mes_año<-12
mu=exp(mean(ret_mensual$ret*mes_año))-1
sigma=sqrt(var(ret_mensual$ret)*mes_año)
cat("Media (mu) mensual:", round(mu, 6), " | Desviación (sigma):", round(sigma, 6), "\n")
## Media (mu) mensual: 0.044842 | Desviación (sigma): 0.137002
Con estos resultados podemos analizar el posible comportamiento que puede tener el precio del dolar, la desviacion nos indica que que este puede variar alrededor de un 13% con respecto al precio represntativo del mercado.
Para realizar la simulación se utilizará el historial de la TRM correspondiente a los últimos cinco años hasta la fecha actual. Estos datos se obtienen directamente del sitio web oficial del Banco de la República. Este enfoque permite modelar la evolución futura de la TRM bajo el supuesto de que sigue un proceso estocástico de Movimiento Browniano Geométrico, comúnmente empleado para representar precios de activos financieros y variables cambiarias.
s0 <- tail(trm$trm, 1)
meses=12 # 10 años
N=1000 # Número de simulaciones
dt=1/meses
T=120
vec=rep(s0,N)
mb=matrix(ncol=N,nrow = T)
mb[1,]=vec ########hago la matriz y pongo s0 como valor inicial
for (i in 1:N) {
for (t in 2:T) {
mb[t,i]=mb[(t-1),i]*exp((mu-(0.5*(sigma^2)))*(dt)+sigma*(dt^(1/2))*qnorm(runif(1,min =0,max = 1 )))
}
}
#grafica de las trayectorias
dev.new()
matplot(mb,type = "l", lty = 1, col = rgb(0, 0, 1, alpha = 0.1),
xlab = "Meses", ylab = "TRM", main = "Simulación de la TRM (GBM)")
código realiza una simulación de trayectorias futuras de la TRM utilizando un modelo de Movimiento Browniano Geométrico (GBM), que es un proceso estocástico ampliamente utilizado para modelar precios de activos financieros.
S0 representa el valor inicial de la TRM, tomado del último dato disponible.
Se generan N = 1000 simulaciones, cada una con un horizonte de T = 120 meses (10 años).
En cada paso temporal dt = 1/12 (un mes), la TRM se actualiza multiplicando el valor anterior por un factor que combina la deriva ajustada (mu - 0.5 * sigma^2) y una componente aleatoria basada en una variable normal estándar generada a partir de una distribución uniforme.
El uso de la función exp() asegura que los valores simulados sigan una trayectoria positiva y log-normal, característica del GBM.
Finalmente, se grafica las trayectorias simuladas para visualizar la posible evolución futura de la TRM bajo este modelo.
Esta simulación ayuda a entender la variabilidad y posibles escenarios futuros del tipo de cambio, útil para análisis de riesgo y toma de decisiones financieras.
max_idx <- which.max(mb[T, ])
min_idx <- which.min(mb[T, ])
mean_trajectory <- rowMeans(mb)
# Graficar todas las trayectorias
matplot(mb, type = "l", lty = 1, col = rgb(0, 0, 1, alpha = 0.1),
xlab = "meses", ylab = "TRM", main = "Simulación de la TRM (GBM)")
# Añadir líneas para la más alta, más baja y promedio
lines(mb[, max_idx], col = "red", lwd = 2)
lines(mb[, min_idx], col = "green", lwd = 2)
lines(mean_trajectory, col = "black", lwd = 2)
plot(mean_trajectory, type = "l", lwd = 2, col = "black",
xlab = "meses", ylab = "TRM", main = "Trayectorias destacadas de la TRM",
ylim = range(c(mb[, max_idx], mb[, min_idx], mean_trajectory)))
lines(mb[, max_idx], col = "red", lwd = 2)
lines(mb[, min_idx], col = "green", lwd = 2)
legend("topleft",
legend = c("Promedio", "Máxima", "Mínima"),
col = c("black", "green", "red"),
lty = 1, lwd = 2)
# Monto del crédito en COP
monto_cop <- 500e6 # 500 millones de COP
trm_hoy <- tail(trm$trm, 1)
monto_usd_90<-(monto_cop*0.9)/trm_hoy
tasa_anual <- 0.07
tasa_mensual <- (1 + tasa_anual)^(1/12) - 1 # Convertimos la tasa anual a mensual
n_cuotas <- meses*10 # El número de cuotas es igual a 120 meses (10 años)
cuota <- monto_usd_90 * (tasa_mensual / (1 - (1 + tasa_mensual)^(-n_cuotas)))
# Crear una tabla vacía
tabla_amortizacion <- data.frame(
Periodo = 1:n_cuotas,
Cuota = numeric(n_cuotas),
Interes = numeric(n_cuotas),
Amortizacion = numeric(n_cuotas),
Saldo = numeric(n_cuotas)
)
# Inicializar saldo
saldo <- monto_usd_90
# Calcular los valores por periodo
for (i in 1:n_cuotas) {
interes <- saldo * tasa_mensual
amortizacion <- cuota - interes
saldo <- saldo - amortizacion
tabla_amortizacion[i, "Cuota"] <- round(cuota, 2)
tabla_amortizacion[i, "Interes"] <- round(interes, 2)
tabla_amortizacion[i, "Amortizacion"] <- round(amortizacion, 2)
tabla_amortizacion[i, "Saldo"] <- round(saldo, 2)
}
# Mostrar la tabla
print(tabla_amortizacion)
## Periodo Cuota Interes Amortizacion Saldo
## 1 1 1327.79 652.81 674.98 114781.57
## 2 2 1327.79 648.99 678.80 114102.78
## 3 3 1327.79 645.15 682.63 113420.14
## 4 4 1327.79 641.29 686.49 112733.65
## 5 5 1327.79 637.41 690.38 112043.27
## 6 6 1327.79 633.51 694.28 111348.99
## 7 7 1327.79 629.58 698.21 110650.79
## 8 8 1327.79 625.64 702.15 109948.63
## 9 9 1327.79 621.67 706.12 109242.51
## 10 10 1327.79 617.67 710.12 108532.40
## 11 11 1327.79 613.66 714.13 107818.26
## 12 12 1327.79 609.62 718.17 107100.10
## 13 13 1327.79 605.56 722.23 106377.87
## 14 14 1327.79 601.48 726.31 105651.56
## 15 15 1327.79 597.37 730.42 104921.14
## 16 16 1327.79 593.24 734.55 104186.59
## 17 17 1327.79 589.09 738.70 103447.88
## 18 18 1327.79 584.91 742.88 102705.01
## 19 19 1327.79 580.71 747.08 101957.93
## 20 20 1327.79 576.48 751.30 101206.62
## 21 21 1327.79 572.24 755.55 100451.07
## 22 22 1327.79 567.96 759.82 99691.25
## 23 23 1327.79 563.67 764.12 98927.13
## 24 24 1327.79 559.35 768.44 98158.69
## 25 25 1327.79 555.00 772.78 97385.90
## 26 26 1327.79 550.63 777.15 96608.75
## 27 27 1327.79 546.24 781.55 95827.20
## 28 28 1327.79 541.82 785.97 95041.23
## 29 29 1327.79 537.38 790.41 94250.82
## 30 30 1327.79 532.91 794.88 93455.94
## 31 31 1327.79 528.41 799.37 92656.56
## 32 32 1327.79 523.89 803.89 91852.67
## 33 33 1327.79 519.35 808.44 91044.23
## 34 34 1327.79 514.78 813.01 90231.22
## 35 35 1327.79 510.18 817.61 89413.61
## 36 36 1327.79 505.56 822.23 88591.38
## 37 37 1327.79 500.91 826.88 87764.50
## 38 38 1327.79 496.23 831.56 86932.94
## 39 39 1327.79 491.53 836.26 86096.69
## 40 40 1327.79 486.80 840.99 85255.70
## 41 41 1327.79 482.05 845.74 84409.96
## 42 42 1327.79 477.27 850.52 83559.44
## 43 43 1327.79 472.46 855.33 82704.11
## 44 44 1327.79 467.62 860.17 81843.94
## 45 45 1327.79 462.76 865.03 80978.91
## 46 46 1327.79 457.87 869.92 80108.99
## 47 47 1327.79 452.95 874.84 79234.15
## 48 48 1327.79 448.00 879.79 78354.36
## 49 49 1327.79 443.03 884.76 77469.60
## 50 50 1327.79 438.02 889.76 76579.84
## 51 51 1327.79 432.99 894.79 75685.04
## 52 52 1327.79 427.93 899.85 74785.19
## 53 53 1327.79 422.85 904.94 73880.24
## 54 54 1327.79 417.73 910.06 72970.19
## 55 55 1327.79 412.58 915.20 72054.98
## 56 56 1327.79 407.41 920.38 71134.60
## 57 57 1327.79 402.21 925.58 70209.02
## 58 58 1327.79 396.97 930.82 69278.20
## 59 59 1327.79 391.71 936.08 68342.12
## 60 60 1327.79 386.42 941.37 67400.75
## 61 61 1327.79 381.09 946.69 66454.06
## 62 62 1327.79 375.74 952.05 65502.01
## 63 63 1327.79 370.36 957.43 64544.58
## 64 64 1327.79 364.94 962.84 63581.73
## 65 65 1327.79 359.50 968.29 62613.45
## 66 66 1327.79 354.03 973.76 61639.68
## 67 67 1327.79 348.52 979.27 60660.41
## 68 68 1327.79 342.98 984.81 59675.61
## 69 69 1327.79 337.41 990.37 58685.23
## 70 70 1327.79 331.81 995.97 57689.26
## 71 71 1327.79 326.18 1001.61 56687.66
## 72 72 1327.79 320.52 1007.27 55680.39
## 73 73 1327.79 314.83 1012.96 54667.42
## 74 74 1327.79 309.10 1018.69 53648.73
## 75 75 1327.79 303.34 1024.45 52624.28
## 76 76 1327.79 297.55 1030.24 51594.04
## 77 77 1327.79 291.72 1036.07 50557.97
## 78 78 1327.79 285.86 1041.93 49516.04
## 79 79 1327.79 279.97 1047.82 48468.23
## 80 80 1327.79 274.05 1053.74 47414.48
## 81 81 1327.79 268.09 1059.70 46354.78
## 82 82 1327.79 262.10 1065.69 45289.09
## 83 83 1327.79 256.07 1071.72 44217.38
## 84 84 1327.79 250.01 1077.78 43139.60
## 85 85 1327.79 243.92 1083.87 42055.73
## 86 86 1327.79 237.79 1090.00 40965.73
## 87 87 1327.79 231.63 1096.16 39869.57
## 88 88 1327.79 225.43 1102.36 38767.21
## 89 89 1327.79 219.20 1108.59 37658.61
## 90 90 1327.79 212.93 1114.86 36543.75
## 91 91 1327.79 206.62 1121.16 35422.59
## 92 92 1327.79 200.28 1127.50 34295.08
## 93 93 1327.79 193.91 1133.88 33161.20
## 94 94 1327.79 187.50 1140.29 32020.91
## 95 95 1327.79 181.05 1146.74 30874.18
## 96 96 1327.79 174.57 1153.22 29720.95
## 97 97 1327.79 168.05 1159.74 28561.21
## 98 98 1327.79 161.49 1166.30 27394.91
## 99 99 1327.79 154.89 1172.89 26222.02
## 100 100 1327.79 148.26 1179.53 25042.49
## 101 101 1327.79 141.59 1186.19 23856.30
## 102 102 1327.79 134.89 1192.90 22663.40
## 103 103 1327.79 128.14 1199.65 21463.75
## 104 104 1327.79 121.36 1206.43 20257.32
## 105 105 1327.79 114.54 1213.25 19044.07
## 106 106 1327.79 107.68 1220.11 17823.96
## 107 107 1327.79 100.78 1227.01 16596.95
## 108 108 1327.79 93.84 1233.95 15363.01
## 109 109 1327.79 86.86 1240.92 14122.08
## 110 110 1327.79 79.85 1247.94 12874.14
## 111 111 1327.79 72.79 1255.00 11619.15
## 112 112 1327.79 65.70 1262.09 10357.05
## 113 113 1327.79 58.56 1269.23 9087.82
## 114 114 1327.79 51.38 1276.40 7811.42
## 115 115 1327.79 44.17 1283.62 6527.80
## 116 116 1327.79 36.91 1290.88 5236.92
## 117 117 1327.79 29.61 1298.18 3938.74
## 118 118 1327.79 22.27 1305.52 2633.22
## 119 119 1327.79 14.89 1312.90 1320.32
## 120 120 1327.79 7.47 1320.32 0.00
# Supongamos que S, idx_max, idx_min están definidos:
# mb: matriz con simulaciones
# idx_max: índice de columna con trayectoria máxima
# idx_min: índice de columna con trayectoria mínima
# Extraer trayectorias
trayectoria_max <- mb[, max_idx]
trayectoria_min <- mb[, min_idx]
trayectoria_mean <- rowMeans(mb)
# Agregarlas a la tabla
tabla_amortizacion$Trayectoria_Max <- trayectoria_max
tabla_amortizacion$Trayectoria_Min <- trayectoria_min
tabla_amortizacion$Trayectoria_Mean <- trayectoria_mean
# Imprimir (no formateada)
print(tabla_amortizacion)
## Periodo Cuota Interes Amortizacion Saldo Trayectoria_Max
## 1 1 1327.79 652.81 674.98 114781.57 3897.570
## 2 2 1327.79 648.99 678.80 114102.78 4074.383
## 3 3 1327.79 645.15 682.63 113420.14 3968.463
## 4 4 1327.79 641.29 686.49 112733.65 3947.196
## 5 5 1327.79 637.41 690.38 112043.27 3887.152
## 6 6 1327.79 633.51 694.28 111348.99 4054.055
## 7 7 1327.79 629.58 698.21 110650.79 4381.559
## 8 8 1327.79 625.64 702.15 109948.63 4084.768
## 9 9 1327.79 621.67 706.12 109242.51 4132.317
## 10 10 1327.79 617.67 710.12 108532.40 4476.036
## 11 11 1327.79 613.66 714.13 107818.26 4625.327
## 12 12 1327.79 609.62 718.17 107100.10 4618.180
## 13 13 1327.79 605.56 722.23 106377.87 4800.608
## 14 14 1327.79 601.48 726.31 105651.56 4769.646
## 15 15 1327.79 597.37 730.42 104921.14 5075.069
## 16 16 1327.79 593.24 734.55 104186.59 5030.971
## 17 17 1327.79 589.09 738.70 103447.88 5349.460
## 18 18 1327.79 584.91 742.88 102705.01 5263.867
## 19 19 1327.79 580.71 747.08 101957.93 5141.376
## 20 20 1327.79 576.48 751.30 101206.62 5268.920
## 21 21 1327.79 572.24 755.55 100451.07 5193.060
## 22 22 1327.79 567.96 759.82 99691.25 5201.454
## 23 23 1327.79 563.67 764.12 98927.13 4969.509
## 24 24 1327.79 559.35 768.44 98158.69 5139.795
## 25 25 1327.79 555.00 772.78 97385.90 5300.016
## 26 26 1327.79 550.63 777.15 96608.75 5312.005
## 27 27 1327.79 546.24 781.55 95827.20 5287.379
## 28 28 1327.79 541.82 785.97 95041.23 5241.088
## 29 29 1327.79 537.38 790.41 94250.82 5432.559
## 30 30 1327.79 532.91 794.88 93455.94 5427.656
## 31 31 1327.79 528.41 799.37 92656.56 5245.879
## 32 32 1327.79 523.89 803.89 91852.67 5212.931
## 33 33 1327.79 519.35 808.44 91044.23 5310.295
## 34 34 1327.79 514.78 813.01 90231.22 5263.499
## 35 35 1327.79 510.18 817.61 89413.61 5287.241
## 36 36 1327.79 505.56 822.23 88591.38 5591.959
## 37 37 1327.79 500.91 826.88 87764.50 5783.195
## 38 38 1327.79 496.23 831.56 86932.94 6031.423
## 39 39 1327.79 491.53 836.26 86096.69 6094.717
## 40 40 1327.79 486.80 840.99 85255.70 5841.888
## 41 41 1327.79 482.05 845.74 84409.96 5876.180
## 42 42 1327.79 477.27 850.52 83559.44 5696.643
## 43 43 1327.79 472.46 855.33 82704.11 5674.592
## 44 44 1327.79 467.62 860.17 81843.94 5749.331
## 45 45 1327.79 462.76 865.03 80978.91 5828.029
## 46 46 1327.79 457.87 869.92 80108.99 6043.593
## 47 47 1327.79 452.95 874.84 79234.15 5818.859
## 48 48 1327.79 448.00 879.79 78354.36 5601.794
## 49 49 1327.79 443.03 884.76 77469.60 5329.579
## 50 50 1327.79 438.02 889.76 76579.84 4838.712
## 51 51 1327.79 432.99 894.79 75685.04 5137.934
## 52 52 1327.79 427.93 899.85 74785.19 5219.899
## 53 53 1327.79 422.85 904.94 73880.24 5261.683
## 54 54 1327.79 417.73 910.06 72970.19 4998.084
## 55 55 1327.79 412.58 915.20 72054.98 5530.395
## 56 56 1327.79 407.41 920.38 71134.60 5507.917
## 57 57 1327.79 402.21 925.58 70209.02 5886.128
## 58 58 1327.79 396.97 930.82 69278.20 6041.711
## 59 59 1327.79 391.71 936.08 68342.12 6405.989
## 60 60 1327.79 386.42 941.37 67400.75 6289.250
## 61 61 1327.79 381.09 946.69 66454.06 6353.531
## 62 62 1327.79 375.74 952.05 65502.01 6654.637
## 63 63 1327.79 370.36 957.43 64544.58 7039.391
## 64 64 1327.79 364.94 962.84 63581.73 7307.789
## 65 65 1327.79 359.50 968.29 62613.45 7451.757
## 66 66 1327.79 354.03 973.76 61639.68 7529.738
## 67 67 1327.79 348.52 979.27 60660.41 7789.680
## 68 68 1327.79 342.98 984.81 59675.61 7572.010
## 69 69 1327.79 337.41 990.37 58685.23 7128.607
## 70 70 1327.79 331.81 995.97 57689.26 7113.289
## 71 71 1327.79 326.18 1001.61 56687.66 7452.142
## 72 72 1327.79 320.52 1007.27 55680.39 7568.123
## 73 73 1327.79 314.83 1012.96 54667.42 7575.602
## 74 74 1327.79 309.10 1018.69 53648.73 7240.376
## 75 75 1327.79 303.34 1024.45 52624.28 7605.578
## 76 76 1327.79 297.55 1030.24 51594.04 7481.490
## 77 77 1327.79 291.72 1036.07 50557.97 7674.227
## 78 78 1327.79 285.86 1041.93 49516.04 7347.399
## 79 79 1327.79 279.97 1047.82 48468.23 7228.722
## 80 80 1327.79 274.05 1053.74 47414.48 7894.401
## 81 81 1327.79 268.09 1059.70 46354.78 7740.570
## 82 82 1327.79 262.10 1065.69 45289.09 8288.046
## 83 83 1327.79 256.07 1071.72 44217.38 8845.450
## 84 84 1327.79 250.01 1077.78 43139.60 8938.406
## 85 85 1327.79 243.92 1083.87 42055.73 9109.962
## 86 86 1327.79 237.79 1090.00 40965.73 10243.410
## 87 87 1327.79 231.63 1096.16 39869.57 10137.296
## 88 88 1327.79 225.43 1102.36 38767.21 10785.954
## 89 89 1327.79 219.20 1108.59 37658.61 11581.022
## 90 90 1327.79 212.93 1114.86 36543.75 11699.515
## 91 91 1327.79 206.62 1121.16 35422.59 11894.142
## 92 92 1327.79 200.28 1127.50 34295.08 12038.036
## 93 93 1327.79 193.91 1133.88 33161.20 12145.351
## 94 94 1327.79 187.50 1140.29 32020.91 12205.723
## 95 95 1327.79 181.05 1146.74 30874.18 12562.965
## 96 96 1327.79 174.57 1153.22 29720.95 12854.035
## 97 97 1327.79 168.05 1159.74 28561.21 13875.102
## 98 98 1327.79 161.49 1166.30 27394.91 13902.890
## 99 99 1327.79 154.89 1172.89 26222.02 14146.200
## 100 100 1327.79 148.26 1179.53 25042.49 14089.549
## 101 101 1327.79 141.59 1186.19 23856.30 14158.211
## 102 102 1327.79 134.89 1192.90 22663.40 14862.155
## 103 103 1327.79 128.14 1199.65 21463.75 14512.897
## 104 104 1327.79 121.36 1206.43 20257.32 14511.326
## 105 105 1327.79 114.54 1213.25 19044.07 14515.898
## 106 106 1327.79 107.68 1220.11 17823.96 14305.686
## 107 107 1327.79 100.78 1227.01 16596.95 15242.420
## 108 108 1327.79 93.84 1233.95 15363.01 15884.767
## 109 109 1327.79 86.86 1240.92 14122.08 15982.899
## 110 110 1327.79 79.85 1247.94 12874.14 16468.571
## 111 111 1327.79 72.79 1255.00 11619.15 15978.052
## 112 112 1327.79 65.70 1262.09 10357.05 15566.847
## 113 113 1327.79 58.56 1269.23 9087.82 15091.373
## 114 114 1327.79 51.38 1276.40 7811.42 15918.574
## 115 115 1327.79 44.17 1283.62 6527.80 16205.983
## 116 116 1327.79 36.91 1290.88 5236.92 16739.444
## 117 117 1327.79 29.61 1298.18 3938.74 16561.907
## 118 118 1327.79 22.27 1305.52 2633.22 17596.260
## 119 119 1327.79 14.89 1312.90 1320.32 18663.659
## 120 120 1327.79 7.47 1320.32 0.00 19699.932
## Trayectoria_Min Trayectoria_Mean
## 1 3897.570 3897.570
## 2 3977.388 3919.499
## 3 4293.836 3935.857
## 4 4538.452 3943.597
## 5 4186.875 3950.662
## 6 4011.719 3970.390
## 7 3981.467 3979.765
## 8 3714.300 3999.837
## 9 3414.383 4008.196
## 10 3300.788 4028.082
## 11 3131.906 4047.114
## 12 3051.472 4064.267
## 13 3167.742 4081.895
## 14 3171.151 4098.532
## 15 3183.541 4113.994
## 16 3176.791 4124.924
## 17 2971.521 4139.730
## 18 2965.425 4160.178
## 19 3054.409 4172.920
## 20 3078.711 4183.266
## 21 3216.651 4201.876
## 22 3410.570 4214.500
## 23 3261.866 4234.902
## 24 3043.384 4251.391
## 25 3081.457 4266.532
## 26 3160.207 4281.606
## 27 3033.283 4301.116
## 28 3087.492 4318.568
## 29 3046.110 4337.828
## 30 3046.391 4341.927
## 31 3003.421 4364.292
## 32 3110.503 4380.183
## 33 3065.459 4395.896
## 34 2937.236 4418.320
## 35 2729.002 4439.745
## 36 2787.041 4456.699
## 37 2739.692 4477.918
## 38 2739.287 4495.134
## 39 2684.978 4515.576
## 40 2409.771 4528.756
## 41 2497.284 4546.574
## 42 2530.566 4556.196
## 43 2587.527 4577.175
## 44 2531.940 4599.257
## 45 2682.549 4621.610
## 46 2670.156 4635.100
## 47 2693.827 4646.813
## 48 2505.901 4668.592
## 49 2468.172 4684.793
## 50 2382.408 4703.903
## 51 2490.336 4719.095
## 52 2413.699 4736.610
## 53 2439.098 4751.217
## 54 2341.812 4765.272
## 55 2294.598 4769.736
## 56 2132.124 4793.122
## 57 2133.407 4808.381
## 58 2097.369 4812.409
## 59 2244.068 4824.353
## 60 2113.429 4842.720
## 61 2163.875 4852.841
## 62 2176.629 4868.479
## 63 2128.862 4885.472
## 64 2206.628 4902.767
## 65 2245.022 4925.715
## 66 2155.405 4935.180
## 67 2243.493 4948.009
## 68 2112.239 4959.151
## 69 2129.518 4998.754
## 70 2084.103 5020.622
## 71 2173.850 5043.260
## 72 2109.963 5060.796
## 73 2158.028 5088.813
## 74 2081.504 5107.961
## 75 2156.276 5120.168
## 76 2249.599 5147.062
## 77 2269.430 5172.252
## 78 2314.281 5195.106
## 79 2315.151 5211.879
## 80 2439.754 5227.665
## 81 2241.734 5252.563
## 82 2078.534 5277.340
## 83 2098.823 5294.458
## 84 2089.660 5318.449
## 85 2049.758 5334.545
## 86 2155.854 5353.783
## 87 2134.124 5377.561
## 88 2160.390 5399.401
## 89 2270.401 5437.120
## 90 2215.743 5447.767
## 91 2224.602 5469.367
## 92 2145.369 5492.386
## 93 2144.766 5523.331
## 94 2031.474 5540.155
## 95 1906.687 5554.459
## 96 2045.175 5569.654
## 97 2211.198 5586.669
## 98 2090.380 5609.029
## 99 2067.639 5626.368
## 100 2034.554 5648.261
## 101 2025.512 5671.653
## 102 2021.354 5693.641
## 103 2003.550 5717.172
## 104 2030.370 5720.794
## 105 2051.992 5745.236
## 106 1909.162 5770.569
## 107 1892.781 5800.638
## 108 2014.526 5828.711
## 109 1877.861 5844.748
## 110 1789.141 5878.543
## 111 1819.854 5907.840
## 112 1799.499 5935.532
## 113 1777.189 5952.237
## 114 1702.881 5967.285
## 115 1606.627 5984.184
## 116 1630.309 5997.086
## 117 1656.814 6013.199
## 118 1558.855 6034.256
## 119 1488.422 6060.148
## 120 1576.163 6085.955
se hace la conversion del valor de la cuota a pesos por cada una de las trayectorias
tabla_resultados <- data.frame(
Periodo = tabla_amortizacion$Periodo,
Cuota_por_TRM_Max = round(tabla_amortizacion$Cuota * tabla_amortizacion$Trayectoria_Max, 2),
Cuota_por_TRM_Min = round(tabla_amortizacion$Cuota * tabla_amortizacion$Trayectoria_Min, 2),
Cuota_por_TRM_Mean = round(tabla_amortizacion$Cuota * tabla_amortizacion$Trayectoria_Mean, 2)
)
# Convertir numéricos a texto con separador de miles y símbolo peso ($)
tabla_resultados_formateada <- tabla_resultados
cols <- c("Cuota_por_TRM_Max", "Cuota_por_TRM_Min", "Cuota_por_TRM_Mean")
tabla_resultados_formateada[cols] <- lapply(tabla_resultados_formateada[cols], function(x) {
paste0("$", format(x, big.mark = ".", decimal.mark = ",", scientific = FALSE))
})
# Mostrar primeras filas formateadas
print(tabla_resultados_formateada)
## Periodo Cuota_por_TRM_Max Cuota_por_TRM_Min Cuota_por_TRM_Mean
## 1 1 $ 5.175.154 $5.175.154 $5.175.154
## 2 2 $ 5.409.925 $5.281.137 $5.204.272
## 3 3 $ 5.269.285 $5.701.312 $5.225.991
## 4 4 $ 5.241.048 $6.026.111 $5.236.269
## 5 5 $ 5.161.321 $5.559.291 $5.245.650
## 6 6 $ 5.382.933 $5.326.721 $5.271.844
## 7 7 $ 5.817.790 $5.286.553 $5.284.292
## 8 8 $ 5.423.714 $4.931.811 $5.310.944
## 9 9 $ 5.486.849 $4.533.584 $5.322.042
## 10 10 $ 5.943.236 $4.382.753 $5.348.447
## 11 11 $ 6.141.463 $4.158.513 $5.373.717
## 12 12 $ 6.131.973 $4.051.714 $5.396.493
## 13 13 $ 6.374.199 $4.206.097 $5.419.899
## 14 14 $ 6.333.088 $4.210.623 $5.441.990
## 15 15 $ 6.738.625 $4.227.074 $5.462.520
## 16 16 $ 6.680.073 $4.218.111 $5.477.033
## 17 17 $ 7.102.959 $3.945.556 $5.496.692
## 18 18 $ 6.989.310 $3.937.462 $5.523.842
## 19 19 $ 6.826.667 $4.055.614 $5.540.761
## 20 20 $ 6.996.020 $4.087.881 $5.554.499
## 21 21 $ 6.895.294 $4.271.037 $5.579.208
## 22 22 $ 6.906.439 $4.528.520 $5.595.972
## 23 23 $ 6.598.465 $4.331.073 $5.623.061
## 24 24 $ 6.824.568 $4.040.975 $5.644.954
## 25 25 $ 7.037.308 $4.091.527 $5.665.058
## 26 26 $ 7.053.227 $4.196.091 $5.685.073
## 27 27 $ 7.020.529 $4.027.563 $5.710.979
## 28 28 $ 6.959.065 $4.099.541 $5.734.151
## 29 29 $ 7.213.298 $4.044.594 $5.759.725
## 30 30 $ 7.206.787 $4.044.968 $5.765.167
## 31 31 $ 6.965.425 $3.987.912 $5.794.863
## 32 32 $ 6.921.678 $4.130.095 $5.815.963
## 33 33 $ 7.050.957 $4.070.286 $5.836.826
## 34 34 $ 6.988.821 $3.900.032 $5.866.601
## 35 35 $ 7.020.346 $3.623.541 $5.895.049
## 36 36 $ 7.424.947 $3.700.605 $5.917.560
## 37 37 $ 7.678.869 $3.637.736 $5.945.735
## 38 38 $ 8.008.463 $3.637.197 $5.968.594
## 39 39 $ 8.092.505 $3.565.086 $5.995.737
## 40 40 $ 7.756.801 $3.199.670 $6.013.237
## 41 41 $ 7.802.333 $3.315.868 $6.036.896
## 42 42 $ 7.563.946 $3.360.060 $6.049.672
## 43 43 $ 7.534.666 $3.435.692 $6.077.528
## 44 44 $ 7.633.904 $3.361.885 $6.106.848
## 45 45 $ 7.738.399 $3.561.862 $6.136.528
## 46 46 $ 8.024.622 $3.545.406 $6.154.440
## 47 47 $ 7.726.223 $3.576.837 $6.169.992
## 48 48 $ 7.438.006 $3.327.310 $6.198.909
## 49 49 $ 7.076.562 $3.277.214 $6.220.422
## 50 50 $ 6.424.794 $3.163.337 $6.245.795
## 51 51 $ 6.822.097 $3.306.643 $6.265.967
## 52 52 $ 6.930.930 $3.204.885 $6.289.224
## 53 53 $ 6.986.410 $3.238.610 $6.308.619
## 54 54 $ 6.636.406 $3.109.435 $6.327.281
## 55 55 $ 7.343.204 $3.046.744 $6.333.207
## 56 56 $ 7.313.358 $2.831.013 $6.364.259
## 57 57 $ 7.815.542 $2.832.717 $6.384.520
## 58 58 $ 8.022.124 $2.784.866 $6.389.868
## 59 59 $ 8.505.808 $2.979.652 $6.405.728
## 60 60 $ 8.350.803 $2.806.189 $6.430.115
## 61 61 $ 8.436.155 $2.873.172 $6.443.554
## 62 62 $ 8.835.961 $2.890.106 $6.464.317
## 63 63 $ 9.346.834 $2.826.682 $6.486.880
## 64 64 $ 9.703.209 $2.929.938 $6.509.846
## 65 65 $ 9.894.369 $2.980.918 $6.540.315
## 66 66 $ 9.997.911 $2.861.925 $6.552.883
## 67 67 $10.343.059 $2.978.887 $6.569.916
## 68 68 $10.054.039 $2.804.610 $6.584.711
## 69 69 $ 9.465.293 $2.827.553 $6.637.296
## 70 70 $ 9.444.953 $2.767.251 $6.666.332
## 71 71 $ 9.894.880 $2.886.417 $6.696.390
## 72 72 $10.048.878 $2.801.588 $6.719.674
## 73 73 $10.058.808 $2.865.407 $6.756.875
## 74 74 $ 9.613.698 $2.763.800 $6.782.300
## 75 75 $10.098.611 $2.863.082 $6.798.507
## 76 76 $ 9.933.848 $2.986.995 $6.834.218
## 77 77 $10.189.762 $3.013.326 $6.867.664
## 78 78 $ 9.755.803 $3.072.879 $6.898.009
## 79 79 $ 9.598.224 $3.074.035 $6.920.281
## 80 80 $10.482.107 $3.239.480 $6.941.242
## 81 81 $10.277.852 $2.976.552 $6.974.300
## 82 82 $11.004.785 $2.759.857 $7.007.200
## 83 83 $11.744.900 $2.786.796 $7.029.929
## 84 84 $11.868.326 $2.774.629 $7.061.783
## 85 85 $12.096.117 $2.721.649 $7.083.156
## 86 86 $13.601.097 $2.862.521 $7.108.700
## 87 87 $13.460.200 $2.833.668 $7.140.271
## 88 88 $14.321.482 $2.868.544 $7.169.271
## 89 89 $15.377.165 $3.014.615 $7.219.354
## 90 90 $15.534.498 $2.942.042 $7.233.490
## 91 91 $15.792.923 $2.953.805 $7.262.171
## 92 92 $15.983.983 $2.848.599 $7.292.735
## 93 93 $16.126.476 $2.847.798 $7.333.824
## 94 94 $16.206.636 $2.697.370 $7.356.162
## 95 95 $16.680.979 $2.531.680 $7.375.156
## 96 96 $17.067.460 $2.715.564 $7.395.331
## 97 97 $18.423.221 $2.936.006 $7.417.923
## 98 98 $18.460.119 $2.775.586 $7.447.613
## 99 99 $18.783.183 $2.745.391 $7.470.636
## 100 100 $18.707.962 $2.701.460 $7.499.705
## 101 101 $18.799.131 $2.689.455 $7.530.765
## 102 102 $19.733.820 $2.683.934 $7.559.960
## 103 103 $19.270.080 $2.660.293 $7.591.204
## 104 104 $19.267.993 $2.695.905 $7.596.013
## 105 105 $19.274.064 $2.724.614 $7.628.468
## 106 106 $18.994.947 $2.534.967 $7.662.103
## 107 107 $20.238.732 $2.513.215 $7.702.030
## 108 108 $21.091.635 $2.674.867 $7.739.304
## 109 109 $21.221.934 $2.493.405 $7.760.598
## 110 110 $21.866.804 $2.375.604 $7.805.470
## 111 111 $21.215.498 $2.416.384 $7.844.370
## 112 112 $20.669.503 $2.389.357 $7.881.140
## 113 113 $20.038.174 $2.359.733 $7.903.321
## 114 114 $21.136.524 $2.261.069 $7.923.302
## 115 115 $21.518.142 $2.133.263 $7.945.740
## 116 116 $22.226.466 $2.164.708 $7.962.871
## 117 117 $21.990.735 $2.199.901 $7.984.266
## 118 118 $23.364.138 $2.069.831 $8.012.224
## 119 119 $24.781.420 $1.976.311 $8.046.604
## 120 120 $26.157.373 $2.092.814 $8.080.870
De acuerdo a los resultados podemos evidenciar que ; 1 En los primeros meses, las cuotas se mantienen relativamente estables (entre $5 y $6 millones en el promedio).
2 A medida que avanza el tiempo, la trayectoria máxima eleva mucho el valor de la cuota (hasta más de $26 millones en el mes 120).
3 En contraste, la trayectoria mínima reduce las cuotas de forma progresiva (a niveles cercanos a $2 millones – $3 millones en los últimos años).
4 La trayectoria promedio se mantiene en un rango más controlado, pero también muestra un incremento sostenido en el largo plazo, cerrando alrededor de $8 millones en la última cuota.
El código deja en evidencia la sensibilidad del crédito a la TRM:
Si el dólar sube mucho (trayectoria máxima), el costo en pesos del crédito se dispara, haciendo más costoso el financiamiento.
Si el dólar baja (trayectoria mínima), las cuotas en pesos se reducen considerablemente, lo cual beneficia al deudor.
En el escenario promedio, se observa una tendencia de aumento que refleja el riesgo de depender de la volatilidad del tipo de cambio.
Se escoje el futuro de divisas TMRH26F, el cual salio al mercado el mes de marzo y tiene una duracion de un año, su fecha de vencimiento es el 11 de marzo de 2026, el tamaño del contrato es de $50000 dolares por contrato
data=read.table(file.choose(),head=T)
El modelo sugiere una depreciación esperada del COP frente al USD, consistente con la diferencia de tasas de interés y la tendencia histórica.
La volatilidad juega un papel crucial: a 10 años, la TRM proyectada podría terminar en un rango muy amplio,lo que enfatiza la importancia de cobertura en derivados.En el corto plazo (1 año), el pronóstico es más confiable; en el largo plazo, la dispersión hace que el rango de escenarios sea demasiado amplio para tomar decisiones concretas sin cobertura.
El GBM es una buena aproximación inicial, aunque en la práctica se sabe que los tipos de cambio pueden tener saltos y choques estructurales (eventos políticos, externos, etc.), que el modelo no capta.
La informa historica que nos permitio recojer la BVC “Bolsa de varolres de Colombia”, es de gran ayda para poder realizar la simulacion del Fututo, aunque es de notar que llos pocos datos permitidos pueden generar alteraciones en el momento de realizar el analisis.
futuro=data[,1]
## rendimiento continuuo de los precios
lrtnf=diff(log(futuro))
plot.ts(lrtnf)
mes_año<-12
mu_f=exp(mean(lrtnf*mes_año))-1
sigma_f=sqrt(var(lrtnf)*mes_año)
F0 <- tail(futuro, 1) # último precio
cat("Media (mu) mensual:", round(mu_f, 6), " | Desviación (sigma):", round(sigma_f, 6), "\n")
## Media (mu) mensual: -0.042813 | Desviación (sigma): 0.051256
s0_f <- tail(futuro, 1) # último precio
N=1000 # Número de simulaciones
meses=12
tasa_ext<-0.048
tasa_cop <- 0.098
F0<-s0_f*((1+tasa_cop)/(1+tasa_ext)^(1/12))
meses=12 # 10 años
dt=1/meses
T=120
vec=rep(F0,N)
mb_2=matrix(ncol=N,nrow = T)
mb_2[1,]=vec ########hago la matriz y pongo s0 como valor inicial
for (i in 1:N) {
for (t in 2:T) {
mb_2[t,i]=mb_2[(t-1),i]*exp((mu_f-(0.5*(sigma_f^2)))*(dt)+sigma_f*(dt^(1/2))*qnorm(runif(1,min =0,max = 1 )))
}
}
#grafica de las trayectorias
dev.new()
matplot(mb_2,type = "l", lty = 1, col = rgb(0, 0, 1, alpha = 0.1),
xlab = "0-10 años* por meses", ylab = "TRM", main = "Simulación de la TRM (GBM)")
Luego de la simulación realizada, vemos que el comportamiento de la tasa representativa del mercado tiene una tendencia a la baja esto es generado, por la informacion historica recogida en la cuan los ultimos meses el precio del dolar ha teniado un comportamiento bajsita.
Esto nos puede inducir a tomar una pocision en corto
Tendencia central (línea negra) La TRM promedio muestra una leve pendiente descendente.
Esto significa que, con los parámetros históricos, el modelo proyecta que el COP podría apreciarse ligeramente frente al USD en este horizonte.
A medida que pasan los meses, el abanico de posibles valores se ensancha mucho.
Al final del año 10, el rango va desde menos de 2000 COP/USD hasta más de 4000 COP/USD.
Esto evidencia que la incertidumbre es enorme en horizontes largos.
Fuerte devaluación → TRM > 4000. Riesgo crítico para una posicion en corto ya que muestra una posible alsa en el precio de la trm.
Apreciación fuerte → TRM < 2000. Riesgo crítico posicion el largo.
Aunque con poca posibilidad, el modelo muestra que son escenarios posibles.
La simulación con GBM muestra que, entre los años 6 y 10, la TRM en promedio tendería a bajar, pero con una amplísima dispersión que deja escenarios devaluatorios y apreciatorios muy marcados.
Esto hace que la conclusión central no sea “la TRM va a estar en X”, sino que el riesgo cambiario de largo plazo es altísimo y debe apalancarse con derivados financieros.
# precio futuro al inicio del año 6
F0_2<- s0_f * (1 + tasa_cop) / ((1 + tasa_ext)^(6))
dt <- 1/meses # paso mensual
T <- 48 # 4 años (años 6 a 10)
vec <- rep(F0_2, N)
mb_3 <- matrix(ncol = N, nrow = T)
mb_3[1,] <- vec
for (i in 1:N) {
for (t in 2:T) {
mb_3[t,i] <- mb_3[t-1,i] * exp((mu_f - 0.5*sigma_f^2)*dt +
sigma_f*sqrt(dt)*rnorm(1))
}
}
dev.new()
matplot(mb_3, type = "l", lty = 1,
col = rgb(0, 0, 1, alpha = 0.1),
xlab = "Meses (año 6 al 10)", ylab = "TRM",
main = "Simulación de la TRM (GBM) - años 6 a 10")
max_fut <- which.max(mb_3[T, ])
min_fut <- which.min(mb_3[T, ])
mean_fut <- rowMeans(mb_3)
# Graficar todas las trayectorias
matplot(mb_3, type = "l", lty = 1, col = rgb(0, 0, 1, alpha = 0.1),
xlab = "Meses (año 6 al 10)", ylab = "TRM", main = "Simulación de la TRM (GBM)")
# Añadir líneas para la más alta, más baja y promedio
lines(mb_3[, max_fut], col = "red", lwd = 2)
lines(mb_3[, min_fut], col = "green", lwd = 2)
lines(mean_fut, col = "black", lwd = 2)
plot(mean_fut, type = "l", lwd = 2, col = "black",
xlab = "Meses (año 6 al 10)", ylab = "TRM", main = "Trayectorias destacadas de la TRM",
ylim = range(c(mb_3[, max_fut], mb_3[, min_fut], mean_fut)))
lines(mb_3[, max_fut], col = "red", lwd = 2)
lines(mb_3[, min_fut], col = "green", lwd = 2)
legend("topleft",
legend = c("Promedio", "Máxima", "Mínima"),
col = c("black", "green", "red"),
lty = 1, lwd = 2)
Como se puede visualizar en el gráfico muestra tres trayectorias destacadas de la TRM proyectada entre los años 6 y 10: promedio (línea negra),mínima (verde) y máxima (roja). La trayectoria promedio revela una tendencia decreciente de la TRM, lo que sugiere que, en promedio, el modelo espera una depreciación del dólar frente al peso colombiano en el horizonte analizado.
Sin embargo, la dispersión es notoria, la trayectoria máxima indica un escenario de fuerte apreciación del dólar (superando los 4000), mientras que la mínima refleja un escenario contrario, con caídas sostenidas hasta niveles cercanos a 2000.
En síntesis, aunque el escenario central apunta a una baja de la TRM, la alta volatilidad reflejada en las trayectorias extremas muestra que existe un rango muy amplio de posibles r.
precio_inicial_t1 <- mb_3[, max_fut]
tamaño_con<-50000
# Crear el data.frame con la columna inicial
tabla <- data.frame(
Precio_inicial_t1 = precio_inicial_t1
)
tabla$Dif <- c(NA, diff(tabla$Precio_inicial_t1))
tabla$Valor_Total <- tabla$Precio_inicial_t1 * tamaño_con
tabla$Dif_tamaño <- (c(NA, diff(tabla$Precio_inicial_t1)))*tamaño_con
suma_total <- sum(tabla$Dif_tamaño, na.rm = TRUE)
fila_suma <- data.frame(
Precio_inicial_t1 = NA,
Dif = NA,
Valor_Total = NA,
Dif_tamaño = suma_total
)
tabla_final <- rbind(tabla, fila_suma)
# Formato con punto de miles y sin decimales
tabla_final$Valor_Total <- formatC(tabla_final$Valor_Total, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla_final$Dif_tamaño <- formatC(tabla_final$Dif_tamaño, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla_final$Precio_inicial_t1 <- formatC(tabla_final$Precio_inicial_t1, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
# Agregar signo $ manualmente
tabla_final$Valor_Total <- paste0("$", tabla_final$Valor_Total)
tabla_final$Dif_tamaño <- paste0("$", tabla_final$Dif_tamaño)
tabla_final$Precio_inicial_t1 <- paste0("$", tabla_final$Precio_inicial_t1)
# Mostrar la tabla
tabla_final
## Precio_inicial_t1 Dif Valor_Total Dif_tamaño
## 1 $3.314 NA $165.692.080 $NA
## 2 $3.296 -17.796877 $164.802.236 $-889.844
## 3 $3.343 46.498682 $167.127.170 $2.324.934
## 4 $3.314 -28.106102 $165.721.865 $-1.405.305
## 5 $3.345 30.525325 $167.248.131 $1.526.266
## 6 $3.397 51.612076 $169.828.735 $2.580.604
## 7 $3.367 -29.483741 $168.354.548 $-1.474.187
## 8 $3.346 -20.924863 $167.308.305 $-1.046.243
## 9 $3.348 1.985518 $167.407.581 $99.276
## 10 $3.461 113.136248 $173.064.393 $5.656.812
## 11 $3.514 52.874278 $175.708.107 $2.643.714
## 12 $3.576 61.426117 $178.779.413 $3.071.306
## 13 $3.566 -9.193031 $178.319.761 $-459.652
## 14 $3.547 -19.046038 $177.367.459 $-952.302
## 15 $3.605 57.228357 $180.228.877 $2.861.418
## 16 $3.624 19.393724 $181.198.563 $969.686
## 17 $3.636 11.803576 $181.788.742 $590.179
## 18 $3.685 49.021389 $184.239.812 $2.451.069
## 19 $3.664 -21.026996 $183.188.462 $-1.051.350
## 20 $3.711 47.397119 $185.558.318 $2.369.856
## 21 $3.720 8.715893 $185.994.112 $435.795
## 22 $3.655 -65.299902 $182.729.117 $-3.264.995
## 23 $3.766 111.888934 $188.323.564 $5.594.447
## 24 $3.738 -28.710217 $186.888.053 $-1.435.511
## 25 $3.746 8.255655 $187.300.836 $412.783
## 26 $3.814 68.030860 $190.702.379 $3.401.543
## 27 $3.819 4.852156 $190.944.987 $242.608
## 28 $3.728 -91.103522 $186.389.811 $-4.555.176
## 29 $3.688 -39.887523 $184.395.434 $-1.994.376
## 30 $3.700 11.866133 $184.988.741 $593.307
## 31 $3.755 55.370705 $187.757.276 $2.768.535
## 32 $3.765 10.160346 $188.265.294 $508.017
## 33 $3.785 19.863228 $189.258.455 $993.161
## 34 $3.739 -46.456988 $186.935.606 $-2.322.849
## 35 $3.775 36.324962 $188.751.854 $1.816.248
## 36 $3.831 55.498687 $191.526.788 $2.774.934
## 37 $3.824 -6.527338 $191.200.421 $-326.367
## 38 $3.887 63.441053 $194.372.474 $3.172.053
## 39 $3.876 -11.558743 $193.794.537 $-577.937
## 40 $3.863 -12.526794 $193.168.197 $-626.340
## 41 $3.767 -96.111758 $188.362.609 $-4.805.588
## 42 $3.806 38.405221 $190.282.870 $1.920.261
## 43 $3.917 111.402808 $195.853.011 $5.570.140
## 44 $3.924 6.667659 $196.186.394 $333.383
## 45 $4.018 94.457080 $200.909.248 $4.722.854
## 46 $3.995 -22.813304 $199.768.582 $-1.140.665
## 47 $4.028 32.532010 $201.395.183 $1.626.600
## 48 $3.991 -37.272006 $199.531.583 $-1.863.600
## 49 $NA NA $NA $33.839.503
cat("El valor del flujo de caja:",suma_total, "\n")
## El valor del flujo de caja: 33839503
# Seleccionar filas específicas
tabla_seleccion <- tabla_final[c(12, 24, 36, 48), ]
# Mostrar la nueva tabla
tabla_seleccion
## Precio_inicial_t1 Dif Valor_Total Dif_tamaño
## 12 $3.576 61.42612 $178.779.413 $3.071.306
## 24 $3.738 -28.71022 $186.888.053 $-1.435.511
## 36 $3.831 55.49869 $191.526.788 $2.774.934
## 48 $3.991 -37.27201 $199.531.583 $-1.863.600
El flujo de caja acumulado al final del periodo es de $41.805.792, lo que significa que esta trayectoria máxima genera un beneficio neto importante en el horizonte del contrato.
La tabla de selección en los meses 12, 24, 36 y 48 muestran los cierres del contrato Futuro En el mes 12 el cambio aún es bajo ($158.239).Al mes 24 ya asciende a $684.657, En el mes 36 se observa un salto significativo ($6.138.117), indicando una fuerte apreciación de la TRM. En el mes 48 todavía se mantiene el impulso con $2.569.484 adicionales.
Para un inversionista que mantuviera contratos en esta trayectoria, el resultado sería altamente favorable, mostrando que los vencimientos más lejanos (meses 36 y 48) concentran la mayor parte de las ganancias.
Esto es consistente con la naturaleza de la simulación GBM: a mayor horizonte, mayor dispersión de resultados, y en el caso de la trayectoria máxima, mayor potencial de rentabilidad.En conclusión: la trayectoria máxima del futuro genera un flujo de caja positivo acumulado de más de $41 millones, con ganancias crecientes hacia los vencimientos largos, lo que refleja el potencial de valorización del contrato bajo escenarios optimistas.
## vencimiento para trayectoria baja
precio_inicial_t1 <- mb_3[, min_fut]
tamaño_con<-50000
# Crear el data.frame con la columna inicial
tabla <- data.frame(
Precio_inicial_t1 = precio_inicial_t1
)
tabla$Dif <- c(NA, diff(tabla$Precio_inicial_t1))
tabla$Valor_Total <- tabla$Precio_inicial_t1 * tamaño_con
tabla$Dif_tamaño <- (c(NA, diff(tabla$Precio_inicial_t1)))*tamaño_con
suma_total <- sum(tabla$Dif_tamaño, na.rm = TRUE)
fila_suma <- data.frame(
Precio_inicial_t1 = NA,
Dif = NA,
Valor_Total = NA,
Dif_tamaño = suma_total
)
tabla_final <- rbind(tabla, fila_suma)
# Formato con punto de miles y sin decimales
tabla_final$Valor_Total <- formatC(tabla_final$Valor_Total, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla_final$Dif_tamaño <- formatC(tabla_final$Dif_tamaño, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla_final$Precio_inicial_t1 <- formatC(tabla_final$Precio_inicial_t1, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
# Agregar signo $ manualmente
tabla_final$Valor_Total <- paste0("$", tabla_final$Valor_Total)
tabla_final$Dif_tamaño <- paste0("$", tabla_final$Dif_tamaño)
tabla_final$Precio_inicial_t1 <- paste0("$", tabla_final$Precio_inicial_t1)
# Mostrar la tabla
tabla_final
## Precio_inicial_t1 Dif Valor_Total Dif_tamaño
## 1 $3.314 NA $165.692.080 $NA
## 2 $3.302 -12.0379775 $165.090.181 $-601.899
## 3 $3.329 27.6729172 $166.473.827 $1.383.646
## 4 $3.194 -135.3747548 $159.705.089 $-6.768.738
## 5 $3.117 -76.8079380 $155.864.692 $-3.840.397
## 6 $3.046 -71.1827030 $152.305.557 $-3.559.135
## 7 $3.025 -20.6579927 $151.272.657 $-1.032.900
## 8 $2.973 -52.8307233 $148.631.121 $-2.641.536
## 9 $2.913 -59.9081632 $145.635.713 $-2.995.408
## 10 $2.937 24.7435817 $146.872.892 $1.237.179
## 11 $2.876 -61.8596159 $143.779.911 $-3.092.981
## 12 $2.788 -87.1597068 $139.421.926 $-4.357.985
## 13 $2.749 -39.1669399 $137.463.579 $-1.958.347
## 14 $2.712 -36.9669466 $135.615.232 $-1.848.347
## 15 $2.698 -14.7170498 $134.879.379 $-735.852
## 16 $2.687 -10.7264064 $134.343.059 $-536.320
## 17 $2.717 29.7740711 $135.831.762 $1.488.704
## 18 $2.678 -38.2233770 $133.920.593 $-1.911.169
## 19 $2.700 21.8422504 $135.012.706 $1.092.113
## 20 $2.606 -94.1679713 $130.304.307 $-4.708.399
## 21 $2.593 -12.8176156 $129.663.427 $-640.881
## 22 $2.559 -34.0415817 $127.961.347 $-1.702.079
## 23 $2.574 15.2696339 $128.724.829 $763.482
## 24 $2.525 -49.0290512 $126.273.377 $-2.451.453
## 25 $2.547 21.7461635 $127.360.685 $1.087.308
## 26 $2.488 -58.7737496 $124.421.997 $-2.938.687
## 27 $2.468 -20.3777594 $123.403.109 $-1.018.888
## 28 $2.479 10.6564127 $123.935.930 $532.821
## 29 $2.482 3.6703328 $124.119.447 $183.517
## 30 $2.456 -25.9984923 $122.819.522 $-1.299.925
## 31 $2.428 -28.3066353 $121.404.190 $-1.415.332
## 32 $2.411 -16.5952663 $120.574.427 $-829.763
## 33 $2.341 -70.7000621 $117.039.424 $-3.535.003
## 34 $2.287 -54.1381140 $114.332.518 $-2.706.906
## 35 $2.327 40.3635081 $116.350.694 $2.018.175
## 36 $2.285 -41.9086612 $114.255.260 $-2.095.433
## 37 $2.256 -29.2471969 $112.792.901 $-1.462.360
## 38 $2.242 -14.1942359 $112.083.189 $-709.712
## 39 $2.201 -40.3304928 $110.066.664 $-2.016.525
## 40 $2.234 33.0036554 $111.716.847 $1.650.183
## 41 $2.234 0.0641352 $111.720.054 $3.207
## 42 $2.186 -48.8393727 $109.278.085 $-2.441.969
## 43 $2.212 26.1968556 $110.587.928 $1.309.843
## 44 $2.183 -28.5004353 $109.162.906 $-1.425.022
## 45 $2.157 -25.8475305 $107.870.530 $-1.292.377
## 46 $2.141 -16.4096860 $107.050.045 $-820.484
## 47 $2.159 18.4804224 $107.974.066 $924.021
## 48 $2.150 -9.2960845 $107.509.262 $-464.804
## 49 $NA NA $NA $-58.182.817
cat("El valor del flujo de caja:",suma_total, "\n")
## El valor del flujo de caja: -58182817
# Seleccionar filas específicas
tabla_seleccion <- tabla_final[c(12, 24, 36, 48), ]
# Mostrar la nueva tabla
tabla_seleccion
## Precio_inicial_t1 Dif Valor_Total Dif_tamaño
## 12 $2.788 -87.159707 $139.421.926 $-4.357.985
## 24 $2.525 -49.029051 $126.273.377 $-2.451.453
## 36 $2.285 -41.908661 $114.255.260 $-2.095.433
## 48 $2.150 -9.296085 $107.509.262 $-464.804
La simulación muestra cómo, en el escenario más desfavorable (trayectoria mínima de la TRM), el contrato genera pérdidas acumuladas significativas.
La TRM inicial estaba en $3.314, pero al finalizar cae hasta los $1.959, lo que representa una fuerte devaluación del flujo proyectado.
En los hitos seleccionados (mes 12, 24, 36 y 48),los cuales serian los cierres del contrato los precios siguen una tendencia descendente y no logran recuperarse, por tal motivo se sugeriria cambian de posicón es decir pasar de largo a una pocion en corto
## vencimiento para trayectoria baja
precio_inicial_t1 <- rowMeans(mb_3)
tamaño_con<-50000
# Crear el data.frame con la columna inicial
tabla <- data.frame(
Precio_inicial_t1 = precio_inicial_t1
)
tabla$Dif <- c(NA, diff(tabla$Precio_inicial_t1))
tabla$Valor_Total <- tabla$Precio_inicial_t1 * tamaño_con
tabla$Dif_tamaño <- (c(NA, diff(tabla$Precio_inicial_t1)))*tamaño_con
suma_total <- sum(tabla$Dif_tamaño, na.rm = TRUE)
fila_suma <- data.frame(
Precio_inicial_t1 = NA,
Dif = NA,
Valor_Total = NA,
Dif_tamaño = suma_total
)
print(suma_total)
## [1] -25043994
tabla_final <- rbind(tabla, fila_suma)
# Formato con punto de miles y sin decimales
tabla_final$Valor_Total <- formatC(tabla_final$Valor_Total, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla_final$Dif_tamaño <- formatC(tabla_final$Dif_tamaño, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla_final$Precio_inicial_t1 <- formatC(tabla_final$Precio_inicial_t1, format="f", big.mark=".", digits=0)
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
# Agregar signo $ manualmente
tabla_final$Valor_Total <- paste0("$", tabla_final$Valor_Total)
tabla_final$Dif_tamaño <- paste0("$", tabla_final$Dif_tamaño)
tabla_final$Precio_inicial_t1 <- paste0("$", tabla_final$Precio_inicial_t1)
# Mostrar la tabla
tabla_final
## Precio_inicial_t1 Dif Valor_Total Dif_tamaño
## 1 $3.314 NA $165.692.080 $NA
## 2 $3.304 -10.306050 $165.176.777 $-515.303
## 3 $3.291 -12.887589 $164.532.398 $-644.379
## 4 $3.281 -9.409466 $164.061.924 $-470.473
## 5 $3.271 -10.420590 $163.540.895 $-521.029
## 6 $3.263 -7.662114 $163.157.789 $-383.106
## 7 $3.250 -12.859395 $162.514.819 $-642.970
## 8 $3.238 -11.843717 $161.922.634 $-592.186
## 9 $3.226 -12.264430 $161.309.412 $-613.222
## 10 $3.214 -12.088396 $160.704.992 $-604.420
## 11 $3.203 -11.221434 $160.143.921 $-561.072
## 12 $3.194 -8.585096 $159.714.666 $-429.255
## 13 $3.180 -13.955361 $159.016.898 $-697.768
## 14 $3.169 -10.913808 $158.471.207 $-545.690
## 15 $3.156 -13.089606 $157.816.727 $-654.480
## 16 $3.146 -10.634905 $157.284.982 $-531.745
## 17 $3.133 -12.346927 $156.667.635 $-617.346
## 18 $3.121 -12.502302 $156.042.520 $-625.115
## 19 $3.113 -7.837380 $155.650.651 $-391.869
## 20 $3.104 -9.012898 $155.200.006 $-450.645
## 21 $3.092 -12.407839 $154.579.614 $-620.392
## 22 $3.080 -11.554184 $154.001.905 $-577.709
## 23 $3.072 -8.288465 $153.587.482 $-414.423
## 24 $3.059 -12.592016 $152.957.881 $-629.601
## 25 $3.048 -10.783991 $152.418.682 $-539.200
## 26 $3.037 -11.403891 $151.848.487 $-570.195
## 27 $3.028 -9.339506 $151.381.512 $-466.975
## 28 $3.017 -10.719670 $150.845.528 $-535.984
## 29 $3.006 -10.818890 $150.304.584 $-540.944
## 30 $2.995 -10.699051 $149.769.631 $-534.953
## 31 $2.984 -11.839069 $149.177.678 $-591.953
## 32 $2.974 -9.528426 $148.701.257 $-476.421
## 33 $2.964 -9.620445 $148.220.234 $-481.022
## 34 $2.953 -11.882827 $147.626.093 $-594.141
## 35 $2.943 -9.071863 $147.172.500 $-453.593
## 36 $2.936 -7.725583 $146.786.221 $-386.279
## 37 $2.924 -11.746929 $146.198.874 $-587.346
## 38 $2.915 -9.297222 $145.734.013 $-464.861
## 39 $2.905 -10.104674 $145.228.779 $-505.234
## 40 $2.895 -9.132661 $144.772.146 $-456.633
## 41 $2.885 -10.410172 $144.251.638 $-520.509
## 42 $2.875 -10.386376 $143.732.319 $-519.319
## 43 $2.864 -10.519686 $143.206.335 $-525.984
## 44 $2.854 -9.974859 $142.707.592 $-498.743
## 45 $2.844 -9.821407 $142.216.521 $-491.070
## 46 $2.834 -10.273337 $141.702.854 $-513.667
## 47 $2.822 -12.120244 $141.096.842 $-606.012
## 48 $2.813 -8.975140 $140.648.085 $-448.757
## 49 $NA NA $NA $-25.043.994
cat("El valor del flujo de caja:",suma_total, "\n")
## El valor del flujo de caja: -25043994
# Seleccionar filas específicas
tabla_seleccion <- tabla_final[c(12, 24, 36, 48), ]
# Mostrar la nueva tabla
tabla_seleccion
## Precio_inicial_t1 Dif Valor_Total Dif_tamaño
## 12 $3.194 -8.585096 $159.714.666 $-429.255
## 24 $3.059 -12.592016 $152.957.881 $-629.601
## 36 $2.936 -7.725583 $146.786.221 $-386.279
## 48 $2.813 -8.975140 $140.648.085 $-448.757
La trayectoria promedio muestra una tendencia bajista en el precio del subyacente.
Esto genera un flujo de caja total negativo de -25.2 millones, lo cual sería preocupante si el contrato se valorara con base en esta trayectoria.
En términos de derivados financieros, esto sugiere que:
Si es una posición larga, hay pérdidas significativas.
Si es una posición corta, en cambio, sería favorable (ganancias).
##simulacion
precio_futuro <- s0_f
fecha_vencimiento <- as.Date("2026-03-11") # fecha en formato Date
tamaño_contrato_trm <- 50000
tamaño_contrato_trx<-1000
margen_trm <- 0.063 # proporción (6.3%)
margen_trx <- 0.063 # proporción (6.3%)
# Crear data frame
contrato_df <- data.frame(
Precio_Futuro = precio_futuro,
Fecha_Vencimiento = fecha_vencimiento,
Tamano_Contrato_trm = tamaño_contrato_trm,
Tamano_Contrato_trm = tamaño_contrato_trx,
Margen_trm = margen_trm,
Margen_trx = margen_trx
)
contrato_df
## Precio_Futuro Fecha_Vencimiento Tamano_Contrato_trm Tamano_Contrato_trm.1
## 1 3998.5 2026-03-11 50000 1000
## Margen_trm Margen_trx
## 1 0.063 0.063
contrato_trm<-tamaño_contrato_trm*F0_2
contrato_trx<-tamaño_contrato_trx*F0_2
#margen inicial
margen_I_trm<- contrato_trm*margen_trm
margen_I_trx<- contrato_trx*margen_trx
#margen de mantenimiento 50%
margen_de_mante_trm <-margen_I_trm*0.5
margen_de_mante_trx <-margen_I_trx*0.5
# Supongo que ya tienes estas variables definidas:
# tamaño_con, F0_2, tamaño_contrato_trx, margen_trm, margen_trx
# Contratos
contrato_trm <- tamaño_contrato_trm * F0_2
contrato_trx <- tamaño_contrato_trx * F0_2
# Márgenes iniciales
margen_I_trm <- contrato_trm * margen_trm
margen_I_trx <- contrato_trx * margen_trx
# Márgenes de mantenimiento (50%)
margen_de_mante_trm <- margen_I_trm * 0.5
margen_de_mante_trx <- margen_I_trx * 0.5
# Construir tabla en data.frame
tabla_margenes <- data.frame(
Concepto = c("Contrato TRM", "Contrato TRX",
"Margen Inicial TRM", "Margen Inicial TRX",
"Margen Mantenimiento TRM", "Margen Mantenimiento TRX"),
Valor = c(contrato_trm, contrato_trx,
margen_I_trm, margen_I_trx,
margen_de_mante_trm, margen_de_mante_trx)
)
# Mostrar en formato pesos
tabla_margenes$Valor <- paste0("$", format(tabla_margenes$Valor, big.mark = ",", scientific = FALSE))
tabla_margenes
## Concepto Valor
## 1 Contrato TRM $165,692,080
## 2 Contrato TRX $ 3,313,842
## 3 Margen Inicial TRM $ 10,438,601
## 4 Margen Inicial TRX $ 208,772
## 5 Margen Mantenimiento TRM $ 5,219,301
## 6 Margen Mantenimiento TRX $ 104,386
El ejercicio parte de la definición de dos tipos de contratos de futuros listados en la Bolsa de Valores de Colombia (BVC): el contrato sobre TRM, cuyo tamaño es de 50.000 USD, y el contrato sobre TRX, con un tamaño mucho menor de 1.000 USD. Ambos están sujetos a un esquema de
garantías definido por la cámara de riesgo central de contraparte, donde se exige un margen inicial del 6,3% sobre la exposición y un margen de mantenimiento del 50% de dicho valor inicial.
En este escenario, el contrato de TRM genera una exposición inicial de $ 165.692.080, lo que implica un margen inicial de $10.438.601 y un margen de mantenimiento de $5.219.301. Por su parte, el contrato de TRX tiene una exposición significativamente menor de $3.313.842, con un margen inicial de apenas $208.772 y un margen de mantenimiento de $104.386.
La comparación refleja una situación crítica para la toma de decisiones: mientras que un contrato TRM expone a la empresa a grandes variaciones en el flujo de caja por su tamaño, los contratos TRX permiten modular mejor la cobertura al trabajar con montos mucho más pequeños y manejables.
Esto es relevante porque en contextos de alta volatilidad del tipo de cambio, un contrato TRM puede generar llamados de margen muy elevados que comprometan la liquidez de la empresa.
En conclusión, si bien ambos contratos cumplen con las exigencias de margen de la BVC, la elección depende de la estrategia de cobertura y del perfil de riesgo de la empresa.
El TRM es adecuado para coberturas de grandes montos y jugadores institucionales con capacidad de fondeo, mientras que el TRX resulta más eficiente para empresas medianas o con necesidad de calibrar su exposición sin poner en riesgo excesivo sus flujos de caja.
precio_inicial_t1 <- mb_3[, max_fut]
inverision_ini<-500000000*0.75/F0
tamaño_con<-50000
num_contratos <- floor(inverision_ini/ tamaño_con)
F_03<-primer_precio <- precio_inicial_t1[1]
exposicion_total<-F_03*tamaño_con*num_contratos
margen_ini<-exposicion_total*margen_trm
margen_mant<-margen_ini*0.5
# Crear el data.frame con la columna inicial
tabla <- data.frame(
Precio_inicial_t1 = precio_inicial_t1
)
tabla$Dif <- c(NA, diff(tabla$Precio_inicial_t1))
tabla$liq <- tabla$Dif * tamaño_con
tabla$Margen <- precio_inicial_t1*tamaño_con
tabla$Margen <- c(tabla$Margen[1], tabla$Margen[1] + cumsum(tabla$liq[-1]))
tabla$mangen_mant<-margen_mant
# Crear columna con la diferencia si el margen es menor al margen de mantenimiento
tabla$margin_call <- ifelse(tabla$Margen < margen_mant, margen_ini -tabla$margin_call, "")
# Formatear columnas con punto de miles y sin decimales
tabla$Margen <- paste0("$", formatC(tabla$Margen, format = "f", big.mark = ".", digits = 0))
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla$liq <- paste0("$", formatC(tabla$liq, format = "f", big.mark = ".", digits = 0))
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla$margin_call <- paste0("$", formatC(tabla$margin_call, format = "f", big.mark = ".", digits = 0))
tabla$margen_mant <- paste0("$", formatC(tabla$margen_mant, format = "f", big.mark = ".", digits = 0))
# Mostrar tabla
print(tabla)
## Precio_inicial_t1 Dif liq Margen mangen_mant
## 1 3313.842 NA $NA $165.692.080 5219301
## 2 3296.045 -17.796877 $-889.844 $164.802.236 5219301
## 3 3342.543 46.498682 $2.324.934 $167.127.170 5219301
## 4 3314.437 -28.106102 $-1.405.305 $165.721.865 5219301
## 5 3344.963 30.525325 $1.526.266 $167.248.131 5219301
## 6 3396.575 51.612076 $2.580.604 $169.828.735 5219301
## 7 3367.091 -29.483741 $-1.474.187 $168.354.548 5219301
## 8 3346.166 -20.924863 $-1.046.243 $167.308.305 5219301
## 9 3348.152 1.985518 $99.276 $167.407.581 5219301
## 10 3461.288 113.136248 $5.656.812 $173.064.393 5219301
## 11 3514.162 52.874278 $2.643.714 $175.708.107 5219301
## 12 3575.588 61.426117 $3.071.306 $178.779.413 5219301
## 13 3566.395 -9.193031 $-459.652 $178.319.761 5219301
## 14 3547.349 -19.046038 $-952.302 $177.367.459 5219301
## 15 3604.578 57.228357 $2.861.418 $180.228.877 5219301
## 16 3623.971 19.393724 $969.686 $181.198.563 5219301
## 17 3635.775 11.803576 $590.179 $181.788.742 5219301
## 18 3684.796 49.021389 $2.451.069 $184.239.812 5219301
## 19 3663.769 -21.026996 $-1.051.350 $183.188.462 5219301
## 20 3711.166 47.397119 $2.369.856 $185.558.318 5219301
## 21 3719.882 8.715893 $435.795 $185.994.112 5219301
## 22 3654.582 -65.299902 $-3.264.995 $182.729.117 5219301
## 23 3766.471 111.888934 $5.594.447 $188.323.564 5219301
## 24 3737.761 -28.710217 $-1.435.511 $186.888.053 5219301
## 25 3746.017 8.255655 $412.783 $187.300.836 5219301
## 26 3814.048 68.030860 $3.401.543 $190.702.379 5219301
## 27 3818.900 4.852156 $242.608 $190.944.987 5219301
## 28 3727.796 -91.103522 $-4.555.176 $186.389.811 5219301
## 29 3687.909 -39.887523 $-1.994.376 $184.395.434 5219301
## 30 3699.775 11.866133 $593.307 $184.988.741 5219301
## 31 3755.146 55.370705 $2.768.535 $187.757.276 5219301
## 32 3765.306 10.160346 $508.017 $188.265.294 5219301
## 33 3785.169 19.863228 $993.161 $189.258.455 5219301
## 34 3738.712 -46.456988 $-2.322.849 $186.935.606 5219301
## 35 3775.037 36.324962 $1.816.248 $188.751.854 5219301
## 36 3830.536 55.498687 $2.774.934 $191.526.788 5219301
## 37 3824.008 -6.527338 $-326.367 $191.200.421 5219301
## 38 3887.449 63.441053 $3.172.053 $194.372.474 5219301
## 39 3875.891 -11.558743 $-577.937 $193.794.537 5219301
## 40 3863.364 -12.526794 $-626.340 $193.168.197 5219301
## 41 3767.252 -96.111758 $-4.805.588 $188.362.609 5219301
## 42 3805.657 38.405221 $1.920.261 $190.282.870 5219301
## 43 3917.060 111.402808 $5.570.140 $195.853.011 5219301
## 44 3923.728 6.667659 $333.383 $196.186.394 5219301
## 45 4018.185 94.457080 $4.722.854 $200.909.248 5219301
## 46 3995.372 -22.813304 $-1.140.665 $199.768.582 5219301
## 47 4027.904 32.532010 $1.626.600 $201.395.183 5219301
## 48 3990.632 -37.272006 $-1.863.600 $199.531.583 5219301
## margin_call margen_mant
## 1 $ $
## 2 $ $
## 3 $ $
## 4 $ $
## 5 $ $
## 6 $ $
## 7 $ $
## 8 $ $
## 9 $ $
## 10 $ $
## 11 $ $
## 12 $ $
## 13 $ $
## 14 $ $
## 15 $ $
## 16 $ $
## 17 $ $
## 18 $ $
## 19 $ $
## 20 $ $
## 21 $ $
## 22 $ $
## 23 $ $
## 24 $ $
## 25 $ $
## 26 $ $
## 27 $ $
## 28 $ $
## 29 $ $
## 30 $ $
## 31 $ $
## 32 $ $
## 33 $ $
## 34 $ $
## 35 $ $
## 36 $ $
## 37 $ $
## 38 $ $
## 39 $ $
## 40 $ $
## 41 $ $
## 42 $ $
## 43 $ $
## 44 $ $
## 45 $ $
## 46 $ $
## 47 $ $
## 48 $ $
se realiza el flujo de caja de la trayectoria mas alta, el valor de apalncamiento es de $ 85,748 dolares en el año 1, lo cual implica que solo se pueda adquirir un contrato de divisas ya que este tiene un valor de $ 50000. Se realiza el flujo de caja para los ultimos 4 años donde el margen se ubica en $ 165´692.080. luego de la realizacion del flujo de caja vemos que apesar de que hubieron meses de perdida a acusa de la revalucion de la moneda colombia esta perdida no alcanzo a bajar por debajo del margen de mantenimiento, lo cual implica que no se tubiera que hacer proceso de rollover.
precio_inicial_t1 <- mb_3[, min_fut]
inverision_ini<-500000000*0.75/F0
tamaño_con<-50000
num_contratos <- floor(inverision_ini/ tamaño_con)
F_03<-primer_precio <- precio_inicial_t1[1]
exposicion_total<-F_03*tamaño_con*num_contratos
margen_ini<-exposicion_total*margen_trm
margen_mant<-margen_ini*0.5
# Crear el data.frame con la columna inicial
tabla <- data.frame(
Precio_inicial_t1 = precio_inicial_t1
)
tabla$Dif <- c(NA, diff(tabla$Precio_inicial_t1))
tabla$liq <- tabla$Dif * tamaño_con
tabla$Margen <- precio_inicial_t1*tamaño_con
tabla$Margen <- c(tabla$Margen[1], tabla$Margen[1] + cumsum(tabla$liq[-1]))
tabla$mangen_mant<-margen_mant
# Crear columna con la diferencia si el margen es menor al margen de mantenimiento
tabla$margin_call <- ifelse(tabla$Margen < margen_mant, margen_ini -tabla$margin_call, "")
# Formatear columnas con punto de miles y sin decimales
tabla$Margen <- paste0("$", formatC(tabla$Margen, format = "f", big.mark = ".", digits = 0))
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla$liq <- paste0("$", formatC(tabla$liq, format = "f", big.mark = ".", digits = 0))
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla$margin_call <- paste0("$", formatC(tabla$margin_call, format = "f", big.mark = ".", digits = 0))
tabla$margen_mant <- paste0("$", formatC(tabla$margen_mant, format = "f", big.mark = ".", digits = 0))
# Mostrar tabla
print(tabla)
## Precio_inicial_t1 Dif liq Margen mangen_mant
## 1 3313.842 NA $NA $165.692.080 5219301
## 2 3301.804 -12.0379775 $-601.899 $165.090.181 5219301
## 3 3329.477 27.6729172 $1.383.646 $166.473.827 5219301
## 4 3194.102 -135.3747548 $-6.768.738 $159.705.089 5219301
## 5 3117.294 -76.8079380 $-3.840.397 $155.864.692 5219301
## 6 3046.111 -71.1827030 $-3.559.135 $152.305.557 5219301
## 7 3025.453 -20.6579927 $-1.032.900 $151.272.657 5219301
## 8 2972.622 -52.8307233 $-2.641.536 $148.631.121 5219301
## 9 2912.714 -59.9081632 $-2.995.408 $145.635.713 5219301
## 10 2937.458 24.7435817 $1.237.179 $146.872.892 5219301
## 11 2875.598 -61.8596159 $-3.092.981 $143.779.911 5219301
## 12 2788.439 -87.1597068 $-4.357.985 $139.421.926 5219301
## 13 2749.272 -39.1669399 $-1.958.347 $137.463.579 5219301
## 14 2712.305 -36.9669466 $-1.848.347 $135.615.232 5219301
## 15 2697.588 -14.7170498 $-735.852 $134.879.379 5219301
## 16 2686.861 -10.7264064 $-536.320 $134.343.059 5219301
## 17 2716.635 29.7740711 $1.488.704 $135.831.762 5219301
## 18 2678.412 -38.2233770 $-1.911.169 $133.920.593 5219301
## 19 2700.254 21.8422504 $1.092.113 $135.012.706 5219301
## 20 2606.086 -94.1679713 $-4.708.399 $130.304.307 5219301
## 21 2593.269 -12.8176156 $-640.881 $129.663.427 5219301
## 22 2559.227 -34.0415817 $-1.702.079 $127.961.347 5219301
## 23 2574.497 15.2696339 $763.482 $128.724.829 5219301
## 24 2525.468 -49.0290512 $-2.451.453 $126.273.377 5219301
## 25 2547.214 21.7461635 $1.087.308 $127.360.685 5219301
## 26 2488.440 -58.7737496 $-2.938.687 $124.421.997 5219301
## 27 2468.062 -20.3777594 $-1.018.888 $123.403.109 5219301
## 28 2478.719 10.6564127 $532.821 $123.935.930 5219301
## 29 2482.389 3.6703328 $183.517 $124.119.447 5219301
## 30 2456.390 -25.9984923 $-1.299.925 $122.819.522 5219301
## 31 2428.084 -28.3066353 $-1.415.332 $121.404.190 5219301
## 32 2411.489 -16.5952663 $-829.763 $120.574.427 5219301
## 33 2340.788 -70.7000621 $-3.535.003 $117.039.424 5219301
## 34 2286.650 -54.1381140 $-2.706.906 $114.332.518 5219301
## 35 2327.014 40.3635081 $2.018.175 $116.350.694 5219301
## 36 2285.105 -41.9086612 $-2.095.433 $114.255.260 5219301
## 37 2255.858 -29.2471969 $-1.462.360 $112.792.901 5219301
## 38 2241.664 -14.1942359 $-709.712 $112.083.189 5219301
## 39 2201.333 -40.3304928 $-2.016.525 $110.066.664 5219301
## 40 2234.337 33.0036554 $1.650.183 $111.716.847 5219301
## 41 2234.401 0.0641352 $3.207 $111.720.054 5219301
## 42 2185.562 -48.8393727 $-2.441.969 $109.278.085 5219301
## 43 2211.759 26.1968556 $1.309.843 $110.587.928 5219301
## 44 2183.258 -28.5004353 $-1.425.022 $109.162.906 5219301
## 45 2157.411 -25.8475305 $-1.292.377 $107.870.530 5219301
## 46 2141.001 -16.4096860 $-820.484 $107.050.045 5219301
## 47 2159.481 18.4804224 $924.021 $107.974.066 5219301
## 48 2150.185 -9.2960845 $-464.804 $107.509.262 5219301
## margin_call margen_mant
## 1 $ $
## 2 $ $
## 3 $ $
## 4 $ $
## 5 $ $
## 6 $ $
## 7 $ $
## 8 $ $
## 9 $ $
## 10 $ $
## 11 $ $
## 12 $ $
## 13 $ $
## 14 $ $
## 15 $ $
## 16 $ $
## 17 $ $
## 18 $ $
## 19 $ $
## 20 $ $
## 21 $ $
## 22 $ $
## 23 $ $
## 24 $ $
## 25 $ $
## 26 $ $
## 27 $ $
## 28 $ $
## 29 $ $
## 30 $ $
## 31 $ $
## 32 $ $
## 33 $ $
## 34 $ $
## 35 $ $
## 36 $ $
## 37 $ $
## 38 $ $
## 39 $ $
## 40 $ $
## 41 $ $
## 42 $ $
## 43 $ $
## 44 $ $
## 45 $ $
## 46 $ $
## 47 $ $
## 48 $ $
se realiza el flujo de caja de la trayectoria mas alta, el valor de apalncamiento es de $ 85,748 dolares en el año 1, lo cual implica que solo se pueda adquirir un contrato de divisas ya que este tiene un valor de $ 50000.
Se realiza el flujo de caja para los ultimos 4 años donde el margen se ubica en $ 165´692.080. En esta trayectoria o caminata, es donde se se generaron las mayores perdidas pero a perasr de esto la perdida generada no estuvo por debajo del margen de mantenimiento.
precio_inicial_t1 <- rowMeans(mb_3)
inverision_ini<-500000000*0.75/F0
tamaño_con<-50000
num_contratos <- floor(inverision_ini/ tamaño_con)
F_03<-primer_precio <- precio_inicial_t1[1]
exposicion_total<-F_03*tamaño_con*num_contratos
margen_ini<-exposicion_total*margen_trm
margen_mant<-margen_ini*0.5
# Crear el data.frame con la columna inicial
tabla <- data.frame(
Precio_inicial_t1 = precio_inicial_t1
)
tabla$Dif <- c(NA, diff(tabla$Precio_inicial_t1))
tabla$liq <- tabla$Dif * tamaño_con
tabla$Margen <- precio_inicial_t1*tamaño_con
tabla$Margen <- c(tabla$Margen[1], tabla$Margen[1] + cumsum(tabla$liq[-1]))
tabla$mangen_mant<-margen_mant
# Crear columna con la diferencia si el margen es menor al margen de mantenimiento
tabla$margin_call <- ifelse(tabla$Margen < margen_mant, margen_ini -tabla$margin_call, "")
# Formatear columnas con punto de miles y sin decimales
tabla$Margen <- paste0("$", formatC(tabla$Margen, format = "f", big.mark = ".", digits = 0))
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla$liq <- paste0("$", formatC(tabla$liq, format = "f", big.mark = ".", digits = 0))
## Warning in prettyNum(r, big.mark = big.mark, big.interval = big.interval, :
## 'big.mark' y 'decimal.mark' son ambos '.', lo cual puede ser confuso
tabla$margin_call <- paste0("$", formatC(tabla$margin_call, format = "f", big.mark = ".", digits = 0))
tabla$margen_mant <- paste0("$", formatC(tabla$margen_mant, format = "f", big.mark = ".", digits = 0))
# Mostrar tabla
head(tabla)
## Precio_inicial_t1 Dif liq Margen mangen_mant margin_call
## 1 3313.842 NA $NA $165.692.080 5219301 $
## 2 3303.536 -10.306050 $-515.303 $165.176.777 5219301 $
## 3 3290.648 -12.887589 $-644.379 $164.532.398 5219301 $
## 4 3281.238 -9.409466 $-470.473 $164.061.924 5219301 $
## 5 3270.818 -10.420590 $-521.029 $163.540.895 5219301 $
## 6 3263.156 -7.662114 $-383.106 $163.157.789 5219301 $
## margen_mant
## 1 $
## 2 $
## 3 $
## 4 $
## 5 $
## 6 $
cuota_trm <- tabla_resultados_formateada$Cuota_por_TRM_Mean[74:nrow(tabla_resultados_formateada)]
liq <- tabla$Dif[2:nrow(tabla)] * tamaño_con
cuota_num <- as.numeric(gsub("[\\$\\.]", "", cuota_trm)) # quitar $ y puntos
resul <- cuota_num - liq
tabla_resultados_nueva <- data.frame(
Cuota_por_TRM_Mean = cuota_trm, # conservando el formato para mostrar
liq = liq,
resul = resul
)
head(tabla_resultados_nueva)
## Cuota_por_TRM_Mean liq resul
## 1 $6.782.300 -515302.5 7297603
## 2 $6.798.507 -644379.5 7442886
## 3 $6.834.218 -470473.3 7304691
## 4 $6.867.664 -521029.5 7388693
## 5 $6.898.009 -383105.7 7281115
## 6 $6.920.281 -642969.8 7563251
# Convertir Cuota_por_TRM_Mean a numérico
cuota_num <- as.numeric(gsub("[\\$\\.]", "", tabla_resultados_nueva$Cuota_por_TRM_Mean))
# Calcular sumas de columnas numéricas
suma_columnas <- colSums(data.frame(
Cuota_por_TRM_Mean = cuota_num,
liq = tabla_resultados_nueva$liq,
resul = tabla_resultados_nueva$resul
), na.rm = TRUE)
# Crear data.frame con la fila de sumas
tabla_sumas <- data.frame(t(suma_columnas)) # transponer para que sea una fila
# Mostrar la tabla de sumas
tabla_sumas
## Cuota_por_TRM_Mean liq resul
## 1 349081554 -25043994 374125548
El pago de las cuotas del crédito en pesos depende directamente de la TRM, por lo que cada cambio en esta tasa afecta el valor de las cuotas y la forma en que se van pagando. En total, las cuotas sumaron cerca de $349 millones, mostrando una alta sensibilidad frente al dólar. La cobertura con futuros dejó pérdidas acumuladas por –$25 millones, lo que en apariencia puede verse como un costo. Sin embargo, al juntar los efectos del crédito y los futuros, el resultado final fue de $374 millones, lo que demuestra que la cobertura ayudó a dar estabilidad al flujo de pagos. La mejor decisión fue tomar una posición corta en futuros, ya que esto permite compensar el aumento de las cuotas cuando la TRM sube. Aunque en este caso hubo pérdidas en las liquidaciones, el beneficio estuvo en disminuir la incertidumbre y mantener los pagos más predecibles. la inversión en futuros sí resultó positiva: no porque aumentara las ganancias, sino porque cumplió el objetivo principal de reducir el riesgo del dólar y proteger el dinero destinado al pago de la maquinaria amarilla.
La TRM sigue siendo un indicador fundamental para el análisis macroeconómico y financiero en Colombia. Su evolución está determinada por una compleja interacción de factores internos (como la política monetaria y la dinámica fiscal) y externos (como tasas de interés internacionales, precios de commodities y condiciones del mercado global). Comprender estos elementos permite anticipar movimientos en el tipo de cambio, diseñar coberturas eficientes y tomar decisiones de inversión más informadas.
Desde el punto de vista práctico, se evidenció gráficamente que dos contratos de futuros TRX, negociados en la Bolsa de Valores de Colombia, resultan suficientes para cubrir la exposición cambiaria asociada al crédito. No obstante, dada la baja cuantía de la cuota mensual, podría evaluarse la viabilidad de operar con un solo contrato, especialmente si el objetivo es suavizar los picos de volatilidad observados en la última simulación.
Asimismo, se comprobó que una adecuada selección entre posiciones largas o cortas al momento de renovar los contratos —según el comportamiento esperado de la TRM— permite que los flujos de cobertura contribuyan de forma significativa a reducir el valor de la cuota en pesos colombianos.
Sin embargo, en algunos periodos, los flujos resultaron desfavorables, generando una mayor salida de efectivo. Esto se explica porque los contratos de futuros se liquidaban mensualmente, mientras que los pagos del crédito eran semestrales. Esta diferencia de periodicidad expuso la cobertura a variaciones de corto plazo, donde se alternaron fases de apreciación y depreciación del dólar. En estos casos, es crucial considerar expectativas de corto plazo para tomar decisiones tácticas entre posiciones cortas o largas.
Finalmente, se identificó que la volatilidad en la simulación del futuro podría estar influenciada por el tamaño limitado de la muestra histórica utilizada. Por tanto, se recomienda ampliar el horizonte de datos, incorporando un mayor número de contratos y observaciones históricas. Esto permitirá obtener parámetros estadísticos (media y desviación estándar) más estables y robustos, mejorando la calidad de la simulación y la precisión de las estrategias de cobertura.
Banco de la República de Colombia. (2025). Tasas Cero Cupón TES – Deuda Pública. Recuperado de https://suameca.banrep.gov.co/estadisticas-economicas/#/informacionSerie/640001/Deuda%20p%C3%BAblica/Tasas%20Cero%20Cup%C3%B3n%20TES. Consultado el 21 de mayo de 2025.
Banco de la República. (2025). Encuesta Mensual de Expectativas (EME) - Abril 2025. Recuperado de https://www.banrep.gov.co
Bolsa de Valores de Colombia. (s.f.). Derivados: descripción general. https://www.bvc.com.co/derivados-descripcion-general
Departamento Administrativo Nacional de Estadística (DANE). (2025). Informe mensual de inflación - Abril 2025. Recuperado de https://www.dane.gov.co Federal Reserve. (2024). Monetary Policy Report – July 2024. Recuperado de https://www.federalreserve.gov
Ministerio de Hacienda y Crédito Público. (2025). Boletín Fiscal y de Proyecciones Macroeconómicas - Marzo 2025. Recuperado de https://www.minhacienda.gov.co
Dolar-Colombia. (2025). Gráfica del precio del dólar en Colombia – TRM histórica 2024–2025. Recuperado el 21 de mayo de 2025, de https://www.dolar-colombia.com/grafica
Wilkinson PC. (2025). Gráfica histórica del dólar – TRM Colombia. Recuperado el 21 de mayo de 2025, de https://dolar.wilkinsonpc.com.co/dolar-trm-graficas.html
Banco de la República de Colombia. (2025, enero). Informe de política monetaria – Enero de 2025. Recuperado de https://www.banrep.gov.co/es/informe-politica-monetaria-enero-2025. Consultado el 21 de mayo de 2025.
Banco de la República de Colombia. (2025, abril). Encuesta de expectativas de analistas económicos (EME) – Abril de 2025. Recuperado de https://www.banrep.gov.co/es/estadisticas/encuesta-mensual-expectativas. Consultado el 21 de mayo de 2025.
Banco de la República de Colombia. (2025, abril). Pronóstico económico para EME – Abril de 2025. Recuperado de https://www.banrep.gov.co/es/estadisticas/encuesta-mensual-expectativas. Consultado el 21 de mayo de 2025.
El País. (2025, mayo 15). El PIB de Colombia crece en el primer trimestre del año 2,7.% gracias al consumo privado. Recuperado de https://elpais.com/america-colombia/2025-05-15/el-pib-de-colombia-crece-en-el-primer-trimestre-del-ano-27-gracias-al-consumo-privado.html. Consultado el 21 de mayo de 2025.
Presidencia de la República de Colombia. (2025, mayo 6). Banco de la República prevé que el costo de vida seguirá cayendo y economía seguirá recuperándose: al cierre de 2025 inflación sería de 4,4% y el PIB de 2,6%. Recuperado de https://www.presidencia.gov.co/prensa/Paginas/Banco-de-la-Republica-preve-que-el-costo-de-vida-seguira-cayendo-y-economia-250506.aspx. Consultado el 21 de mayo de 2025.
Wells Fargo. (2025). Business Lines of Credit. Recuperado de https://www.wellsfargo.com/biz/business-credit/lines-of-credit/. Consultado el 21 de mayo de 2025.