Descargue la TRM desde el año 2000 hasta el día de hoy y responda las siguientes preguntas asignando probabilidades basadas en frecuencia y bajo el supuesto de que los rendimientos siguen una distribución normal:
Para analizar estadísticamente el precio de la TRM en el lapso de tiempo desde el año 2000 hasta el día de hoy, se pueden utilizar diversas herramientas y técnicas estadísticas. Una de las más comunes es el análisis de la distribución de frecuencias, que permite identificar la frecuencia con la que se presentan los diferentes valores de la TRM en el periodo de tiempo analizado.
Además, se puede utilizar el análisis de la media y la desviación estándar para determinar la tendencia central y la dispersión de los datos. En este caso, se puede calcular la media y la desviación estándar de los precios de la TRM en el periodo de tiempo analizado, lo que permitirá tener una idea de la tendencia general de los precios y de la variabilidad de los mismos. También se puede utilizar el análisis de la distribución normal para determinar la probabilidad de que los precios de la TRM se encuentren en un rango determinado. Para ello, se puede calcular la media y la desviación estándar de los precios de la TRM y utilizar la tabla de distribución normal para determinar la probabilidad de que los precios se encuentren en un rango específico.
No es necesario acortar la información de la TRM en el lapso de tiempo desde el año 2000 hasta el día de hoy, a pesar de que la TRM ha variado mucho en estos 20 años. Esto se debe a que la TRM es un indicador económico importante que refleja la relación entre el peso colombiano y otras monedas extranjeras, y su variación a lo largo del tiempo es relevante para el análisis de la economía colombiana.
Además, la TRM es un indicador que se utiliza en diversos sectores de la economía, como el comercio internacional, la inversión extranjera y la deuda externa, entre otros. Por lo tanto, contar con información detallada y completa de la TRM en el lapso de tiempo desde el año 2000 hasta el día de hoy es fundamental para el análisis y la toma de decisiones en estos sectores.
A continuación se analiza la serie diaria TRM desde 2000-01-01 hasta 2024-20-02, la cual está contenida en la base de datos Datos_TRM.txt que se descargó de la página del Banco de la República y que contiene un total de 8817 registros en dos variables, Fecha y TRM.
# Cargando la base de datos: Leer un archivo .txt
Datos_TRM <- read.delim("Datos_TRM.txt")
head(Datos_TRM)# Convertir a formato de fecha la columna 'Fecha'
Datos_TRM[, "Fecha"] <- as.Date(Datos_TRM[, "Fecha"], format = "%d/%m/%Y")
# class(Datos_TRM[,'Fecha'])Se muestra la gráfica de la serie histórica TRM:
# gráfica
plot(Datos_TRM[, "Fecha"], Datos_TRM[, "TRM"], type = "l", main = "Serie Historica TRM",
col = "red", xlab = "Fecha", ylab = "Datos TRM")
# agregar líneas verticales en las fechas deseadas
abline(v = as.numeric(as.Date(c("2000-01-01", "2005-01-01", "2010-01-01", "2015-01-01",
"2020-01-01", "2025-01-01"))), col = "blue", lty = 3, lwd = 1)
# agregar líneas horizontales en los valores deseados
abline(h = c(2000, 3000, 4000, 5000), col = "blue", lty = 3, lwd = 1)En la gráfica se observa que la TRM entre los años 2000 y 2003 aumentó de $2000 a $3000; luego tuvo tendencia descentente hasta aproximadamente 2008 llegando al un mínimo cercano a $1000; a partir de ahí y hasta 2015 se mantuvo cercana a $1700; luego se comportó ascendentemente hasta llega a un máximo de $5000 pesos en 2023.
A continuación se presenta la gráfica de la Serie histórica de rendimientos diarios:
plot(Datos_TRM[-1, "Fecha"], diff(log(Datos_TRM[, "TRM"])), type = "l", main = "Serie Historica rendimientos diarios TRM",
col = "lightgreen", xlab = "Fecha", ylab = "Rendimientos diarios TRM")
# agregar líneas verticales en las fechas deseadas
abline(v = as.numeric(as.Date(c("2000-01-01", "2005-01-01", "2010-01-01", "2015-01-01",
"2020-01-01", "2025-01-01"))), col = "gray", lty = 3, lwd = 1)
# agregar líneas horizontales en los valores deseados
abline(h = c(-0.06, -0.04, -0.02, 0, 0.02, 0.04, 0.06), col = "gray", lty = 3, lwd = 1)Se observa que en el periodo los rendimientos diarios en su mayoría oscilaron entre -0.02 y 0.02, salvo algunas excepciones notables, a saber, en 2008, en 2016, en 2020 (pandemia) y en 2023.
Se muestra el Histograma de precios:
hist(Datos_TRM[, "TRM"], breaks = 30, col = "lightblue", main = "Histograma de precios",
freq = FALSE, xlab = "Precios TRM", ylab = "Densidad")
Se observa una distribución de precios no simétrica sino sesgada hacia
la izquierda, en donde la mayoría de precios se acumulan en los precios
menores (de $1500 a $4000 aproximadamente) y aparece una cola derecha
con los precios más grandes (desde $4000 hasta $5000
aproximadamente)
Se muestra el Histograma de rendimientos:
Rtos_TRM <- diff(log(Datos_TRM[, "TRM"]))
hist(Rtos_TRM, breaks = 50, col = "cyan", main = "Histograma de rendimientos", freq = FALSE,
xlim = c(-0.02, 0.02), xlab = "Rendimientos TRM", ylab = "Densidad")Se observa una distribución de rendimientos simétrica, en donde la mayoría de rendimientos se acumulan en el centro (cerca al cero) en el intervalo -0.01 a 0.01 aproximadamente.
| Estadísticas de la TRM | Valor |
|---|---|
| Mínimo | 1652.41 |
| Máximo | 5061.21 |
| Media | 2660.9662788 |
| Desviación estándar | 762.4160933 |
| Sesgo | 0.8964715 |
| Curtosis | 3.0402949 |
[1] "Percentiles de la TRM"
1% 5% 10% 50% 75% 90% 95% 99%
1762.380 1791.626 1838.278 2389.750 3054.380 3857.076 4093.152 4802.480
Se observa que la tasa TRM oscila entre $1652 y $5061 aproximadamente, con un valor medio de $2661. La mediana es $2390, que es superior a la media, lo que es indicativo de asimetría.
El sesgo y la curtosis corresponden a una distribución con asimetría y presencia de cola derecha.
Para los percentiles, por ejemplo, el percentil 75 indica que el 75% de los precios de TRM más pequeños son inferiores o iguales a $3054, o bien, el 25% de los precios más altos de TRM son superiores a $3054.
| Estadísticas de los rendimientos | Valor |
|---|---|
| Mínimo | -0.0562194 |
| Máximo | 0.0593067 |
| Media | 8.3664705^{-5} |
| Desviación estándar | 0.0059233 |
| Sesgo | 0.2697866 |
| Curtosis | 12.8127257 |
[1] "Percentiles de los rendimientos"
1% 5% 10% 50% 75% 90% 95% 99%
-0.0167 -0.0090 -0.0057 0.0000 0.0013 0.0060 0.0096 0.0190
Se observa que los rendimientos de la TRM oscilan entre -0.056 y 0.059 aproximadamente, con un valor medio de 0 aproximadamente y con mediana también 0, lo que es indicativo de simetría.
El sesgo corresponde a una distribución con simetría aproximada, y la curtosis a una distribución leptocúrtica, es decir, más alta en el centro que la distribución normal.
Para los percentiles, por ejemplo, el percentil 75 indica que el 75% de los rendimientos de TRM más pequeños son inferiores o iguales a 0.0013, o bien, el 25% de los rendimientos más altos de TRM son superiores a 0.0013.
5% 95%
-0.00898 0.00956
breaks <- c(min(Rtos_TRM) - 1e-07, -0.01)
corte <- cut(Rtos_TRM, breaks)
tabla <- table(corte)
print(tabla)corte
(-0.0562,-0.01]
359
corte
(-0.0562,-0.01]
0.04072142
Se observa que en 359 días hubo una pérdida mayor al 1%, lo que corresponde a una probabilidad de 0.04%.
¿Qué tipo de distribución teórica siguen los rendimientos diarios de la TRM? ¿Es válido el supuesto de normalidad para los rendimientos diarios de la TRM?
En este caso, para la estimación de los parámetros de la distribución normal se utiliza el promedio aritmético de los rendimientos de la TRM como estimador del valor esperado y la desviación estándar histórica de los rendimientos como estimador de la desviación.
hist(Rtos_TRM, breaks = 50, col = "gray", main = "Histograma de rendimientos", freq = FALSE,
xlim = c(-0.02, 0.02))
curve(dnorm(x, mean = mean(Rtos_TRM), sd = sd(Rtos_TRM)), -0.02, 0.02, add = T, col = "blue")En el histograma anterior se ve que la distribución de rendimientos se comporta aproximadamente normal.
El gráfico QQ-plot muestra que en la zona central los rendimientos se superponen con la línea de igualdad de cuantiles, lo que es indicativo de normalidad. (Nótese que en las esquinas se presenta desviación de la normalidad, pero estas zonas no son tan determinantes).
cuantiles <- c(0.01, 0.025, 0.05, 0.1, 0.25, 0.4, 0.45, 0.5, 0.75, 0.9, 0.95, 0.975,
0.99)
empiricos <- qnorm(cuantiles, mean = mean(Rtos_TRM), sd = sd(Rtos_TRM))
teoricos <- quantile(Rtos_TRM, cuantiles)
tabla_resultados <- data.frame(Percentiles_Empiricos = round(empiricos, 3), Percentiles_Teoricos = round(teoricos,
3))
print(tabla_resultados) Percentiles_Empiricos Percentiles_Teoricos
1% -0.014 -0.017
2.5% -0.012 -0.013
5% -0.010 -0.009
10% -0.008 -0.006
25% -0.004 -0.001
40% -0.001 0.000
45% -0.001 0.000
50% 0.000 0.000
75% 0.004 0.001
90% 0.008 0.006
95% 0.010 0.010
97.5% 0.012 0.013
99% 0.014 0.019
Se observa que los percentiles empíricos y teóricos son aproximadamente iguales, lo que es indicativo de normalidad.
[1] -0.00966 0.00983
Supongamos que los rendimientos diarios de la TRM siguen una distribución normal y que la media es estimada como el promedio de los rendimientos diarios observados de la TRM y que la desviación estandar es estimada como la volatilidad histórica de los rendimientos diarios.
Numero_iteraciones = 10000
TRM_SIMULADA = matrix(, 3, Numero_iteraciones)
TRM_Inicial = Datos_TRM[length(Datos_TRM[, "TRM"]), "TRM"]
TRM_SIMULADA[1, ] = TRM_Inicial
for (j in 1:Numero_iteraciones) {
for (i in 2:3) {
TRM_SIMULADA[i, j] = TRM_Inicial * exp(rnorm(1, mean = mean(Rtos_TRM), sd = sd(Rtos_TRM)))
}
}
matplot(TRM_SIMULADA, type = "l", col = "gray", main = "TRM SIMULADA (10000 iteraciones montecarlo)",
ylab = "TRM simulada")[1] -0.009659348 0.009826677
Probabilidad de obtener una perdida de hasta un 3% en un día.
[1] 1.898707e-07
Probabilidad de ganar hasta un 5% en un día.
[1] 1
inversion = 1e+07
perdida = -5e+05
ganancia = 5e+05
# Suponiendo una distribución normal.
media = mean(Rtos_TRM)
sd = sd(Rtos_TRM)
# Probabilidades
prob_perdida = pnorm(perdida, mean = media, sd = sd)
prob_ganancia = pnorm(ganancia, mean = media, sd = sd)
probabilidad_perdida = prob_ganancia - prob_perdidaDe acuerdo a los cálculos, la probabilidad es de 1.
Usted toma una posición corta en 10 contratos de futuros de la TRM y que tienen un precio actual de 3918 COP por cada USD. Sabiendo que cada contrato es de 50.000 USD y que usted deposita 150.000.000 de COP en la cuenta de margen, realice una simulación de Montecarlo con 10.000 iteraciones bajo el supuesto de que los rendimientos continuos mensuales del futuro, siguen una distribución normal con media de 1% y desviación estándar del 3%, para determinar:
# Parámetros de la simulación
Numero_iteraciones <- 10000
TRM_SIMULADA <- matrix(, 3, Numero_iteraciones)
TRM_Inicial <- Datos_TRM[nrow(Datos_TRM), "TRM"]
n_contratos <- 10
precio_contrato <- 50000
precio_actual <- 3918
monto_margen <- 1.5e+08
mean_retorno <- 0.01
std_retorno <- 0.03
margin_call <- 1.3e+08
TRM_SIMULADA[1, ] <- TRM_Inicial
for (j in 1:Numero_iteraciones) {
for (i in 2:3) {
TRM_SIMULADA[i, j] <- TRM_Inicial * exp(rnorm(1, mean = mean_retorno, sd = std_retorno))
}
}
matplot(TRM_SIMULADA, type = "l", col = "gray", main = "TRM SIMULADA")base = t(TRM_SIMULADA)
# Posiciones
posicion = (base[, 3] - base[, 1])
# Largo
posicion_largo = sum(posicion > 0)
cat("posición largo", posicion_largo, "\n")posición largo 6359
posición corto 3641
# Probabilidad de las posiciones
prob_largo = posicion_largo/(posicion_largo + posicion_corto)
cat("probabilidad largo", prob_largo, "\n")probabilidad largo 0.6359
prob_corto = posicion_corto/(posicion_largo + posicion_corto)
cat("probabilidad corto", prob_corto, "\n")probabilidad corto 0.3641
# Calculamos los promedios de los cortos y los largos
posicion_largo = posicion[posicion > 0]
prom_largo = mean(posicion_largo)
cat("promedio largo", prom_largo, "\n")promedio largo 110.3009
posicion_corto = posicion[posicion < 0]
prom_corto = abs(mean(posicion_corto)) #Valor absoluto
cat("promedio corto", prom_corto, "\n")promedio corto 80.27697
# Payoffs = Compensación
payoff_largo <- (prom_largo * 10000)
cat("payoff largo", payoff_largo, "\n")payoff largo 1103009
payoff corto 802769.7
Probalilidad de que los precios de la TRM_Simulada se mayor o menor al precio actual=3918
# probalilidad de que los precios de la TRM_Simulada se mayor o menor al precio
# actual=3918
frecuencia_acumulada_simulada <- cumsum(table(TRM_SIMULADA))
probabilidad_mayor <- 1 - frecuencia_acumulada_simulada[precio_actual]/length(TRM_SIMULADA)
cat("probabilidad mayor = ", probabilidad_mayor, "\n")probabilidad mayor = 0.8694
probabilidad_menor <- frecuencia_acumulada_simulada[precio_actual]/length(TRM_SIMULADA)
cat("probabilidad menor = ", probabilidad_menor, "\n")probabilidad menor = 0.1306
Probabilidades en corto y en largo
TRM_SIMULADA_T <- t(TRM_SIMULADA)
corto <- data.frame((TRM_SIMULADA_T[, 1] - TRM_SIMULADA_T[, 3]))
colnames(corto) <- c("Corto")
largo <- data.frame((TRM_SIMULADA_T[, 3] - TRM_SIMULADA_T[, 1]))
colnames(largo) <- c("Largo")
TRM_SIMULADA_T_Flujos <- cbind(TRM_SIMULADA_T, corto, largo)
# View(TRM_SIMULADA_T_Flujos)
# probabilidad de ir en corto o en largo
probabilidad_largo <- mean(largo > 0)
cat("probabilidad en largo = ", probabilidad_largo, "\n")probabilidad en largo = 0.6359
probabilidad en corto = 0.3641