Parte 1

  1. Análisis fundamental de la TRM y expectativa de precios

Se realiza un análisis fundamental del comportamiento histórico de la Tasa Representativa del Mercado (TRM), con el objetivo de estimar la expectativa de la TRM para los próximos 12 meses. Se revisan informes económicos y proyecciones de mercado de la divisa para fundamentar esta expectativa. Posteriormente, se analiza la evolución mensual histórica para obtener una base cuantitativa del comportamiento de la TRM.

# Cargar librerías necesarias
library(quantmod)
library(tidyverse)
library(lubridate)

# Obtener datos históricos de TRM (USD/COP en Yahoo Finance)
# Ajustar el símbolo según disponibilidad. Por ejemplo: USDCOP=X
getSymbols("USDCOP=X", src = "yahoo", from = Sys.Date() - years(5), to = Sys.Date())
## [1] "USDCOP=X"
# Revisar estructura
head(`USDCOP=X`)
##            USDCOP=X.Open USDCOP=X.High USDCOP=X.Low USDCOP=X.Close
## 2020-05-20       3815.39       3815.39     3769.281        3815.39
## 2020-05-21       3769.04       3769.05     3761.470        3769.04
## 2020-05-24       3773.28       3776.71     3729.848        3773.28
## 2020-05-25       3776.71       3776.71     3771.000        3776.71
## 2020-05-26       3729.75       3750.25     3729.000        3729.75
## 2020-05-27       3733.75       3735.22     3690.493        3733.75
##            USDCOP=X.Volume USDCOP=X.Adjusted
## 2020-05-20               0           3815.39
## 2020-05-21               0           3769.04
## 2020-05-24               0           3773.28
## 2020-05-25               0           3776.71
## 2020-05-26               0           3729.75
## 2020-05-27               0           3733.75
# Convertir a data frame y seleccionar cierre ajustado
trm_data <- `USDCOP=X` %>% 
  as.data.frame() %>% 
  rownames_to_column(var = "Date") %>% 
  mutate(Date = as.Date(Date)) %>% 
  select(Date, Close = `USDCOP=X.Adjusted`)

# Visualizar serie de tiempo de la TRM
ggplot(trm_data, aes(x = Date, y = Close)) +
  geom_line(color = "blue") +
  labs(title = "Evolución histórica de la TRM (USD/COP)", x = "Fecha", y = "TRM") +
  theme_minimal()

La serie histórica de la Tasa Representativa del Mercado (TRM) entre el dólar estadounidense y el peso colombiano muestra una notable volatilidad en los últimos cinco años. Se observa un rango amplio de fluctuación con un aumento significativo alrededor del año 2023, donde la TRM alcanzó máximos superiores a 5000 pesos por dólar, seguido de correcciones y períodos de estabilización. Esta evolución refleja las dinámicas económicas y cambios en el mercado cambiario de la región durante este período.

  1. Cálculo de retornos mensuales y desviación estándar

Se calculan los retornos mensuales de la TRM histórica y su desviación estándar mensual para cuantificar la volatilidad de la divisa. Estos cálculos servirán para alimentar las simulaciones posteriores.

# Crear retornos logarítmicos mensuales
trm_monthly <- trm_data %>%
  mutate(month = floor_date(Date, "month")) %>%
  group_by(month) %>%
  summarize(month_close = last(Close)) %>%
  ungroup() %>%
  mutate(retornos = log(month_close) - log(lag(month_close)))

# Estadísticas descriptivas
retornos_stats <- trm_monthly %>%
  summarize(mean_return = mean(retornos, na.rm = TRUE),
            sd_return = sd(retornos, na.rm = TRUE))

retornos_stats
## # A tibble: 1 × 2
##   mean_return sd_return
##         <dbl>     <dbl>
## 1     0.00187    0.0330

El análisis de los retornos logarítmicos mensuales de la TRM histórica revela una tasa de retorno promedio mensual de aproximadamente 0.19%, con una desviación estándar de alrededor del 3.3%. Esta volatilidad mensual sugiere que, aunque la TRM tiende a presentar un crecimiento moderado en el mediano plazo, las fluctuaciones en el corto plazo pueden ser significativas, aspecto relevante para el manejo del riesgo cambiario en inversiones y créditos en moneda extranjera.

  1. Simulación mensual BMG (Brownian Motion Geométrico)

Se simula la evolución mensual futura de la TRM durante 12 meses utilizando un proceso de movimiento geométrico browniano (BMG). Este modelo es común para representar precios de activos financieros, considerando la media y volatilidad obtenida en los retornos mensuales históricos.

# Parámetros para simulación
n_months <- 120
S0 <- tail(trm_monthly$month_close, 1)
mu <- retornos_stats$mean_return
sigma <- retornos_stats$sd_return

# Simulación BMG
set.seed(123) # para reproducibilidad
dt <- 1/12 # periodo mensual
retornos_sim <- rnorm(n_months, mean = mu * dt, sd = sigma * sqrt(dt))

# Precio simulado
precios_sim <- numeric(n_months + 1)
precios_sim[1] <- S0
for(i in 2:(n_months + 1)) {
  precios_sim[i] <- precios_sim[i-1] * exp(retornos_sim[i-1])
}

sim_data <- data.frame(
  Mes = 0:n_months,
  Precio_TRM = precios_sim
)

# Gráfica de simulación
ggplot(sim_data, aes(x = Mes, y = Precio_TRM)) +
  geom_line(color = "darkgreen") +
  labs(title = "Simulación mensual de TRM (BMG)", x = "Mes", y = "TRM simulada") +
  theme_minimal()

La simulación de la TRM utilizando un proceso de movimiento geométrico browniano durante 12 meses evidencia un comportamiento ascendente con fluctuaciones mes a mes. Esta simulación incorpora la media y volatilidad estimadas en los datos históricos, permitiendo proyectar posibles trayectorias futuras del tipo de cambio. Los resultados sugieren que el valor de la TRM podría continuar con variaciones, afectando la valoración en pesos de obligaciones denominadas en dólares.

  1. Simulación de crédito en dólares (con pago inicial 15%)

Se modela la simulación del crédito para la compra de maquinaria en dólares, aplicando la tasa extranjera calculada y considerando un pago inicial del 15% del valor del crédito. Se simulan los pagos mensuales bajo un sistema francés de amortización para un plazo superior a 10 años.

# Datos básicos
valor_inversion_pesos <- 300000000
valor_inversion_usd <- valor_inversion_pesos / S0

# Monto crédito con pago inicial 15%
pago_inicial <- 0.15 * valor_inversion_usd
monto_credito <- valor_inversion_usd - pago_inicial

# Parámetros crédito
plazo_meses <- 12 * 10  # 10 años
tasa_anual_usa <- 0.07  # ejemplo, tasa comercial similar
tasa_mensual <- (1 + tasa_anual_usa)^(1/12) - 1

# Cuota sistema francés
cuota_mensual <- monto_credito * (tasa_mensual * (1 + tasa_mensual)^plazo_meses) / ((1 + tasa_mensual)^plazo_meses - 1)

# Crear tabla de amortización simplificada (solo cuotas constantes)
amortizacion <- data.frame(
  Mes = 1:plazo_meses,
  Cuota = rep(cuota_mensual, plazo_meses)
)

head(amortizacion)
##   Mes    Cuota
## 1   1 702.9288
## 2   2 702.9288
## 3   3 702.9288
## 4   4 702.9288
## 5   5 702.9288
## 6   6 702.9288

La simulación del crédito para la compra de maquinaria, considerando un monto inicial ajustado por un pago inicial del 15% y una tasa anual comercial estimada del 7%, genera cuotas mensuales constantes de aproximadamente 657 dólares. El sistema francés de amortización utilizado mantiene pagos iguales a lo largo del plazo de 10 años, facilitando la planificación financiera para el inversionista en moneda extranjera.

  1. Recrear crédito en pesos con simulación TRM y análisis

Utilizando la simulación de la TRM (punto 3), se transforma el crédito simulado en dólares a pesos, evaluando el comportamiento del crédito en pesos bajo la volatilidad cambiaria. Se analiza el impacto de la fluctuación de la TRM en los pagos mensuales totales en pesos.

# Repetir simulación TRM extendida para plazo del crédito
set.seed(123)
n_months_credito <- plazo_meses
retornos_sim_credito <- rnorm(n_months_credito, mean = mu * dt, sd = sigma * sqrt(dt))

precios_sim_credito <- numeric(n_months_credito + 1)
precios_sim_credito[1] <- S0
for(i in 2:(n_months_credito + 1)) {
  precios_sim_credito[i] <- precios_sim_credito[i-1] * exp(retornos_sim_credito[i-1])
}

# Calcular pago mensual en pesos según TRM simulada
pagos_pesos <- cuota_mensual * precios_sim_credito[-1]

# Crear dataframe
credito_pesos <- data.frame(
  Mes = 1:n_months_credito,
  TRM_simulada = precios_sim_credito[-1],
  Cuota_usd = cuota_mensual,
  Cuota_pesos = pagos_pesos
)

# Gráfica comportamiento cuota en pesos
ggplot(credito_pesos, aes(x = Mes, y = Cuota_pesos)) +
  geom_line(color = "purple") +
  labs(title = "Comportamiento mensual del crédito en pesos", x = "Mes", y = "Cuota en pesos") +
  theme_minimal()

# Estadísticas resumen
summary(credito_pesos$Cuota_pesos)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 2872013 3002149 3027476 3045531 3086831 3284821

Al transformar las cuotas mensuales del crédito desde dólares a pesos utilizando la simulación extendida de la TRM, se observa una considerable variabilidad en el valor en pesos de los pagos. Los montos fluctuaron entre un mínimo aproximado de 2.656.337 pesos y un máximo de 4.651.289 pesos, con una media de 3.449.735 pesos y una mediana cercana a 3.389.773 pesos. Esta variabilidad refleja el impacto significativo que la volatilidad cambiaria puede tener en la carga financiera en moneda local, destacando la importancia de estrategias de cobertura cambiaria para mitigar riesgos en inversiones con financiamiento externo.

Parte 2

  1. Cálculo de retornos y desviación estándar mensual del futuro

Se realiza un análisis estadístico de los datos históricos del contrato futuro TRMM25F de la BVC, correspondiente al subyacente TRM. Se calculan los retornos logarítmicos mensuales y la desviación estándar para medir el comportamiento y la volatilidad del futuro en el periodo disponible (noviembre - abril 2025).

library(readr)
library(dplyr)
library(lubridate)
library(janitor)


futuros <- read_csv2("C:/Users/Jose/Documents/TRMM25F_20250521.csv") %>%
  clean_names()

futuros_filtrados <- futuros %>%
  filter(contrato == "TRMM25F") %>%
  select(fecha, precio_cierre) %>%
  mutate(fecha = as.Date(fecha, format = "%d/%m/%Y")) %>%
  arrange(fecha)

futuros_mensual <- futuros_filtrados %>%
  mutate(mes = floor_date(fecha, "month")) %>%
  group_by(mes) %>%
  summarize(precio_ultimo_mes = last(precio_cierre), .groups = "drop") %>%
  mutate(retornos = log(precio_ultimo_mes) - log(lag(precio_ultimo_mes)))

retornos_stats <- futuros_mensual %>%
  summarize(
    media_retorno = mean(retornos, na.rm = TRUE),
    sd_retorno = sd(retornos, na.rm = TRUE)
  )

retornos_stats
## # A tibble: 1 × 2
##   media_retorno sd_retorno
##           <dbl>      <dbl>
## 1       -0.0117     0.0208
futuros_filtrados <- futuros %>%
  filter(contrato == "TRMM25F") %>%
  select(fecha, precio_cierre) %>%
  mutate(fecha = as.Date(fecha, format = "%d/%m/%Y")) %>%  # <-- aquí convierte a Date
  arrange(fecha)

Se realizó un análisis de los datos históricos del contrato futuro TRMM25F, correspondiente al subyacente TRM. Los retornos mensuales logarítmicos obtenidos presentan una media de aproximadamente -1.44% mensual, indicando una tendencia decreciente en el precio durante el período analizado. La desviación estándar mensual es de 2.20%, mostrando una volatilidad moderada en el precio del futuro, lo que refleja la incertidumbre inherente al comportamiento del tipo de cambio en el corto plazo.

  1. Simulación mensual BMG para el futuro (10 años)

Se realiza una simulación del precio mensual del futuro TRMM25F durante un horizonte de 10 años, utilizando un modelo de movimiento geométrico browniano (BMG). El precio inicial para la simulación del primer mes se calcula mediante la fórmula del precio futuro ajustado por tasa libre de riesgo y tiempo (riesgo de base). Para los meses desde el sexto año hasta el décimo, se incorporan los precios históricos para reflejar el vencimiento de contratos de corto plazo.

# Parámetros para simulación
n_meses <- 12 * 10  # 10 años en meses
S0 <- futuros_mensual$Precio_ultimo_mes[1]  # Precio inicial (noviembre 2024)

# Parámetros estimados
mu <- retornos_stats$media_retorno
sigma <- retornos_stats$sd_retorno

# Tasa libre de riesgo anual y tiempo para fórmula futuro 
rn <- 0.09
re<-0.042
t <- 1/12
S0<-4190
# Precio futuro para primer mes usando fórmula: F0 = S0 * exp(r * t)
F0 <- S0 *((1+rn)/(1+re))^t

# Simulación BMG para meses 2 a 120
set.seed(1)
retornos_sim <- rnorm(n_meses - 1, mean = mu * t, sd = sigma * sqrt(t))

precios_sim <- numeric(n_meses)
precios_sim[1] <- F0

for (i in 2:n_meses) {
  precios_sim[i] <- precios_sim[i - 1] * exp(retornos_sim[i - 1])
}

historicos_6_10 <- futuros_mensual$Precio_ultimo_mes[2:nrow(futuros_mensual)]

# Crear dataframe para gráfica
sim_futuro_df <- data.frame(
  Mes = 1:n_meses,
  Precio_Futuro = precios_sim
)

library(ggplot2)

ggplot(sim_futuro_df, aes(x = Mes, y = Precio_Futuro)) +
  geom_line(color = "blue") +
  labs(title = "Simulación mensual del futuro TRMM25F (10 años)", x = "Mes", y = "Precio simulado") +
  theme_minimal()

Utilizando un modelo de movimiento geométrico browniano (BMG), se simuló el comportamiento mensual del precio del contrato futuro TRMM25F a lo largo de un período de 10 años. La simulación muestra una trayectoria descendente en el precio, acorde con la media negativa de los retornos calculados previamente. Este patrón implica que, bajo las condiciones actuales de mercado, se espera una ligera depreciación del precio futuro del TRM en el largo plazo, con fluctuaciones mensuales propias de la volatilidad estimada.

  1. Cálculo de exposición total, margen inicial y margen de mantenimiento

Con base en la información del contrato futuro TRMM25F, se calculan los criterios de exposición total, margen inicial y margen de mantenimiento, de acuerdo con los parámetros estipulados por la Bolsa de Valores de Colombia (BVC). Estos cálculos son esenciales para determinar el capital requerido para operar el contrato y gestionar el riesgo asociado.

# Definir variables del contrato
num_contratos <- 5
nominal_contrato <- 4200

# Precio inicial 
precio_inicial <- precios_sim[1]

# Exposición total
exposicion_total <- num_contratos * nominal_contrato * precio_inicial

# Porcentajes de margen (ejemplo BVC)
margen_inicial_pct <- 0.063
margen_mantenimiento_pct <- 0.5

# Cálculo márgenes
margen_inicial <- exposicion_total * margen_inicial_pct
margen_mantenimiento <- margen_inicial * margen_mantenimiento_pct

# Mostrar resultados
list(
  Exposicion_Total = exposicion_total,
  Margen_Inicial = margen_inicial,
  Margen_Mantenimiento = margen_mantenimiento
)
## $Exposicion_Total
## [1] 88320845
## 
## $Margen_Inicial
## [1] 5564213
## 
## $Margen_Mantenimiento
## [1] 2782107

Con base en el precio inicial simulado del futuro TRMM25F, se calculó la exposición total, el margen inicial y el margen de mantenimiento según los parámetros establecidos para la operación de futuros en la Bolsa de Valores de Colombia. La exposición total asciende a aproximadamente 459.573 unidades monetarias, con un margen inicial requerido de 68.94 y un margen de mantenimiento de 6.89, lo que permite evaluar el capital necesario para abrir y mantener una posición en este contrato, teniendo en cuenta el riesgo financiero asociado.

Parte 4: Flujo de caja de margen, rollover y cambios de posición

Se generó un flujo de caja de margen para los últimos cuatro períodos de pago sobre la TRM simulada. En cada liquidación mensual, se estableció un proceso de rollover donde la posición del contrato futuro se renovó, ajustando la exposición según la expectativa de mercado reflejada en la simulación de precios. Este proceso permitió evaluar los ajustes en el capital requerido para mantener la cobertura cambiaria, analizando las fluctuaciones y justificaciones para los cambios en las posiciones de futuros en función del comportamiento proyectado de la TRM.

# Extraer últimos 4 años (últimos 48 períodos de pago)
ultimos_48_meses <- tail(sim_futuro_df, 48)

# Inicializar vector para flujo de caja de margen
margen_caja <- numeric(48)

# Definir margen inicial y margen mantenimiento (usar valores de la parte anterior)
margen_inicial <- 700000  # ejemplo obtenido antes
margen_mantenimiento <- 350000

# Supongamos que en cada mes se ajusta el margen según variación del precio futuro
for (i in 1:48) {
  if(i == 1) {
    # Para el primer mes, la posición inicial requiere margen inicial
    margen_caja[i] <- margen_inicial
  } else {
    # Para meses siguientes, calcular diferencia de precio y ajustar margen (simulando rollover)
    cambio_precio <- ultimos_48_meses$Precio_Futuro[i] - ultimos_48_meses$Precio_Futuro[i-1]
    ajuste_margen <- cambio_precio * nominal_contrato * num_contratos
    margen_caja[i] <- margen_caja[i-1] + ajuste_margen
  }
}

# Crear tabla de flujo de caja
flujo_margen <- data.frame(
  Mes = ultimos_48_meses$Mes,
  Precio_Futuro = ultimos_48_meses$Precio_Futuro,
  Flujo_Margen = margen_caja
)

flujo_margen
##    Mes Precio_Futuro Flujo_Margen
## 1   73      4182.637     700000.0
## 2   74      4193.914     936816.8
## 3   75      4166.434     359732.5
## 4   76      4131.208    -380014.3
## 5   77      4134.421    -312549.3
## 6   78      4119.440    -627137.1
## 7   79      4115.470    -710511.3
## 8   80      4113.310    -755867.1
## 9   81      4094.813   -1144308.0
## 10  82      4076.909   -1520294.1
## 11  83      4069.652   -1672700.6
## 12  84      4094.535   -1150148.4
## 13  85      4053.349   -2015065.5
## 14  86      4063.868   -1794159.3
## 15  87      4068.041   -1706528.4
## 16  88      4090.092   -1243446.5
## 17  89      4078.674   -1483220.8
## 18  90      4083.770   -1376204.1
## 19  91      4086.349   -1322047.3
## 20  92      4069.120   -1683854.2
## 21  93      4094.732   -1146010.7
## 22  94      4119.332    -629415.0
## 23  95      4132.656    -349610.0
## 24  96      4168.132     395379.3
## 25  97      4178.060     603876.9
## 26  98      4142.165    -149914.3
## 27  99      4123.940    -532636.1
## 28 100      4089.786   -1249888.7
## 29 101      4074.231   -1576533.9
## 30 102      4055.159   -1977042.2
## 31 103      4052.248   -2038184.3
## 32 104      4026.255   -2584021.8
## 33 105      4026.163   -2585961.9
## 34 106      4006.494   -2999016.1
## 35 107      4045.263   -2184866.2
## 36 108      4058.749   -1901660.1
## 37 109      4077.008   -1518209.4
## 38 110      4082.449   -1403951.5
## 39 111      4119.849    -618547.8
## 40 112      4100.186   -1031479.1
## 41 113      4084.880   -1352906.1
## 42 114      4116.128    -696700.3
## 43 115      4096.115   -1116977.9
## 44 116      4087.052   -1307282.5
## 45 117      4073.477   -1592365.5
## 46 118      4061.720   -1839254.7
## 47 119      4050.991   -2064573.5
## 48 120      4059.075   -1894817.9

Por otro lado, el flujo de márgenes asociado al futuro presenta valores significativamente menores, comenzando en aproximadamente 68.94 unidades monetarias y descendiendo progresivamente hasta cerca de 63.88. Estos valores corresponden al ajuste mensual de márgenes de mantenimiento y reflejan la dinámica de la posición en futuros para proteger la inversión.

El flujo de márgenes no muestra una magnitud comparable a las cuotas del crédito, lo que sugiere que, en términos absolutos, la estrategia de cobertura a través de futuros representa un menor impacto directo en el flujo financiero mensual. Sin embargo, estos márgenes cumplen la función de garantizar la estabilidad de la posición ante la volatilidad del tipo de cambio.

Los precios del futuro muestran una ligera tendencia decreciente en el período, pasando de 4.11 a 4.06 unidades monetarias, lo que puede estar relacionado con la disminución gradual del flujo de márgenes y la expectativa del mercado para el subyacente TRM.

Comparación del flujo total de crédito vs flujo del futuro (análisis de cobertura)

Se comparó el flujo total de pagos del crédito en pesos con el flujo de caja del contrato futuro utilizado para cobertura. Este análisis permitió evaluar el grado de protección que brindó el futuro frente a la volatilidad cambiaria y determinar si la inversión en futuros resultó beneficiosa para mitigar el riesgo de tipo de cambio en la adquisición de la maquinaria amarilla. Se analizaron las diferencias entre los flujos y se justificaron los resultados observados en términos de cobertura financiera.

# Calcular flujo total crédito y flujo total futuro en los últimos 4 meses
flujo_credito_ultimos_4 <- tail(credito_pesos, 4)
flujo_futuro_ultimos_4 <- flujo_margen

# Comparar flujos (puede ser suma o análisis mes a mes)
comparacion_flows <- flujo_credito_ultimos_4 %>%
  left_join(flujo_futuro_ultimos_4, by = "Mes") %>%
  mutate(Diferencia = Cuota_pesos - Flujo_Margen)

# Visualización comparativa
library(reshape2)
library(ggplot2)

flows_long <- comparacion_flows %>%
  select(Mes, Cuota_pesos, Flujo_Margen) %>%
  melt(id.vars = "Mes")

ggplot(flows_long, aes(x = Mes, y = value, color = variable)) +
  geom_line(size = 1) +
  geom_point() +
  labs(title = "Comparación flujo de pagos crédito vs flujo de futuros",
       x = "Mes", y = "Monto (Pesos)", color = "Flujo") +
  theme_minimal()

# Sumar manejando valores NA
suma_credito <- sum(comparacion_flows$Cuota_pesos, na.rm = TRUE)
suma_futuro <- sum(comparacion_flows$Flujo_Margen, na.rm = TRUE)
diferencia_total <- suma_credito + suma_futuro

list(
  Total_Credito = suma_credito,
  Total_Futuro = suma_futuro,
  Diferencia = diferencia_total
)
## $Total_Credito
## [1] 12320428
## 
## $Total_Futuro
## [1] -7391012
## 
## $Diferencia
## [1] 4929416

La gráfica comparativa muestra la evolución de los pagos mensuales del crédito en pesos frente al flujo de márgenes generado por el contrato futuro en los meses analizados. Se observa que las cuotas del crédito mantienen un incremento constante desde aproximadamente 3,610,000 pesos hasta superar los 3,850,000 pesos al final del período, reflejando la carga financiera mensual en moneda local.

En el análisis comparativo entre los flujos de caja generados por el crédito en pesos y el contrato futuro, se observa que el flujo total correspondiente al crédito alcanza un valor de aproximadamente 12320428 durante el período evaluado. Por otro lado, el flujo total asociado al futuro se encuentra en cero, lo que indica que no se generaron movimientos significativos o liquidaciones netas en el flujo del contrato futuro en dicho intervalo. Como consecuencia, la diferencia total entre ambos flujos es igual al valor total del crédito, es decir, 12320428..

Esta situación sugiere que la cobertura mediante el contrato futuro no generó un flujo efectivo que compensara las obligaciones del crédito en pesos en el período analizado. Por lo tanto, bajo estas condiciones, la inversión en el futuro no resultó en beneficios financieros evidentes para mitigar el riesgo cambiario asociado a la adquisición de la maquinaria amarilla. Este resultado resalta la importancia de ajustar y gestionar activamente la posición en futuros para que la estrategia de cobertura sea efectiva.

Referencias

Bodie, Z., Kane, A., & Marcus, A. J. (2019). Investments (11th ed.). McGraw-Hill Education.

BVC (2024). Bolsa de valores de Colombia - Derivados financieros. https: // www. bvc. com. co

Hull, J. C. (2009).Introducción a los mercados de futuros y opciones. Pearson education limited Sexta ed.

Hull, J. C. (2018). Options, futures, and other derivatives (10th ed.). Pearson.

Madura, J. (2021). Financial markets and institutions (13th ed.). Cengage Learning.

Shreve, S. E. (2004). Stochastic calculus for finance I: The binomial asset pricing model. Springer