## Cargando paquete requerido: tinylabels
La Tasa Representativa del Mercado (TRM), que indica el valor del dolar estadounidense frente al peso colombiano, es un indicador clave para la economía del país, ya que afecta el costo de las importaciones, la inflación, la inversión extranjera, entre otros aspectos económicos relevantes. Comprender su dinámica resulta esencial para anticipar escenarios y tomar decisiones tanto a nivel empresarial como de política económica. Durante el año 2024, la TRm mostro una clara tendencia alcista, registrando un promedio anual de COP 4.329 por dólar, lo que represento una depreciación del 15,36% del peso colombiano. Esta evolución se vio influenciada por múltiples factores. En primer lugar, la incertidumbre política interna y la salida de capitales extranjeros afectaron negativamente la percepción de riesgo país. Asimismo, las decisiones de política monetaria de la Reserva Federal de EE. UU, orientadas a combatir la inflación mediante aumentos de las tasas de interés, fortaleciendo el dólar frente a la mayoría de las monedas emergentes, incluido el peso colombiano.
knitr::include_graphics("C:/Users/usuario/Downloads/1.jpeg")
Imagen 1.
knitr::include_graphics("C:/Users/usuario/Downloads/5.jpeg")
Imagen 2.
En agosto de 2025, la inflación anual en Colombia se ubicó en 5,10%, lo que representa un incremento respecto al 4,90% registrado en julio del mismo año. Esta aceleración se debe principalmente al aumento en los precios de alimentos, salud, restaurantes y hoteles, y educación. En respuesta a esta presión inflacionaria, el Banco de la República ha mantenido una política monetaria restrictiva. Aunque en diciembre de 2024 se redujo la tasa de interés en 25 puntos básicos hasta el 9%, esta medida ha permanecido sin cambios en los primeros meses de 2025.
Al analizar los factores que inciden en la TRM, es necesario considerar tanto elementos internos como externos. En el plano internacional, las decisiones de la Reserva Federal continúan teniendo un impacto significativo, ya que el aumento de tasas en EE. UU. atrae capitales hacia ese país, reduciendo la disponibilidad de divisas en economías emergentes como Colombia y, en consecuencia, presionando al alza la TRM. Además, el comportamiento del precio del petróleo, que es uno de los principales productos de exportación de Colombia, influye directamente en el flujo de divisas: cuando los precios del crudo son altos, ingresan más dólares a la economía nacional, lo que tiende a fortalecer el peso. Por el contrario, una caída en los precios puede reducir los ingresos externos y debilitar la moneda local.
knitr::include_graphics("C:/Users/usuario/Downloads/3.jpeg")
Imagen 3.
Internamente, la política monetaria del Banco de la República, el nivel de inflación, la evolución de la cuenta corriente y los flujos de inversión extranjera directa son variables determinantes. Una política fiscal expansiva o un deterioro en la balanza comercial puede reducir la confianza en la economía y aumentar la demanda de dólares, ejerciendo presión sobre la TRM. Asimismo, una disminución en los flujos de inversión extranjera ya sea por motivos de riesgo político o cambios en las condiciones globales, también puede debilitar el peso colombiano.
knitr::include_graphics("C:/Users/usuario/Downloads/4.jpeg")
Imagen 4.
En cuanto a las expectativas para la TRM en el corto y mediano plazo, tanto el Banco de la República como el Ministerio de Hacienda coinciden en proyectar una relativa estabilidad para el cierre de 2025. La primera entidad estima una tasa promedio de COP 4.209, mientras que el Ministerio proyecta un promedio de COP 4.266, diferencias que obedecen a los distintos supuestos sobre los choques externos y el comportamiento de los precios del petróleo. Estas proyecciones indican que, si bien no se espera una depreciación abrupta, sí persiste un entorno de alta sensibilidad ante factores externos.
No obstante, al observar los pronósticos a más largo plazo, como los presentados por Bancolombia y otras entidades financieras, se proyecta una tendencia al alza moderada en los próximos 12 a 18 meses, alcanzando un techo cercano a los COP 4.700 por dólar. Esta evolución responde a la posibilidad de que la Reserva Federal de Estados Unidos mantenga sus tasas elevadas durante más tiempo, a las incertidumbres fiscales locales, y a un crecimiento económico que, aunque positivo, sigue siendo insuficiente para generar flujos de divisas robustos.
knitr::include_graphics("C:/Users/usuario/Downloads/2.jpeg")
Imagen 5.
Además, es importante tener en cuenta que la depreciación del peso frente al dólar tiene un efecto directo sobre la inflación, especialmente en un país con una alta proporción de bienes importados. Este fenómeno, conocido como pass-through cambiario, implica que una TRM elevada tiende a traducirse rápidamente en mayores precios para los consumidores, lo que refuerza aún más las presiones inflacionarias.
Por otra parte, desde una perspectiva teórica, la paridad del poder adquisitivo (PPA) sugiere que, si la TRM se mantiene por encima de su valor de equilibrio a largo plazo, podría ajustarse a la baja eventualmente. Sin embargo, este ajuste depende de múltiples condiciones estructurales, entre ellas el diferencial de inflación entre Colombia y EE. UU., la competitividad de las exportaciones colombianas y la estabilidad política.
En este escenario, si bien las proyecciones oficiales indican una relativa estabilidad en torno a los COP 4.200 - 4.300, la posibilidad de alcanzar los COP 4.700 no debe descartarse, especialmente si se presentan choques externos adversos, caídas en el precio del petróleo o deterioro en la percepción de riesgo del país.
knitr::include_graphics("C:/Users/usuario/Downloads/6.jpeg")
Imagen 6.
options(warn = -1)
##install.packages("readr")
##install.packages("ggplot2")
#install.packages("dplyr")
library(readr)
library(ggplot2)
#Calculo de los Retornos
TRM <- read.csv("C:/Users/usuario/Downloads/TRM.CSV", sep = ";", dec = ",", header = TRUE)
TRM$retorno <- c(NA, diff(log(TRM$TRM)))
TRM$retorno[is.na(TRM$retorno)] <- 0
delta<-12
#Promedio
promedio <- exp(mean(TRM$retorno, na.rm = TRUE) * delta) - 1
#Desviacion estandar
var_poblacional <- sum((TRM$retorno - mean(TRM$retorno))^2) / length(TRM$retorno)
desv<-sqrt(var_poblacional*delta)
#Simulacion BMG mensuales de la TRM
S0 <- tail(TRM$TRM, 1)
dt<-1/delta
n<-120
simulaciones<-10000
set.seed(123)
bmg <- matrix(0, nrow = n, ncol = simulaciones)
for (j in 1:simulaciones) {
bmg[1, j] <- S0 * exp((promedio - 0.5 * desv^2)*dt + desv * sqrt(dt)*rnorm(1))
for (i in 2:n) {
bmg[i, j] <- bmg [i - 1, j] * exp((promedio - 0.5 * desv^2)*dt + desv * sqrt(dt)*rnorm(1))
}
}
# Grafica de simulaciones
matplot(bmg, type = "l", lty = 1, col = rainbow(simulaciones),
main = "Simulacion BMG de la TRM", xlab = "Mes", ylab = "TRM simulada")
Identificar las trayectorias mas maxima, minima y promedio
valores_finales <- bmg[n, ]
#
idx_max <- which.max(valores_finales)
idx_min <- which.min(valores_finales)
# Trayectorias completas
trayectoria_max <- bmg[, idx_max]
trayectoria_min <- bmg[, idx_min]
# Trayectoria promedio: la que mas se parece al promedio fila a fila
promedio_path <- rowMeans(bmg) # promedio en cada tiempo
distancias <- colSums((bmg - promedio_path)^2) # distancia cuadratica
idx_promedio <- which.min(distancias)
trayectoria_prom <- bmg[, idx_promedio]
# --- Graficar trayectorias representativas ---
matplot(bmg, type = "l", lty = 1, col = "grey80",
main = "Trayectorias representativas de la TRM simulada",
xlab = "Mes", ylab = "TRM simulada")
lines(trayectoria_max, col = "blue", lwd = 2)
lines(trayectoria_min, col = "red", lwd = 2)
lines(trayectoria_prom, col = "darkgreen", lwd = 2)
legend("topleft",
legend = c("Maxima", "Minima", "Promedio"),
col = c("blue", "red", "darkgreen"),
lwd = 2, bty = "n")
Con las trayectorias ya identificadas podemos continuar con la simulación de los créditos en TRM.
``` r
#Parametros iniciales
nper<-120
monto_pesos<-500000000
monto_usd<-monto_pesos/S0
tasa<-0.065/12 # tasa nominal anual
inicial<-monto_usd*0.10
saldo<-monto_usd-inicial
# Calculo de la cuota mensual (metodo frances)
cuota <- saldo * (tasa * (1 + tasa)^nper) / ((1 + tasa)^nper - 1)
# Inicializacion de la tabla de amortizacion
amortizacion <- data.frame(
Mes = 1:nper,
Cuota = rep(cuota, nper),
Interes = NA,
Abono = NA,
Saldo = NA
)
# Calculo mes a mes
saldo_actual <- saldo
for (i in 1:nper) {
interes <- saldo_actual * tasa
abono <- cuota - interes
saldo_actual <- saldo_actual - abono
amortizacion$Interes[i] <- round(interes, 2)
amortizacion$Abono[i] <- round(abono, 2)
amortizacion$Saldo[i] <- round(saldo_actual, 2)
}
# Mostrar la tabla
###print(amortizacion)
head(amortizacion, 12) #solo los doce primeros meses para que no sea tan extenso el archivo
## Mes Cuota Interes Abono Saldo
## 1 1 1308.076 624.00 684.07 114516.2
## 2 2 1308.076 620.30 687.78 113828.4
## 3 3 1308.076 616.57 691.51 113136.9
## 4 4 1308.076 612.83 695.25 112441.7
## 5 5 1308.076 609.06 699.02 111742.7
## 6 6 1308.076 605.27 702.80 111039.9
## 7 7 1308.076 601.47 706.61 110333.2
## 8 8 1308.076 597.64 710.44 109622.8
## 9 9 1308.076 593.79 714.29 108908.5
## 10 10 1308.076 589.92 718.15 108190.4
## 11 11 1308.076 586.03 722.04 107468.3
## 12 12 1308.076 582.12 725.96 106742.4
amortizacion_cop <- data.frame(
Mes = 1:nper,
# Trayectoria maxima
Interes_Max = round(amortizacion$Interes * trayectoria_max[1:nper], 2),
Abono_Max = round(amortizacion$Abono * trayectoria_max[1:nper], 2),
Cuota_Max = round(amortizacion$Cuota * trayectoria_max[1:nper], 2),
Saldo_Max = round(amortizacion$Saldo * trayectoria_max[1:nper], 2),
# Trayectoria minima
Interes_Min = round(amortizacion$Interes * trayectoria_min[1:nper], 2),
Abono_Min = round(amortizacion$Abono * trayectoria_min[1:nper], 2),
Cuota_Min = round(amortizacion$Cuota * trayectoria_min[1:nper], 2),
Saldo_Min = round(amortizacion$Saldo * trayectoria_min[1:nper], 2),
# Trayectoria promedio
Interes_Prom = round(amortizacion$Interes * trayectoria_prom[1:nper], 2),
Abono_Prom = round(amortizacion$Abono * trayectoria_prom[1:nper], 2),
Cuota_Prom = round(amortizacion$Cuota * trayectoria_prom[1:nper], 2),
Saldo_Prom = round(amortizacion$Saldo * trayectoria_prom[1:nper], 2)
)
# --- Resultados ---
cat("Tabla de amortizacion en USD:\n")
## Tabla de amortizacion en USD:
print(head(amortizacion, 12)) # primeros 12 meses en USD
## Mes Cuota Interes Abono Saldo
## 1 1 1308.076 624.00 684.07 114516.2
## 2 2 1308.076 620.30 687.78 113828.4
## 3 3 1308.076 616.57 691.51 113136.9
## 4 4 1308.076 612.83 695.25 112441.7
## 5 5 1308.076 609.06 699.02 111742.7
## 6 6 1308.076 605.27 702.80 111039.9
## 7 7 1308.076 601.47 706.61 110333.2
## 8 8 1308.076 597.64 710.44 109622.8
## 9 9 1308.076 593.79 714.29 108908.5
## 10 10 1308.076 589.92 718.15 108190.4
## 11 11 1308.076 586.03 722.04 107468.3
## 12 12 1308.076 582.12 725.96 106742.4
cat("\nTabla de amortizacion en COP (3 trayectorias):\n")
##
## Tabla de amortizacion en COP (3 trayectorias):
print(head(amortizacion_cop, 12)) # primeros 12 meses en COP
## Mes Interes_Max Abono_Max Cuota_Max Saldo_Max Interes_Min Abono_Min
## 1 1 2429376 2663243 5092642 445838111 2414169 2646571
## 2 2 2413516 2676073 5089573 442893305 2394305 2654772
## 3 3 2388147 2678410 5066542 438210785 2369315 2657290
## 4 4 2374425 2693764 5068173 435658102 2319413 2631353
## 5 5 2347413 2694132 5041530 430673740 2279730 2616453
## 6 6 2363340 2744156 5107520 433566790 2244553 2606228
## 7 7 2317825 2722993 5040803 425180304 2208546 2594611
## 8 8 2311145 2747356 5058487 423924557 2211421 2628810
## 9 9 2296644 2762710 5059338 421233217 2201536 2648302
## 10 10 2285953 2782847 5068823 419240095 2195191 2672356
## 11 11 2267738 2794051 5061812 415866085 2174922 2679693
## 12 12 2272644 2834208 5106837 416731037 2163973 2698683
## Cuota_Min Saldo_Min Interes_Prom Abono_Prom Cuota_Prom Saldo_Prom
## 1 5060763 443047249 2439053 2673851 5112928 447614058
## 2 5049063 439368117 2432925 2697593 5130502 446454988
## 3 5026590 434755327 2411058 2704106 5115148 442414796
## 4 4950751 425564554 2415112 2739922 5155019 443123280
## 5 4896168 418256184 2405384 2760666 5166034 441309534
## 6 4850804 411774668 2377105 2760139 5137268 436091989
## 7 4803143 405134227 2342925 2752480 5095390 429784581
## 8 4840216 405632496 2345336 2788000 5133321 430196035
## 9 4849823 403789299 2317599 2787918 5105502 425076724
## 10 4867569 402594450 2307068 2808552 5115644 423112603
## 11 4854638 398845170 2275824 2804014 5079862 417349030
## 12 4862641 396804060 2278740 2841809 5120533 417848716
Dado que el crédito fue otorgado en dólares, cualquier variación en la TRM afecta directamente el valor en pesos de la deuda. Las tablas del documento presentan tres trayectorias simuladas de la TRM: una alta, una baja y una intermedia. En el escenario de TRM alta, el peso se deprecia frente al dólar, lo que incrementa el valor en pesos de las cuotas, los intereses y el saldo pendiente. Esto representa un riesgo financiero para el inversionista, ya que el costo total del crédito se eleva y puede comprometer la rentabilidad del proyecto. En contraste, la trayectoria baja refleja una apreciación del peso, lo que reduce el valor en pesos de la deuda y facilita el cumplimiento de las obligaciones crediticias.
Para un inversionista que recibió un préstamo equivalente a 500 millones de pesos, estas simulaciones permiten anticipar el impacto que tendría la volatilidad cambiaria sobre su flujo de caja. La trayectoria intermedia ofrece un punto de referencia más estable, útil para la planificación financiera. Evaluar estos tres escenarios es fundamental para tomar decisiones estratégicas, como implementar coberturas cambiarias, ajustar el modelo de negocio o renegociar condiciones crediticias. En resumen, el comportamiento de la TRM tiene un efecto directo sobre la carga financiera del crédito, y su análisis permite gestionar mejor el riesgo asociado a la deuda en moneda extranjera.
FRO <- read.csv("FUTUROS.csv", sep = ";", dec = ",", header = TRUE)
FRO$retorno <- c(NA, diff(log(FRO$trm)))
FRO$retorno[is.na(FRO$retorno)] <- 0
tasacol <- (1 + 0.11)^(1/12) - 1
delta<-12
#Promedio
promediofro<- exp(mean(FRO$retorno, na.rm = TRUE) * delta) - 1
#Desviacion estandar
var_poblacionalfro <- sum((FRO$retorno - mean(FRO$retorno))^2) / length(FRO$retorno)
desvfro<-sqrt(var_poblacionalfro*delta)
#Realice simulacion BMG mensuales del futuro de la TRM
FO<- tail(FRO$trm, 1)
F70 <- FO * ((1 + tasacol) / (1 + tasa)) # esta es la tasa como si el periodo 70 fuera el primero
F70_1 <- FO * (((1 + tasacol) / (1 + tasa))^(70/120)) # esta sabiendo que estamos en el periodo 70
dt<-1/delta
nfro<-48
simulacionesfro<-10000
set.seed(123)
bmgfro <- matrix(0, nrow = nfro, ncol = simulacionesfro)
for (j in 1:simulacionesfro) {
bmgfro[1, j] <- F70_1 * exp((promediofro - 0.5 * desvfro^2)*dt + desvfro * sqrt(dt)*rnorm(1))
for (i in 2:nfro) {
bmgfro[i, j] <- bmg [i - 1, j] * exp((promediofro - 0.5 * desvfro^2)*dt + desvfro * sqrt(dt)*rnorm(1))
}
}
# Graficar simulaciones
matplot(bmgfro, type = "l", lty = 1, col = rainbow(simulacionesfro),
main = "Simulacion BMG de futuros de la TRM", xlab = "Mes", ylab = "FRO TRM simulada")
Identificar las trayectorias, altas , medias y bajas
valores_finalesfro <- bmgfro[nfro, ]
# indices de la trayectoria mas alta y mas baja
idx_maxfro <- which.max(valores_finalesfro)
idx_minfro <- which.min(valores_finalesfro)
# Trayectorias completas
trayectoria_maxfro <- bmgfro[, idx_maxfro]
trayectoria_minfro <- bmgfro[, idx_minfro]
# Trayectoria promedio: la que mas se parece al promedio fila a fila
promedio_pathfro <- rowMeans(bmgfro) # promedio en cada tiempo
distanciasfro <- colSums((bmgfro - promedio_pathfro)^2) # distancia cuadratica
idx_promediofro <- which.min(distanciasfro)
trayectoria_promfro <- bmgfro[, idx_promediofro]
# --- Graficar trayectorias representativas ---
matplot(bmgfro, type = "l", lty = 1, col = "grey80",
main = "Trayectorias Futuro TRM simulada",
xlab = "Mes", ylab = "TRM simulada")
lines(trayectoria_maxfro, col = "blue", lwd = 2)
lines(trayectoria_minfro, col = "red", lwd = 2)
lines(trayectoria_promfro, col = "darkgreen", lwd = 2)
legend("topleft",
legend = c("Maxima", "Minima", "Promedio"),
col = c("blue", "red", "darkgreen"),
lwd = 2, bty = "n")
Precio_inicial<-FO
garantia<- 6.3/100
valorcontrato<-50000
nrocontratos<-2
expototal<-valorcontrato*Precio_inicial*nrocontratos
garantia_inicia<-expototal*garantia
margen_mantenimiento<-garantia_inicia*0.5
Trayectoria maxima:
modelo AR(1) para establecer correctamente el margen, se hace un modelo para cada trayectoria, máxima, mínima y promedio.
if (!require(forecast)) install.packages("forecast")
## Cargando paquete requerido: forecast
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(forecast)
# Ajustar modelo AR(1)
modelo_ar1 <- Arima(trayectoria_maxfro, order = c(1, 0, 0))
# Mostrar coeficientes
coeficientes <- modelo_ar1$coef
print(coeficientes)
## ar1 intercept
## 0.993402 4740.530179
# Extraer beta (coeficiente AR1)
beta <- coeficientes["ar1"]
alpha <- coeficientes["intercept"]
cat("Beta estimado:", round(beta, 4), "\n")
## Beta estimado: 0.9934
cat("Alpha estimado:", round(alpha, 2), "\n")
## Alpha estimado: 4740.53
# Parametros base
meses <- 48
trimestres <- ceiling(meses / 3)
# Simulacion de TRM mensual (puedes reemplazar con datos reales)
TRMFROMAX <- trayectoria_maxfro
# Modelo AR(1) calibrado
epsilon <- rnorm(meses, mean = 0, sd = 100)
# Parametros del contrato
valorcontrato <- 50000
nrocontratos <- 2
garantia <- 6.3 / 100
# Inicializar vectores
Precio_inicial <- numeric(meses)
expototal <- numeric(meses)
garantia_inicia <- numeric(meses)
margen_requerido <- numeric(meses)
margen_mantenimiento <- numeric(meses)
margen_call <- numeric(meses)
ajuste_posicion <- numeric(meses)
posicion <- character(meses)
# Simulacion mensual con rollover cada 3 meses
for (t in 1:meses) {
# --- Apertura de trimestre (mes 1, 4, 7, ...) ---
if (t %% 3 == 1) {
Precio_inicial[t] <- TRMFROMAX[t]
# Definir posicion según la variacion TRM del trimestre anterior
if (t > 3) {
delta_trm <- TRMFROMAX[t] - TRMFROMAX[t - 3]
posicion[t] <- ifelse(delta_trm > 0, "Largo", "Corto")
} else {
posicion[t] <- "Largo" # posicion inicial
}
# --- Meses intermedios (2, 3, 5, 6, ...) ---
} else {
Precio_inicial[t] <- Precio_inicial[t - 1]
posicion[t] <- posicion[t - 1]
}
# --- Exposicion y garantias ---
expototal[t] <- valorcontrato * Precio_inicial[t] * nrocontratos
garantia_inicia[t] <- expototal[t] * garantia
margen_requerido[t] <- garantia_inicia[t] * 0.5
# Modelo AR(1) para margen de mantenimiento
if (t == 1) {
margen_mantenimiento[t] <- margen_requerido[t]
} else {
margen_mantenimiento[t] <- alpha + beta * margen_mantenimiento[t - 1] + epsilon[t]
}
# Margen call
margen_call[t] <- ifelse(margen_mantenimiento[t] < margen_requerido[t],
margen_requerido[t] - margen_mantenimiento[t],
0)
# --- Liquidacion de posicion al cierre de trimestre (mes 3, 6, 9, ...) ---
if (t %% 3 == 0) {
delta_trm <- TRMFROMAX[t] - TRMFROMAX[t - 3]
ajuste <- delta_trm * valorcontrato * nrocontratos
ajuste_posicion[t] <- ifelse(posicion[t] == "Largo", ajuste, -ajuste)
} else {
ajuste_posicion[t] <- 0
}
}
tabla <- data.frame(
Mes = 1:meses,
TRM = TRMFROMAX,
Precio_inicial,
Posicion = posicion,
Exposicion_Total = expototal,
Garantia_Inicial = garantia_inicia,
Margen_Requerido = margen_requerido,
Margen_Mantenimiento = margen_mantenimiento,
Margen_Call = margen_call,
Ajuste_Posicion = ajuste_posicion
)
# Tabla solo con cierres trimestrales
tabla_trimestre <- tabla[tabla$Mes %% 3 == 0, ]
# Mostrar tablas
print(tabla)
## Mes TRM Precio_inicial Posicion Exposicion_Total Garantia_Inicial
## 1 1 3801.851 3801.851 Largo 380185135 23951664
## 2 2 3843.309 3801.851 Largo 380185135 23951664
## 3 3 3849.365 3801.851 Largo 380185135 23951664
## 4 4 3919.534 3919.534 Largo 391953417 24693065
## 5 5 4001.657 3919.534 Largo 391953417 24693065
## 6 6 4012.234 3919.534 Largo 391953417 24693065
## 7 7 4003.674 4003.674 Largo 400367430 25223148
## 8 8 3931.259 4003.674 Largo 400367430 25223148
## 9 9 3922.206 4003.674 Largo 400367430 25223148
## 10 10 3909.008 3909.008 Corto 390900753 24626747
## 11 11 3963.505 3909.008 Corto 390900753 24626747
## 12 12 4006.437 3909.008 Corto 390900753 24626747
## 13 13 3957.214 3957.214 Largo 395721365 24930446
## 14 14 3935.144 3957.214 Largo 395721365 24930446
## 15 15 3994.214 3957.214 Largo 395721365 24930446
## 16 16 3874.905 3874.905 Corto 387490527 24411903
## 17 17 4013.811 3874.905 Corto 387490527 24411903
## 18 18 4007.189 3874.905 Corto 387490527 24411903
## 19 19 4013.204 4013.204 Largo 401320395 25283185
## 20 20 3987.282 4013.204 Largo 401320395 25283185
## 21 21 4011.780 4013.204 Largo 401320395 25283185
## 22 22 3927.885 3927.885 Corto 392788517 24745677
## 23 23 4022.001 3927.885 Corto 392788517 24745677
## 24 24 4022.496 3927.885 Corto 392788517 24745677
## 25 25 4052.531 4052.531 Largo 405253125 25530947
## 26 26 3964.722 4052.531 Largo 405253125 25530947
## 27 27 3992.580 4052.531 Largo 405253125 25530947
## 28 28 4074.015 4074.015 Largo 407401474 25666293
## 29 29 4086.282 4074.015 Largo 407401474 25666293
## 30 30 3894.981 4074.015 Largo 407401474 25666293
## 31 31 4144.803 4144.803 Largo 414480330 26112261
## 32 32 4042.830 4144.803 Largo 414480330 26112261
## 33 33 4273.298 4144.803 Largo 414480330 26112261
## 34 34 4267.208 4267.208 Largo 426720835 26883413
## 35 35 4305.990 4267.208 Largo 426720835 26883413
## 36 36 4336.235 4267.208 Largo 426720835 26883413
## 37 37 4341.476 4341.476 Largo 434147607 27351299
## 38 38 4346.412 4341.476 Largo 434147607 27351299
## 39 39 4468.316 4341.476 Largo 434147607 27351299
## 40 40 4426.542 4426.542 Largo 442654192 27887214
## 41 41 4337.244 4426.542 Largo 442654192 27887214
## 42 42 4409.536 4426.542 Largo 442654192 27887214
## 43 43 4471.232 4471.232 Largo 447123169 28168760
## 44 44 4534.622 4471.232 Largo 447123169 28168760
## 45 45 4602.831 4471.232 Largo 447123169 28168760
## 46 46 4638.595 4638.595 Largo 463859522 29223150
## 47 47 4623.050 4638.595 Largo 463859522 29223150
## 48 48 4698.691 4638.595 Largo 463859522 29223150
## Margen_Requerido Margen_Mantenimiento Margen_Call Ajuste_Posicion
## 1 11975832 11975832 0.00 0
## 2 11975832 11901626 74205.37 0
## 3 11975832 11827779 148052.40 NA
## 4 12346533 11754565 591967.50 0
## 5 12346533 11681886 664646.81 0
## 6 12346533 11609762 736770.66 16286880
## 7 12611574 11537870 1073703.85 0
## 8 12611574 11466330 1145243.63 0
## 9 12611574 11395309 1216264.63 -9002801
## 10 12313374 11324994 988380.13 0
## 11 12313374 11254953 1058420.82 0
## 12 12313374 11185407 1127966.29 -8423071
## 13 12465223 11116452 1348771.16 0
## 14 12465223 11047966 1417257.03 0
## 15 12465223 10979704 1485518.52 -1222297
## 16 12205952 10911881 1294070.58 0
## 17 12205952 10844506 1361445.45 0
## 18 12205952 10777653 1428298.67 -1297566
## 19 12641592 10711196 1930396.12 0
## 20 12641592 10645205 1996387.51 0
## 21 12641592 10579827 2061765.32 459080
## 22 12372838 10514877 1857960.89 0
## 23 12372838 10450111 1922727.29 0
## 24 12372838 10385900 1986938.31 -1071566
## 25 12765473 10322175 2443298.79 0
## 26 12765473 10258879 2506594.75 0
## 27 12765473 10196038 2569435.24 -2991597
## 28 12833146 10133593 2699553.84 0
## 29 12833146 10071569 2761577.77 0
## 30 12833146 10009800 2823346.39 -9759847
## 31 13056130 9948470 3107660.71 0
## 32 13056130 9887480 3168650.13 0
## 33 13056130 9826858 3229272.73 37831676
## 34 13441706 9766741 3674964.90 0
## 35 13441706 9706962 3734744.05 0
## 36 13441706 9647534 3794172.21 6293733
## 37 13675650 9588612 4087037.24 0
## 38 13675650 9530044 4145605.16 0
## 39 13675650 9472178 4203471.66 13208061
## 40 13943607 9414378 4529229.31 0
## 41 13943607 9357138 4586469.13 0
## 42 13943607 9300286 4643320.63 -5878021
## 43 14084380 9243552 4840827.53 0
## 44 14084380 9187412 4896967.97 0
## 45 14084380 9131466 4952913.81 19329482
## 46 14611575 9075805 5535769.90 0
## 47 14611575 9020658 5590916.51 0
## 48 14611575 8965871 5645704.06 9586008
print(tabla_trimestre)
## Mes TRM Precio_inicial Posicion Exposicion_Total Garantia_Inicial
## 3 3 3849.365 3801.851 Largo 380185135 23951664
## 6 6 4012.234 3919.534 Largo 391953417 24693065
## 9 9 3922.206 4003.674 Largo 400367430 25223148
## 12 12 4006.437 3909.008 Corto 390900753 24626747
## 15 15 3994.214 3957.214 Largo 395721365 24930446
## 18 18 4007.189 3874.905 Corto 387490527 24411903
## 21 21 4011.780 4013.204 Largo 401320395 25283185
## 24 24 4022.496 3927.885 Corto 392788517 24745677
## 27 27 3992.580 4052.531 Largo 405253125 25530947
## 30 30 3894.981 4074.015 Largo 407401474 25666293
## 33 33 4273.298 4144.803 Largo 414480330 26112261
## 36 36 4336.235 4267.208 Largo 426720835 26883413
## 39 39 4468.316 4341.476 Largo 434147607 27351299
## 42 42 4409.536 4426.542 Largo 442654192 27887214
## 45 45 4602.831 4471.232 Largo 447123169 28168760
## 48 48 4698.691 4638.595 Largo 463859522 29223150
## Margen_Requerido Margen_Mantenimiento Margen_Call Ajuste_Posicion
## 3 11975832 11827779 148052.4 NA
## 6 12346533 11609762 736770.7 16286880
## 9 12611574 11395309 1216264.6 -9002801
## 12 12313374 11185407 1127966.3 -8423071
## 15 12465223 10979704 1485518.5 -1222297
## 18 12205952 10777653 1428298.7 -1297566
## 21 12641592 10579827 2061765.3 459080
## 24 12372838 10385900 1986938.3 -1071566
## 27 12765473 10196038 2569435.2 -2991597
## 30 12833146 10009800 2823346.4 -9759847
## 33 13056130 9826858 3229272.7 37831676
## 36 13441706 9647534 3794172.2 6293733
## 39 13675650 9472178 4203471.7 13208061
## 42 13943607 9300286 4643320.6 -5878021
## 45 14084380 9131466 4952913.8 19329482
## 48 14611575 8965871 5645704.1 9586008
# ------------------------------
# GRAFICAS
# ------------------------------
library(ggplot2)
# Exposicion
ggplot(tabla, aes(x = Mes, y = Exposicion_Total)) +
geom_line(color = "blue", size = 1.2) +
geom_point() +
theme_minimal() +
labs(title = "Exposicion Total", y = "USD", x = "Mes")
# Margenes
ggplot(tabla, aes(x = Mes)) +
geom_line(aes(y = Margen_Requerido, color = "Requerido"), size = 1) +
geom_line(aes(y = Margen_Mantenimiento, color = "Mantenimiento"), size = 1) +
geom_line(aes(y = Margen_Call, color = "Call"), size = 1) +
theme_minimal() +
labs(title = "Margenes", y = "USD", x = "Mes") +
scale_color_manual(values = c("Requerido" = "red", "Mantenimiento" = "green", "Call" = "orange"))
# Ajustes de posicion
ggplot(tabla, aes(x = Mes, y = Ajuste_Posicion)) +
geom_bar(stat = "identity", fill = "purple", alpha = 0.7) +
theme_minimal() +
labs(title = "Ajustes de Posicion (cierres trimestrales)", y = "USD", x = "Mes")
Realizamos el mismo proceso pero para la trayectoria mínima.
modelo AR(1)
# Ajustar modelo AR(1)
modelo_ar2 <- Arima(trayectoria_minfro, order = c(1, 0, 0))
# Mostrar coeficientes
coeficientes2 <- modelo_ar2$coef
print(coeficientes2)
## ar1 intercept
## 0.9692875 3532.1832673
# Extraer beta (coeficiente AR2)
beta2 <- coeficientes2["ar1"]
alpha2 <- coeficientes["intercept"]
cat("Beta estimado:", round(beta2, 4), "\n")
## Beta estimado: 0.9693
cat("Alpha estimado:", round(alpha2, 2), "\n")
## Alpha estimado: 4740.53
summary(modelo_ar2)
## Series: trayectoria_minfro
## ARIMA(1,0,0) with non-zero mean
##
## Coefficients:
## ar1 mean
## 0.9693 3532.1833
## s.e. 0.0321 204.5069
##
## sigma^2 = 4557: log likelihood = -270.68
## AIC=547.35 AICc=547.9 BIC=552.97
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -11.30344 66.08549 53.05754 -0.3536556 1.494408 0.9960956
## ACF1
## Training set -0.3204647
# Parametros base
meses <- 48
trimestres <- ceiling(meses / 3)
# Simulacion de TRM mensual (puedes reemplazar con datos reales)
TRMFROMIN <- trayectoria_min
# Modelo AR(1) calibrado
epsilon2 <- rnorm(meses, mean = 0, sd = 100)
# Parametros del contrato
valorcontrato <- 50000
nrocontratos <- 2
garantia <- 6.3 / 100
# Inicializar vectores
Precio_inicial <- numeric(meses)
expototal <- numeric(meses)
garantia_inicia <- numeric(meses)
margen_requerido <- numeric(meses)
margen_mantenimiento2 <- numeric(meses)
margen_call <- numeric(meses)
ajuste_posicion2 <- numeric(meses)
posicion<- character(meses)
# Simulacion mensual con rollover cada 3 meses
for (t in 1:meses) {
# --- Apertura de trimestre (mes 1, 4, 7, ...) ---
if (t %% 3 == 1) {
Precio_inicial[t] <- TRMFROMIN[t]
# Definir posicion según la variacion TRM del trimestre anterior
if (t > 3) {
delta_trm <- TRMFROMIN[t] - TRMFROMIN[t - 3]
posicion[t] <- ifelse(delta_trm > 0, "Largo", "Corto")
} else {
posicion[t] <- "Largo" # posicion inicial
}
# --- Meses intermedios (2, 3, 5, 6, ...) ---
} else {
Precio_inicial[t] <- Precio_inicial[t - 1]
posicion[t] <- posicion[t - 1]
}
# --- Exposicion y garantias ---
expototal[t] <- valorcontrato * Precio_inicial[t] * nrocontratos
garantia_inicia[t] <- expototal[t] * garantia
margen_requerido[t] <- garantia_inicia[t] * 0.5
# Modelo AR(2) para margen de mantenimiento
if (t == 1) {
margen_mantenimiento2[t] <- margen_requerido[t]
} else {
margen_mantenimiento2[t] <- alpha2 + beta2 * margen_mantenimiento2[t - 1] + epsilon2[t]
}
# Margen call
margen_call[t] <- ifelse(margen_mantenimiento2[t] < margen_requerido[t],
margen_requerido[t] - margen_mantenimiento2[t],
0)
# --- Liquidacion de posicion al cierre de trimestre (mes 3, 6, 9, ...) ---
if (t %% 3 == 0) {
delta_trm <- TRMFROMIN[t] - TRMFROMIN[t - 3]
ajuste <- delta_trm * valorcontrato * nrocontratos
ajuste_posicion2[t] <- ifelse(posicion[t] == "Largo", ajuste, -ajuste)
} else {
ajuste_posicion2[t] <- 0
}
}
tabla2 <- data.frame(
Mes = 1:meses,
TRM = TRMFROMIN[1:meses],
Precio_inicial,
Posicion = posicion,
Exposicion_Total = expototal,
Garantia_Inicial = garantia_inicia,
Margen_Requerido = margen_requerido,
Margen_Mantenimiento = margen_mantenimiento2,
Margen_Call = margen_call,
Ajuste_Posicion = ajuste_posicion2
)
# Tabla solo con cierres trimestrales
tabla_trimestremin <- tabla2[tabla2$Mes %% 3 == 0, ]
# Mostrar tablas
print(tabla2)
## Mes TRM Precio_inicial Posicion Exposicion_Total Garantia_Inicial
## 1 1 3868.860 3868.860 Largo 386886023 24373819
## 2 2 3859.915 3868.860 Largo 386886023 24373819
## 3 3 3842.735 3868.860 Largo 386886023 24373819
## 4 4 3784.758 3784.758 Corto 378475806 23843976
## 5 5 3743.030 3784.758 Corto 378475806 23843976
## 6 6 3708.350 3784.758 Corto 378475806 23843976
## 7 7 3671.914 3671.914 Corto 367191420 23133059
## 8 8 3700.256 3671.914 Corto 367191420 23133059
## 9 9 3707.600 3671.914 Corto 367191420 23133059
## 10 10 3721.167 3721.167 Largo 372116680 23443351
## 11 11 3711.281 3721.167 Largo 372116680 23443351
## 12 12 3717.399 3721.167 Largo 372116680 23443351
## 13 13 3748.157 3748.157 Largo 374815719 23613390
## 14 14 3753.079 3748.157 Largo 374815719 23613390
## 15 15 3689.289 3748.157 Largo 374815719 23613390
## 16 16 3697.517 3697.517 Corto 369751651 23294354
## 17 17 3685.079 3697.517 Corto 369751651 23294354
## 18 18 3693.209 3697.517 Corto 369751651 23294354
## 19 19 3642.394 3642.394 Corto 364239373 22947080
## 20 20 3575.676 3642.394 Corto 364239373 22947080
## 21 21 3572.010 3642.394 Corto 364239373 22947080
## 22 22 3549.817 3549.817 Corto 354981715 22363848
## 23 23 3539.054 3549.817 Corto 354981715 22363848
## 24 24 3546.292 3549.817 Corto 354981715 22363848
## 25 25 3527.569 3527.569 Corto 352756905 22223685
## 26 26 3545.575 3527.569 Corto 352756905 22223685
## 27 27 3551.011 3527.569 Corto 352756905 22223685
## 28 28 3555.568 3555.568 Largo 355556838 22400081
## 29 29 3494.867 3555.568 Largo 355556838 22400081
## 30 30 3487.777 3555.568 Largo 355556838 22400081
## 31 31 3468.435 3468.435 Corto 346843470 21851139
## 32 32 3461.524 3468.435 Corto 346843470 21851139
## 33 33 3460.028 3468.435 Corto 346843470 21851139
## 34 34 3447.046 3447.046 Corto 344704570 21716388
## 35 35 3435.354 3447.046 Corto 344704570 21716388
## 36 36 3435.662 3447.046 Corto 344704570 21716388
## 37 37 3416.355 3416.355 Corto 341635464 21523034
## 38 38 3416.744 3416.355 Corto 341635464 21523034
## 39 39 3428.793 3416.355 Corto 341635464 21523034
## 40 40 3430.411 3430.411 Largo 343041079 21611588
## 41 41 3439.375 3430.411 Largo 343041079 21611588
## 42 42 3430.489 3430.411 Largo 343041079 21611588
## 43 43 3441.609 3441.609 Largo 344160912 21682137
## 44 44 3439.548 3441.609 Largo 344160912 21682137
## 45 45 3466.434 3441.609 Largo 344160912 21682137
## 46 46 3445.057 3445.057 Largo 344505722 21703860
## 47 47 3453.766 3445.057 Largo 344505722 21703860
## 48 48 3474.993 3445.057 Largo 344505722 21703860
## Margen_Requerido Margen_Mantenimiento Margen_Call Ajuste_Posicion
## 1 12186910 12186910 0.0 0.00
## 2 12186910 11817412 369497.4 0.00
## 3 12186910 11459301 727608.9 NA
## 4 11921988 11112150 809837.5 0.00
## 5 11921988 10775691 1146296.6 0.00
## 6 11921988 10449370 1472617.5 13438539.53
## 7 11566530 10133267 1433262.6 0.00
## 8 11566530 9826939 1739590.7 0.00
## 9 11566530 9529741 2036788.3 74972.48
## 10 11721675 9241802 2479873.8 0.00
## 11 11721675 8962797 2758878.1 0.00
## 12 11721675 8692219 3029456.6 979909.88
## 13 11806695 8430001 3376693.9 0.00
## 14 11806695 8175803 3630892.2 0.00
## 15 11806695 7929486 3877209.0 -2811003.92
## 16 11647177 7690678 3956498.9 0.00
## 17 11647177 7459425 4187752.0 0.00
## 18 11647177 7235120 4412057.3 -391987.43
## 19 11473540 7017680 4455860.6 0.00
## 20 11473540 6806712 4666827.8 0.00
## 21 11473540 6602237 4871303.4 12119920.29
## 22 11181924 6404253 4777671.2 0.00
## 23 11181924 6212436 4969487.6 0.00
## 24 11181924 6026452 5155472.2 2571822.56
## 25 11111843 5845892 5265950.3 0.00
## 26 11111843 5671025 5440817.1 0.00
## 27 11111843 5501655 5610187.2 -471909.33
## 28 11200040 5337320 5862720.8 0.00
## 29 11200040 5178068 6021972.8 0.00
## 30 11200040 5023742 6176298.1 -6323430.31
## 31 10925569 4874237 6051332.3 0.00
## 32 10925569 4729337 6196231.9 0.00
## 33 10925569 4588804 6336765.7 2774835.22
## 34 10858194 4452548 6405645.5 0.00
## 35 10858194 4320545 6537649.1 0.00
## 36 10858194 4192608 6665586.2 2436586.78
## 37 10761517 4068570 6692947.4 0.00
## 38 10761517 3948438 6813078.6 0.00
## 39 10761517 3831918 6929598.7 686981.66
## 40 10805794 3718922 7086871.8 0.00
## 41 10805794 3609449 7196345.3 0.00
## 42 10805794 3503337 7302457.0 169663.03
## 43 10841069 3400392 7440676.3 0.00
## 44 10841069 3300574 7540494.9 0.00
## 45 10841069 3203955 7637113.3 3594438.50
## 46 10851930 3110352 7741578.5 0.00
## 47 10851930 3019619 7832311.5 0.00
## 48 10851930 2931627 7920303.3 855977.35
print(tabla_trimestremin)
## Mes TRM Precio_inicial Posicion Exposicion_Total Garantia_Inicial
## 3 3 3842.735 3868.860 Largo 386886023 24373819
## 6 6 3708.350 3784.758 Corto 378475806 23843976
## 9 9 3707.600 3671.914 Corto 367191420 23133059
## 12 12 3717.399 3721.167 Largo 372116680 23443351
## 15 15 3689.289 3748.157 Largo 374815719 23613390
## 18 18 3693.209 3697.517 Corto 369751651 23294354
## 21 21 3572.010 3642.394 Corto 364239373 22947080
## 24 24 3546.292 3549.817 Corto 354981715 22363848
## 27 27 3551.011 3527.569 Corto 352756905 22223685
## 30 30 3487.777 3555.568 Largo 355556838 22400081
## 33 33 3460.028 3468.435 Corto 346843470 21851139
## 36 36 3435.662 3447.046 Corto 344704570 21716388
## 39 39 3428.793 3416.355 Corto 341635464 21523034
## 42 42 3430.489 3430.411 Largo 343041079 21611588
## 45 45 3466.434 3441.609 Largo 344160912 21682137
## 48 48 3474.993 3445.057 Largo 344505722 21703860
## Margen_Requerido Margen_Mantenimiento Margen_Call Ajuste_Posicion
## 3 12186910 11459301 727608.9 NA
## 6 11921988 10449370 1472617.5 13438539.53
## 9 11566530 9529741 2036788.3 74972.48
## 12 11721675 8692219 3029456.6 979909.88
## 15 11806695 7929486 3877209.0 -2811003.92
## 18 11647177 7235120 4412057.3 -391987.43
## 21 11473540 6602237 4871303.4 12119920.29
## 24 11181924 6026452 5155472.2 2571822.56
## 27 11111843 5501655 5610187.2 -471909.33
## 30 11200040 5023742 6176298.1 -6323430.31
## 33 10925569 4588804 6336765.7 2774835.22
## 36 10858194 4192608 6665586.2 2436586.78
## 39 10761517 3831918 6929598.7 686981.66
## 42 10805794 3503337 7302457.0 169663.03
## 45 10841069 3203955 7637113.3 3594438.50
## 48 10851930 2931627 7920303.3 855977.35
# ------------------------------
# GRAFICAS
# ------------------------------
# Exposicion
ggplot(tabla2, aes(x = Mes, y = Exposicion_Total)) +
geom_line(color = "blue", size = 1.2) +
geom_point() +
theme_minimal() +
labs(title = "Exposicion Total", y = "USD", x = "Mes")
# Margenes
ggplot(tabla2, aes(x = Mes)) +
geom_line(aes(y = Margen_Requerido, color = "Requerido"), size = 1) +
geom_line(aes(y = margen_mantenimiento2, color = "Mantenimiento"), size = 1) +
geom_line(aes(y = Margen_Call, color = "Call"), size = 1) +
theme_minimal() +
labs(title = "Margenes", y = "USD", x = "Mes") +
scale_color_manual(values = c("Requerido" = "red", "Mantenimiento" = "green", "Call" = "orange"))
# Ajustes de posicion
ggplot(tabla2, aes(x = Mes, y = Ajuste_Posicion)) +
geom_bar(stat = "identity", fill = "purple", alpha = 0.7) +
theme_minimal() +
labs(title = "Ajustes de Posicion (cierres trimestrales)", y = "USD", x = "Mes")
Ahora el mismo proceso pero con la trayectoria promedio
if (!require(forecast)) install.packages("forecast")
library(forecast)
# Ajustar modelo AR(1)
modelo_ar3 <- Arima(trayectoria_promfro, order = c(1, 0, 0))
# Mostrar coeficientes
coeficientes3 <- modelo_ar3$coef
print(coeficientes3)
## ar1 intercept
## 0.2082482 3911.1922474
# Extraer beta (coeficiente AR1)
beta3 <- coeficientes3["ar1"]
alpha3 <- coeficientes3["intercept"]
cat("Beta estimado:", round(beta3, 4), "\n")
## Beta estimado: 0.2082
cat("Alpha estimado:", round(alpha3, 2), "\n")
## Alpha estimado: 3911.19
# Parametros base
meses <- 48
trimestres <- ceiling(meses / 3)
# Simulacion de TRM mensual (puedes reemplazar con datos reales)
TRMFROPROM <- trayectoria_promfro
# Modelo AR(1) calibrado
epsilon3 <- rnorm(meses, mean = 0, sd = 100)
# Parametros del contrato
valorcontrato <- 50000
nrocontratos <- 2
garantia <- 6.3 / 100
# Inicializar vectores
Precio_inicial <- numeric(meses)
expototal <- numeric(meses)
garantia_inicia <- numeric(meses)
margen_requerido <- numeric(meses)
margen_mantenimiento3 <- numeric(meses)
margen_call <- numeric(meses)
ajuste_posicion3 <- numeric(meses)
posicion <- character(meses)
# Simulacion mensual con rollover cada 3 meses
for (t in 1:meses) {
# --- Apertura de trimestre (mes 1, 4, 7, ...) ---
if (t %% 3 == 1) {
Precio_inicial[t] <- TRMFROPROM[t]
# Definir posicion según la variacion TRM del trimestre anterior
if (t > 3) {
delta_trm <- TRMFROPROM[t] - TRMFROPROM[t - 3]
posicion[t] <- ifelse(delta_trm > 0, "Largo", "Corto")
} else {
posicion[t] <- "Largo" # posicion inicial
}
# --- Meses intermedios (2, 3, 5, 6, ...) ---
} else {
Precio_inicial[t] <- Precio_inicial[t - 1]
posicion[t] <- posicion[t - 1]
}
# --- Exposicion y garantias ---
expototal[t] <- valorcontrato * Precio_inicial[t] * nrocontratos
garantia_inicia[t] <- expototal[t] * garantia
margen_requerido[t] <- garantia_inicia[t] * 0.5
# Modelo AR(2) para margen de mantenimiento
if (t == 1) {
margen_mantenimiento3[t] <- margen_requerido[t]
} else {
margen_mantenimiento3[t] <- alpha3 + beta3 * margen_mantenimiento3[t - 1] + epsilon3[t]
}
# Margen call
margen_call[t] <- ifelse(margen_mantenimiento3[t] < margen_requerido[t],
margen_requerido[t] - margen_mantenimiento3[t],
0)
# --- Liquidacion de posicion al cierre de trimestre (mes 3, 6, 9, ...) ---
if (t %% 3 == 0) {
delta_trm <- TRMFROPROM[t] - TRMFROPROM[t - 3]
ajuste <- delta_trm * valorcontrato * nrocontratos
ajuste_posicion3[t] <- ifelse(posicion[t] == "Largo", ajuste, -ajuste)
} else {
ajuste_posicion3[t] <- 0
}
}
tabla3 <- data.frame(
Mes = 1:meses,
TRM = TRMFROPROM[1:meses],
Precio_inicial,
Posicion = posicion,
Exposicion_Total = expototal,
Garantia_Inicial = garantia_inicia,
Margen_Requerido = margen_requerido,
Margen_Mantenimiento = margen_mantenimiento3,
Margen_Call = margen_call,
Ajuste_Posicion = ajuste_posicion3
)
# Tabla solo con cierres trimestrales
tabla_trimestreprom <- tabla3[tabla3$Mes %% 3 == 0, ]
# Mostrar tablas
print(tabla3)
## Mes TRM Precio_inicial Posicion Exposicion_Total Garantia_Inicial
## 1 1 3842.465 3842.465 Largo 384246479 24207528
## 2 2 3903.052 3842.465 Largo 384246479 24207528
## 3 3 3901.415 3842.465 Largo 384246479 24207528
## 4 4 3918.199 3918.199 Largo 391819882 24684653
## 5 5 3892.603 3918.199 Largo 391819882 24684653
## 6 6 3895.454 3918.199 Largo 391819882 24684653
## 7 7 3852.693 3852.693 Corto 385269302 24271966
## 8 8 3907.045 3852.693 Corto 385269302 24271966
## 9 9 3936.531 3852.693 Corto 385269302 24271966
## 10 10 3832.534 3832.534 Corto 383253354 24144961
## 11 11 3911.521 3832.534 Corto 383253354 24144961
## 12 12 3954.786 3832.534 Corto 383253354 24144961
## 13 13 3946.683 3946.683 Largo 394668306 24864103
## 14 14 3897.096 3946.683 Largo 394668306 24864103
## 15 15 3963.566 3946.683 Largo 394668306 24864103
## 16 16 4000.179 4000.179 Largo 400017926 25201129
## 17 17 3918.915 4000.179 Largo 400017926 25201129
## 18 18 3903.060 4000.179 Largo 400017926 25201129
## 19 19 3858.750 3858.750 Corto 385875046 24310128
## 20 20 3942.901 3858.750 Corto 385875046 24310128
## 21 21 3930.823 3858.750 Corto 385875046 24310128
## 22 22 3876.438 3876.438 Largo 387643835 24421562
## 23 23 4022.231 3876.438 Largo 387643835 24421562
## 24 24 3943.730 3876.438 Largo 387643835 24421562
## 25 25 3878.681 3878.681 Largo 387868058 24435688
## 26 26 3869.248 3878.681 Largo 387868058 24435688
## 27 27 3879.154 3878.681 Largo 387868058 24435688
## 28 28 3861.814 3861.814 Corto 386181411 24329429
## 29 29 3858.501 3861.814 Corto 386181411 24329429
## 30 30 3910.062 3861.814 Corto 386181411 24329429
## 31 31 3879.190 3879.190 Largo 387919026 24438899
## 32 32 3954.567 3879.190 Largo 387919026 24438899
## 33 33 3941.490 3879.190 Largo 387919026 24438899
## 34 34 3871.348 3871.348 Corto 387134786 24389492
## 35 35 3861.100 3871.348 Corto 387134786 24389492
## 36 36 3842.580 3871.348 Corto 387134786 24389492
## 37 37 3888.713 3888.713 Largo 388871270 24498890
## 38 38 3936.876 3888.713 Largo 388871270 24498890
## 39 39 3878.460 3888.713 Largo 388871270 24498890
## 40 40 3984.404 3984.404 Largo 398440385 25101744
## 41 41 3943.548 3984.404 Largo 398440385 25101744
## 42 42 3955.627 3984.404 Largo 398440385 25101744
## 43 43 3964.744 3964.744 Corto 396474429 24977889
## 44 44 3903.353 3964.744 Corto 396474429 24977889
## 45 45 3927.093 3964.744 Corto 396474429 24977889
## 46 46 3869.403 3869.403 Corto 386940273 24377237
## 47 47 3943.500 3869.403 Corto 386940273 24377237
## 48 48 3980.855 3869.403 Corto 386940273 24377237
## Margen_Requerido Margen_Mantenimiento Margen_Call Ajuste_Posicion
## 1 12103764 12103764.082 0 0.0
## 2 12103764 2524425.760 9579338 0.0
## 3 12103764 529587.582 11574177 NA
## 4 12342326 114213.629 12228113 0.0
## 5 12342326 27751.846 12314574 0.0
## 6 12342326 9839.862 12332486 -596163.8
## 7 12135983 6024.536 12129958 0.0
## 8 12135983 5076.260 12130907 0.0
## 9 12135983 4833.619 12131149 -4107704.5
## 10 12072481 4926.913 12067554 0.0
## 11 12072481 4956.335 12067524 0.0
## 12 12072481 4984.442 12067496 -1825540.8
## 13 12432052 4902.807 12427149 0.0
## 14 12432052 4840.465 12427211 0.0
## 15 12432052 4815.733 12427236 878017.1
## 16 12600565 4941.238 12595623 0.0
## 17 12600565 4922.185 12595642 0.0
## 18 12600565 4877.675 12595687 -6050626.3
## 19 12155064 5149.717 12149914 0.0
## 20 12155064 5013.560 12150050 0.0
## 21 12155064 5052.121 12150012 -2776256.7
## 22 12210781 4929.888 12205851 0.0
## 23 12210781 5066.067 12205715 0.0
## 24 12210781 5040.677 12205740 1290717.2
## 25 12217844 5008.189 12212836 0.0
## 26 12217844 5022.619 12212821 0.0
## 27 12217844 4900.118 12212944 -6457539.6
## 28 12164714 4977.245 12159737 0.0
## 29 12164714 4845.247 12159869 0.0
## 30 12164714 4830.167 12159884 -3090765.3
## 31 12219449 4883.498 12214566 0.0
## 32 12219449 5095.437 12214354 0.0
## 33 12219449 4901.608 12214548 3142771.4
## 34 12194746 4855.876 12189890 0.0
## 35 12194746 4909.650 12189836 0.0
## 36 12194746 4989.153 12189757 9890989.5
## 37 12249445 4805.184 12244640 0.0
## 38 12249445 5009.230 12244436 0.0
## 39 12249445 4996.708 12244448 3587974.9
## 40 12550872 4973.285 12545899 0.0
## 41 12550872 4851.070 12546021 0.0
## 42 12550872 4974.607 12545898 7716760.7
## 43 12488945 4858.640 12484086 0.0
## 44 12488945 4988.352 12483956 0.0
## 45 12488945 4922.128 12484022 2853447.8
## 46 12188619 4873.799 12183745 0.0
## 47 12188619 4845.236 12183773 0.0
## 48 12188619 4897.002 12183722 -5376223.2
print(tabla_trimestreprom)
## Mes TRM Precio_inicial Posicion Exposicion_Total Garantia_Inicial
## 3 3 3901.415 3842.465 Largo 384246479 24207528
## 6 6 3895.454 3918.199 Largo 391819882 24684653
## 9 9 3936.531 3852.693 Corto 385269302 24271966
## 12 12 3954.786 3832.534 Corto 383253354 24144961
## 15 15 3963.566 3946.683 Largo 394668306 24864103
## 18 18 3903.060 4000.179 Largo 400017926 25201129
## 21 21 3930.823 3858.750 Corto 385875046 24310128
## 24 24 3943.730 3876.438 Largo 387643835 24421562
## 27 27 3879.154 3878.681 Largo 387868058 24435688
## 30 30 3910.062 3861.814 Corto 386181411 24329429
## 33 33 3941.490 3879.190 Largo 387919026 24438899
## 36 36 3842.580 3871.348 Corto 387134786 24389492
## 39 39 3878.460 3888.713 Largo 388871270 24498890
## 42 42 3955.627 3984.404 Largo 398440385 25101744
## 45 45 3927.093 3964.744 Corto 396474429 24977889
## 48 48 3980.855 3869.403 Corto 386940273 24377237
## Margen_Requerido Margen_Mantenimiento Margen_Call Ajuste_Posicion
## 3 12103764 529587.582 11574177 NA
## 6 12342326 9839.862 12332486 -596163.8
## 9 12135983 4833.619 12131149 -4107704.5
## 12 12072481 4984.442 12067496 -1825540.8
## 15 12432052 4815.733 12427236 878017.1
## 18 12600565 4877.675 12595687 -6050626.3
## 21 12155064 5052.121 12150012 -2776256.7
## 24 12210781 5040.677 12205740 1290717.2
## 27 12217844 4900.118 12212944 -6457539.6
## 30 12164714 4830.167 12159884 -3090765.3
## 33 12219449 4901.608 12214548 3142771.4
## 36 12194746 4989.153 12189757 9890989.5
## 39 12249445 4996.708 12244448 3587974.9
## 42 12550872 4974.607 12545898 7716760.7
## 45 12488945 4922.128 12484022 2853447.8
## 48 12188619 4897.002 12183722 -5376223.2
# ------------------------------
# GRAFICAS
# ------------------------------
# Exposicion
ggplot(tabla3, aes(x = Mes, y = Exposicion_Total)) +
geom_line(color = "blue", size = 1.2) +
geom_point() +
theme_minimal() +
labs(title = "Exposicion Total", y = "USD", x = "Mes")
# Margenes
ggplot(tabla3, aes(x = Mes)) +
geom_line(aes(y = Margen_Requerido, color = "Requerido"), size = 1) +
geom_line(aes(y = margen_mantenimiento, color = "Mantenimiento"), size = 1) +
geom_line(aes(y = Margen_Call, color = "Call"), size = 1) +
theme_minimal() +
labs(title = "Margenes", y = "USD", x = "Mes") +
scale_color_manual(values = c("Requerido" = "red", "Mantenimiento" = "green", "Call" = "orange"))
# Ajustes de posicion
ggplot(tabla3, aes(x = Mes, y = Ajuste_Posicion)) +
geom_bar(stat = "identity", fill = "purple", alpha = 0.7) +
theme_minimal() +
labs(title = "Ajustes de Posicion (cierres trimestrales)", y = "USD", x = "Mes")
# Escenario: Maximo
comp_max <- data.frame(
Mes = 1:nfro,
Cuota_Credito = amortizacion_cop$Cuota_Max[1:nfro],
Flujo_Futuro = ajuste_posicion[1:nfro]
)
comp_max$comparacion_max<- comp_max$Flujo_Futuro - comp_max$Cuota_Credito
comp_max$Acumulado <- cumsum(comp_max$comparacion_max)
# Escenario: minimi
comp_min <- data.frame(
Mes = 1:nfro,
Cuota_Credito2 = amortizacion_cop$Cuota_Min[1:nfro],
Flujo_Futuro2 = ajuste_posicion2[1:nfro]
)
comp_min$comparacion_min<- comp_min$Flujo_Futuro2 - comp_min$Cuota_Credito
comp_min$Acumulado <- cumsum(comp_min$comparacion_min)
# Escenario: promedio
comp_pro <- data.frame(
Mes = 1:nfro,
Cuota_Credito3= amortizacion_cop$Cuota_Prom[1:nfro],
Flujo_Futuro3 = ajuste_posicion3[1:nfro]
)
comp_pro$comparacion_pro<- comp_pro$Flujo_Futuro3 - comp_pro$Cuota_Credito
comp_pro$Acumulado <- cumsum(comp_pro$comparacion_pro)
library(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
library(ggplot2)
# Escenario: Maximo
ggplot(comp_max, aes(x = Mes)) +
# Linea horizontal de la cuota de credito
geom_hline(aes(yintercept = mean(Cuota_Credito)), color = "red", linetype = "dashed", size = 1) +
# Ajustes de posicion de los futuros
geom_line(aes(y = Flujo_Futuro, color = "Futuro"), size = 1) +
theme_minimal() +
labs(title = "Cuota Credito (linea horizontal) vs Ajustes de Futuro (Escenario Maximo)",
x = "Mes", y = "COP") +
scale_color_manual(values = c("Futuro" = "blue"))
## Escenario: minimo
ggplot(comp_min, aes(x = Mes)) +
# Linea horizontal de la cuota de credito
geom_hline(aes(yintercept = mean(Cuota_Credito2)), color = "violet", linetype = "dashed", size = 1) +
# Ajustes de posicion de los futuros
geom_line(aes(y = Flujo_Futuro2, color = "Futuro"), size = 1) +
theme_minimal() +
labs(title = "Cuota Credito (linea horizontal) vs Ajustes de Futuro (Escenario Maximo)",
x = "Mes", y = "COP") +
scale_color_manual(values = c("Futuro" = "orange"))
## Escenario: promedio
ggplot(comp_pro, aes(x = Mes)) +
# Linea horizontal de la cuota de credito
geom_hline(aes(yintercept = mean(Cuota_Credito3)), color = "pink", linetype = "dashed", size = 1) +
# Ajustes de posicion de los futuros
geom_line(aes(y = Flujo_Futuro3, color = "Futuro"), size = 1) +
theme_minimal() +
labs(title = "Cuota Credito (linea horizontal) vs Ajustes de Futuro (Escenario Maximo)",
x = "Mes", y = "COP") +
scale_color_manual(values = c("Futuro" = "yellow"))
``` # Bibliografía
Banco de la República de Colombia. (2025, enero). Informe de Política Monetaria. Recuperado de https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025
Bancolombia. (2025). Actualización: perspectivas económicas Colombia 2025‑2026. Grupo Bancolombia, Dirección de Investigaciones Económicas. Recuperado de https://www.bancolombia.com/empresas/capital-inteligente/actualidad-economica-sectorial/perspectivas-economicas-2025
Bancolombia. (2025, marzo). Bancolombia elevó sus proyecciones de inflación a cierre de 2025 y espera que se sitúe en 4,4%. Recuperado de https://www.larepublica.co/economia/grupo-bancolombia-elevo-su-estimacion-de-inflacion‑a‑cierre‑de‑2025‑y‑espera‑que‑se‑situe‑en‑4‑4‑4091367
https://www.bvc.com.co/mercado-local-en-linea?tab=renta-variable_mercado-global-colombiano
https://www.banrep.gov.co/es/servicios-temas/11647
Imagen 1 {Comportamiento de la TRM}, author = {{Banco de la República de Colombia}}, year = {2025}, institution = {Banco de la República}, url = {https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025}
Imagen 2 {Evolución precio dolar }, author = {{Banco de la República de Colombia}}, year = {2025}, institution = {Banco de la República}, url = {https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025}
Imagen 3 {Supuesto de la tasa de interés de la reserva federal }, author = {{Banco de la República de Colombia}}, year = {2025}, institution = {Banco de la República}, url = {https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025}
Imagen 4 {Prima de riesgo de Colombia}, author = {{Banco de la República de Colombia}}, year = {2025}, institution = {Banco de la República}, url = {https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025}
Imagen 5 {Proyecciones del IPC}, author = {{Banco de la República de Colombia}}, year = {2025}, institution = {Banco de la República}, url = {https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025}
Imagen 6 {Pronóstico de la tasa de cambio USD/COP}, author = {{Banco de la República de Colombia}}, year = {2025}, institution = {Banco de la República}, url = {https://www.banrep.gov.co/es/publicaciones-investigaciones/informe-politica-monetaria/enero-2025}