# Configuracion inicial y carga de librerias
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
library(readxl)
## Warning: package 'readxl' was built under R version 4.3.3
library(ggplot2)
library(knitr)
# --- Parametros Iniciales ---
monto_cop <- 350000000
trm_hoy <- 3950
monto_usd <- monto_cop / trm_hoy
# Financiamiento (90% del valor total)
cuota_inicial_usd <- monto_usd * 0.10
credito_usd <- monto_usd - cuota_inicial_usd
# Condiciones del Credito
plazo_anos <- 10
n_cuotas <- plazo_anos * 4
tasa_ea_usd <- 0.065
tasa_trimestral <- (1 + tasa_ea_usd)^(1/4) - 1
# Calculo de la cuota trimestral fija
cuota_trim_usd <- credito_usd * (tasa_trimestral / (1 - (1 + tasa_trimestral)^-n_cuotas))
resultados_credito <- data.frame(
Concepto = c("Inversion Total (USD)", "Credito a Financiar (USD)", "Cuota Trimestral (USD)"),
Valor = c(round(monto_usd, 2), round(credito_usd, 2), round(cuota_trim_usd, 2))
)
kable(resultados_credito, caption = "Resumen del Credito Externo")
Resumen del Credito Externo
| Inversion Total (USD) |
88607.59 |
| Credito a Financiar (USD) |
79746.84 |
| Cuota Trimestral (USD) |
2708.14 |
# Tasas comerciales supuestas (Diferencial de tasas)
tasa_col <- 0.12 # 12% EA en Colombia
tasa_usa <- 0.05 # 5% EA en EE.UU.
# Proyeccion de Precios Forward
anos <- 6:9
precios_fwd <- trm_hoy * ((1 + tasa_col) / (1 + tasa_usa))^anos
# Construccion de la tabla de cobertura
tabla_cobertura <- data.frame(
Periodo_Anual = anos,
Tasa_Forward_COP = round(precios_fwd, 2),
USD_Asegurados = round(cuota_trim_usd * 4 * 0.75, 2)
)
# Costo total asegurado en pesos colombianos
tabla_cobertura$Costo_Asegurado_COP <- round(tabla_cobertura$USD_Asegurados * tabla_cobertura$Tasa_Forward_COP, 0)
kable(tabla_cobertura, caption = "Cronograma de Cobertura (Anos 6-9)")
Cronograma de Cobertura (Anos 6-9)
| 6 |
5817.94 |
8124.43 |
47267446 |
| 7 |
6205.81 |
8124.43 |
50418669 |
| 8 |
6619.53 |
8124.43 |
53779908 |
| 9 |
7060.83 |
8124.43 |
57365219 |
# Se ejecuta el bloque completo para evitar errores de sintaxis en la consola
plot(anos, precios_fwd, type="b", pch=19, col="darkblue",
main="Estructura de Plazos: Curva de Precios Forward",
xlab="Años de la Inversión", ylab="Precio Forward (COP)",
ylim=c(trm_hoy * 0.9, max(precios_fwd) * 1.1))
grid()
abline(h=trm_hoy, col="red", lty=2)
legend("bottomright",
legend=c("Precio Forward", "TRM Hoy (Spot)"),
col=c("darkblue", "red"),
lty=c(1,2),
pch=c(19, NA))

# Generar periodos
periodos <- 1:n_cuotas
# Simulación simple de TRM proyectada (solo como ejemplo lineal para el punto 3)
trm_proyectada <- trm_hoy * (1 + 0.015)^periodos # Asumiendo devaluación trimestral del 1.5%
cuotas_cop <- cuota_trim_usd * trm_proyectada
# Esto te permite analizar el "comportamiento del crédito transformado a pesos"
analisis_pesos <- data.frame(
Trimestre = periodos,
Cuota_USD = round(cuota_trim_usd, 2),
TRM_Estimada = round(trm_proyectada, 2),
Cuota_COP = round(cuotas_cop, 0)
)
# --- Simulación BMG (Punto 4 del Taller) ---
# Parámetros estadísticos (Basados en histórica hipotética o real)
mu <- 0.005 # Retorno esperado mensual
sigma <- 0.04 # Volatilidad mensual (Desviación estándar)
n_sim <- 1000 # Número de simulaciones
t_meses <- 12 # Horizonte a un año
# Simulación BMG con Distribución Normal
set.seed(123)
matriz_normal <- matrix(ncol = n_sim, nrow = t_meses)
for(i in 1:n_sim) {
retornos <- rnorm(t_meses, mean = mu, sd = sigma)
matriz_normal[,i] <- trm_hoy * exp(cumsum(retornos))
}
# Simulación con T-Student (Colas pesadas)
# Usamos df = 3 para representar mayor probabilidad de eventos extremos
matriz_t <- matrix(ncol = n_sim, nrow = t_meses)
for(i in 1:n_sim) {
retornos_t <- rt(t_meses, df = 3) * sigma + mu
matriz_t[,i] <- trm_hoy * exp(cumsum(retornos_t))
}
# Visualización de una simulación (Primeros 10 caminos)
matplot(matriz_normal[,1:10], type = "l", lty = 1,
main = "Simulación BMG - Trayectorias TRM (Normal)",
xlab = "Meses", ylab = "TRM Proyectada")

library(readxl)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.3.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(knitr)
trm_xlsx <- read_excel("C:/Analisis/trm.xlsx.xlsx")
trm_xlsx <- trm_xlsx %>%
mutate(
Fecha = as.Date(Fecha),
TRM = as.numeric(TRM)
) %>%
filter(!is.na(TRM)) %>%
arrange(Fecha)
kable(head(trm_xlsx), caption = "Histórico de TRM cargado para Simulación")
Histórico de TRM cargado para Simulación
| 2011-03-23 |
1866.34 |
| 2011-03-24 |
1867.74 |
| 2011-03-25 |
1865.11 |
| 2011-03-26 |
1871.37 |
| 2011-03-27 |
1871.37 |
| 2011-03-28 |
1871.37 |
library(ggplot2)
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(scales)
# CÁLCULO DE RENDIMIENTOS LOGARÍTMICOS
# Permite comparar variaciones porcentuales
trm_xlsx <- trm_xlsx %>%
arrange(Fecha) %>%
mutate(Retorno = log(TRM / lag(TRM))) %>%
filter(!is.na(Retorno))
# ESTADÍSTICAS DESCRIPTIVAS (Metricas de Riesgo)
mu <- mean(trm_xlsx$Retorno) # Retorno promedio diario
sigma_diaria <- sd(trm_xlsx$Retorno) # Volatilidad diaria
sigma_anual <- sigma_diaria * sqrt(252) # Volatilidad anualizada (252 días hábiles)
# VISUALIZACION: EVOLUCION HISTORICA
p1 <- ggplot(trm_xlsx, aes(x = Fecha, y = TRM)) +
geom_line(color = "darkblue", size = 0.8) +
labs(title = "Evolución Histórica de la TRM (Colombia)",
subtitle = paste("Volatilidad Anualizada:", percent(sigma_anual)),
x = "Año", y = "Pesos (COP)") +
theme_minimal() +
scale_y_continuous(labels = comma)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# VISUALIZACION: VOLATILIDAD (CLUSTER DE VOLATILIDAD)
p2 <- ggplot(trm_xlsx, aes(x = Fecha, y = Retorno)) +
geom_line(color = "darkred", alpha = 0.6) +
labs(title = "Rendimientos Logarítmicos Diarios",
subtitle = "Visualización de la variabilidad y clusters de riesgo",
x = "Fecha", y = "Log-Retornos") +
theme_light()
# Mostrar gráficas
print(p1)

print(p2)

# RESUMEN EJECUTIVO PARA REPORTE
resumen <- data.frame(
Metrica = c("TRM Actual", "Retorno Promedio Diario", "Volatilidad Diaria", "Volatilidad Anual (252d)"),
Valor = c(tail(trm_xlsx$TRM, 1), percent(mu, 0.001), percent(sigma_diaria, 0.01), percent(sigma_anual, 0.01))
)
kable(resumen, caption = "Resumen de Métricas Financieras del Activo")
Resumen de Métricas Financieras del Activo
| TRM Actual |
3668.89 |
| Retorno Promedio Diario |
0.012% |
| Volatilidad Diaria |
0.62% |
| Volatilidad Anual (252d) |
9.87% |
# Caldulos de apoyo para toma de decisiones
trm_cierre <- tail(trm_xlsx$TRM, 1)
valor_fwd_max <- max(precios_fwd)
escenario_riesgo_t <- quantile(matriz_t[t_meses, ], 0.95) # Valor en Riesgo (VaR) al 95%
# Matriz de decision
matriz_resumen <- data.frame(
Pilar_Estrategico = c(
"1. Estructura de Capital", "",
"2. Analisis de Sensibilidad", "",
"3. Gestion de Riesgo (Hedging)", "",
"4. Diagnostico de Viabilidad"
),
Indicador_Clave = c(
"Apalancamiento Externo (USD)",
"Servicio de Deuda Trimestral",
"Volatilidad Real vs. Supuesta",
"Peor Escenario TRM (12 meses)",
"Eficiencia de Cobertura (Fwd)",
"Presupuesto Maximo COP (Año 9)",
"Recomendacion Final"
),
Resultado = c(
paste("USD", format(round(credito_usd, 0), big.mark = ",")),
paste("USD", format(round(cuota_trim_usd, 2), big.mark = ",")),
paste(round(sigma_anual*100, 2), "% (Historica)"),
paste("$", format(round(escenario_riesgo_t, 0), big.mark = ".")),
"75% de la Exposicion (Años 6-9)",
paste("$", format(round(tabla_cobertura$Costo_Asegurado_COP[4], 0), big.mark = ".")),
"PROCEDER CON COBERTURA"
),
Impacto_en_Decision = c(
"Exposicion cambiaria directa.",
"Flujo de caja fijo en USD.",
"Alta volatilidad: requiere seguro.",
"Riesgo de cola detectado (T-Student).",
"Mitigacion de volatilidad extrema.",
"Costo maximo conocido y acotado.",
"Proteccion del margen operativo."
)
)
## Warning in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
## 'big.mark' and 'decimal.mark' are both '.', which could be confusing
## Warning in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
## 'big.mark' and 'decimal.mark' are both '.', which could be confusing
# 3. Formato de Tabla Profesional
kable(matriz_resumen,
align = "llll",
caption = "MATRIZ DE SOPORTE PARA LA TOMA DE DECISIONES FINANCIERAS (PROYECCION 2026-2036)")
MATRIZ DE SOPORTE PARA LA TOMA DE DECISIONES FINANCIERAS
(PROYECCION 2026-2036)
| 1. Estructura de Capital |
Apalancamiento Externo (USD) |
USD 79,747 |
Exposicion cambiaria directa. |
|
Servicio de Deuda Trimestral |
USD 2,708.14 |
Flujo de caja fijo en USD. |
| 2. Analisis de Sensibilidad |
Volatilidad Real vs. Supuesta |
9.87 % (Historica) |
Alta volatilidad: requiere seguro. |
|
Peor Escenario TRM (12 meses) |
$ 6.120 |
Riesgo de cola detectado (T-Student). |
| 3. Gestion de Riesgo (Hedging) |
Eficiencia de Cobertura (Fwd) |
75% de la Exposicion (Años 6-9) |
Mitigacion de volatilidad extrema. |
|
Presupuesto Maximo COP (Año 9) |
$ 57.365.219 |
Costo maximo conocido y acotado. |
| 4. Diagnostico de Viabilidad |
Recomendacion Final |
PROCEDER CON COBERTURA |
Proteccion del margen operativo. |
# Analisis conjunto para crédito de maquinaria
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
library(readxl)
library(dplyr)
library(ggplot2)
library(knitr)
library(scales)
# Parámetros iniciales
trm_hoy <- 3950
monto_cop <- 350000000
monto_usd <- monto_cop / trm_hoy
# Crédito (90%)
cuota_inicial_usd <- monto_usd * 0.10
credito_usd <- monto_usd - cuota_inicial_usd
tasa_ea_usd <- 0.065
tasa_mensual <- (1 + tasa_ea_usd)^(1/12) - 1
plazo_meses <- 120 # 10 años
# Cuota Fija USD
cuota_usd <- credito_usd * (tasa_mensual / (1 - (1 + tasa_mensual)^-plazo_meses))
resumen_credito <- data.frame(
Concepto = c("Inversion Total (USD)", "Financiamiento (90% en USD)", "Cuota Mensual (USD)"),
Valor = c(round(monto_usd, 2), round(credito_usd, 2), round(cuota_usd, 2))
)
kable(resumen_credito, caption = "Punto 2: Resumen del Credito Externo")
Punto 2: Resumen del Credito Externo
| Inversion Total (USD) |
88607.59 |
| Financiamiento (90% en USD) |
79746.84 |
| Cuota Mensual (USD) |
897.98 |
meses <- 1:plazo_meses
trm_proy <- trm_hoy * (1 + 0.005)^meses
cuotas_cop <- cuota_usd * trm_proy
plot(meses, cuotas_cop/1e6, type="l", col="darkblue", lwd=2,
main="Evolucion de la Cuota en Millones de Pesos",
xlab="Mes", ylab="Millones de COP")
grid()

# Carga y Limpieza
trm_xlsx <- read_excel("C:/Analisis/trm.xlsx.xlsx")
trm_xlsx <- trm_xlsx %>%
mutate(Fecha = as.Date(Fecha), TRM = as.numeric(TRM)) %>%
arrange(Fecha) %>%
mutate(Retorno = log(TRM / lag(TRM))) %>%
filter(!is.na(Retorno))
# Estadísticas Mensuales
mu_m <- mean(trm_xlsx$Retorno) * 30
sigma_m <- sd(trm_xlsx$Retorno) * sqrt(30)
# Simulación 12 meses
n_sim <- 1000
t_horizonte <- 12
set.seed(123)
sim_normal <- matrix(ncol = n_sim, nrow = t_horizonte)
sim_t <- matrix(ncol = n_sim, nrow = t_horizonte)
for(i in 1:n_sim) {
sim_normal[,i] <- trm_hoy * exp(cumsum(rnorm(t_horizonte, mu_m, sigma_m)))
sim_t[,i] <- trm_hoy * exp(cumsum((rt(t_horizonte, df=3) * sigma_m) + mu_m))
}
# Visualización T-Student (Colas Pesadas)
matplot(sim_t[,1:20], type="l", lty=1,
main="Trayectorias TRM: Distribucion T-Student",
xlab="Meses", ylab="TRM Proyectada")

# Matriz de decision estrategica
var_95 <- quantile(sim_t[t_horizonte,], 0.95)
matriz <- data.frame(
Metrica = c("Volatilidad Anual Real", "Peor Escenario TRM (12m)", "Recomendacion"),
Resultado = c(percent(sd(trm_xlsx$Retorno)*sqrt(252)),
paste("$", round(var_95,0)),
"IMPLEMENTAR COBERTURA")
)
kable(matriz, caption = "Conclusion Profesional para Toma de Decisiones")
Conclusion Profesional para Toma de Decisiones
| Volatilidad Anual Real |
10% |
| Peor Escenario TRM (12m) |
$ 5580 |
| Recomendacion |
IMPLEMENTAR COBERTURA |