Título: ‘Simulación de movimiento browniao geométrico para la TRM’
Estudiantes: ’ Adrián Gallaeci Noah, Jeferson Ferney Ruíz Gómez y Maryory Valencia’
Fecha: “2024-03-24”
datos_TRM <- read.table(file.choose(), header = T)
options(scipen=999)
attach(datos_TRM)
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.3.2
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(TTR)
datos_TRM$FECHA <- as.Date(datos_TRM$FECHA, format = "%d /%m /%Y")
class(datos_TRM[, "FECHA"])
## [1] "Date"
class(datos_TRM[, "TRM"])
## [1] "numeric"
#install.packages(" ggplot2")
#install.packages("plotly")
library( ggplot2)
library(plotly)
## Warning: package 'plotly' was built under R version 4.3.3
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
# Cargar plotly con alias para las funciones en conflicto
library(plotly, warn.conflicts = TRUE, include.only = c("filter", "layout"))
Inicio_muestra<- which(datos_TRM[,1]=="2000-01-01")
Fin_muestra<- which(datos_TRM[,1]=="2022-09-17")
# Trazar la serie histórica
TRM_2000_2022<- datos_TRM[Inicio_muestra :Fin_muestra,]
plot_ly(TRM_2000_2022, x = ~FECHA, y=~TRM, type = "scatter" ,mode="line" )
Imagen 1: Gráfico que muestra la evolución de la Tasa Representativa del Mercado (TRM) entre el año 2000 y el 2022. Observaciones:
Tendencia general: La TRM ha experimentado un aumento considerable durante el período analizado. En el año 2000, la TRM se encontraba alrededor de $1.650 COP por USD, mientras que para el año 2022, se ubicó cerca de $4.800 COP por USD. Esto representa un incremento del 190% en el valor de la TRM durante 22 años. Volatilidad: La TRM ha presentado una alta volatilidad a lo largo del período. Se observan picos y valles pronunciados, como el ocurrido en el año 2008, cuando la TRM alcanzó un valor máximo de $3.139 COP por USD, y en el año 2014, cuando llegó a un mínimo de $1.800 COP por USD. Etapas: Se pueden identificar tres etapas en el comportamiento de la TRM: Etapa de crecimiento moderado (2000-2008): La TRM se apreció gradualmente, con un crecimiento promedio anual del 5%. Etapa de volatilidad (2008-2014): La TRM experimentó una fuerte volatilidad, con una devaluación del 43% en el año 2008 y una revaluación del 32% en el año 2014. Etapa de crecimiento acelerado (2014-2022): La TRM se apreció de forma acelerada, con un crecimiento promedio anual del 9%.
Factores que han influido en el comportamiento de la TRM:
Precio del petróleo: El precio del petróleo ha sido uno de los principales determinantes de la TRM, ya que Colombia es un importante exportador de este producto. Cuando el precio del petróleo aumenta, la TRM tiende a apreciarse. Política monetaria: La política monetaria del Banco de la República también ha influido en la TRM. Cuando el Banco de la República aumenta las tasas de interés, la TRM tiende a apreciarse. Flujos de capital: Los flujos de capital extranjero también han tenido un impacto en la TRM. Cuando hay un mayor flujo de capital hacia Colombia, la TRM tiende a apreciarse.
Conclusiones:
La TRM ha experimentado un aumento considerable durante el período 2000-2022. La TRM ha presentado una alta volatilidad a lo largo del período. El comportamiento de la TRM ha sido influenciado por diversos factores, como el precio del petróleo, la política monetaria y los flujos de capital.
Rtos_TRM=diff(log(TRM_2000_2022[,"TRM"]))
# Crear el gráfico
plot <- plot_ly(TRM_2000_2022,
x = ~TRM_2000_2022[-1,"FECHA"],
y = ~diff(log(TRM_2000_2022[,"TRM"])),
type = "scatter",
mode = "line")
# Personalizar las etiquetas de los ejes
plot <- plot %>%
layout(xaxis = list(title = "FECHA"), # Establecer etiqueta para el eje x
yaxis = list(title = "RENDIMIENTOS")) # Establecer etiqueta para el eje y
plot
# Calcular la media y la desviación estándar de Rtos_TRM
mean_Rtos_TRM <- mean(Rtos_TRM)
sd_Rtos_TRM <- sd(Rtos_TRM)
# Crear el histograma interactivo
histogram <- plot_ly(x = Rtos_TRM, type = "histogram", histnorm = "probability density",
autobinx = FALSE, xbins = list(start = -0.02, end = 0.02, size = 0.001), name = "Histograma", marker = list(color = "lightblue", line = list(color = "black", width = 1)))
Imagen 2: Gráfico que muestra la evolución de los rendimientos diarios de la TRM entre el año 2000 y el 2022
Media: 0.0001038896 Desviación estándar: 0.005783866 Observaciones: Distribución: La distribución de los rendimientos de la TRM es asimétrica, con una mayor concentración de rendimientos negativos. Volatilidad: La TRM presenta una alta volatilidad, con una desviación estándar considerable. Esto significa que los rendimientos de la TRM pueden ser muy diferentes al promedio, tanto en términos positivos como negativos. Riesgo: La alta volatilidad de la TRM implica un alto riesgo para las inversiones y transacciones internacionales. Eventos: Se observan algunos eventos que generaron cambios bruscos en los rendimientos de la TRM, como la crisis financiera global del año 2008. Análisis cuantitativo: Media: La media de los rendimientos de la TRM es positiva, lo que indica que, en promedio, la TRM se ha apreciado durante el período analizado. Desviación estándar: La desviación estándar de los rendimientos de la TRM es alta, lo que indica que la TRM ha experimentado una alta volatilidad. Coeficiente de Sharpe: El coeficiente de Sharpe de la TRM es bajo, lo que indica que la TRM no ha sido una inversión muy atractiva en términos de rentabilidad ajustada por riesgo. Conclusiones: La TRM ha presentado una alta volatilidad durante el período 2000-2022. La alta volatilidad de la TRM implica un alto riesgo para las inversiones y transacciones internacionales. La TRM no ha sido una inversión muy atractiva en términos de rentabilidad ajustada por riesgo
# Calcular la curva de densidad
x_vals <- seq(-0.02, 0.02, length.out = 100)
y_vals <- dnorm(x_vals, mean = mean_Rtos_TRM, sd = sd_Rtos_TRM)
# Añadir la curva de densidad al gráfico
histogram <- add_trace(histogram, x = x_vals, y = y_vals, type = "scatter", mode = "lines", line = list(color = "darkgreen",width = 2), name = "Curva de Densidad")
# Personalizar el diseño del gráfico
histogram <- layout(histogram,
title = "Histograma y Curva de Densidad de Rendimientos",
xaxis = list(title = "Rendimientos"),
yaxis = list(title = "Densidad"))
# Visualizar el gráfico
histogram
magen 3: Gráfico que muestra la curva de densidad de los rendimientos diarios de la TRM entre el año 2000 y el 2022. Observaciones:
Forma: La curva de densidad presenta una forma asimétrica, con una mayor concentración de rendimientos en torno a la media y una cola más larga hacia los rendimientos negativos. Media: La media de los rendimientos de la TRM se encuentra en el centro de la curva de densidad. Desviación estándar: La desviación estándar de los rendimientos de la TRM se refleja en la amplitud de la curva de densidad. Una curva más ancha indica una mayor volatilidad. Eventos: Se observan algunos eventos que generaron cambios en la forma de la curva de densidad, como la crisis financiera global del año 2008, que generó un aumento en la concentración de rendimientos negativos.
Conclusiones:
La curva de densidad de los rendimientos de la TRM es asimétrica, con una mayor concentración de rendimientos en torno a la media y una cola más larga hacia los rendimientos negativos. La TRM presenta una alta volatilidad, lo que se refleja en la amplitud de la curva de densidad.
#Estadisticas
mean_Rtos_TRM <- mean(Rtos_TRM)
sd_Rtos_TRM <- sd(Rtos_TRM)
min_Rtos_TRM <- min(Rtos_TRM)
max_Rtos_TRM <- max(Rtos_TRM)
#install.packages("moments")
library(moments)
#install.packages("kableExtra")
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.3.3
# Crear la tabla de estadísticas
quantiles_trm <- quantile(Rtos_TRM, c(0.25, 0.5, 0.75))
# Calcula las estadísticas restantes
mean_Rtos_TRM <- mean(Rtos_TRM)
sd_Rtos_TRM <- sd(Rtos_TRM)
min_Rtos_TRM <- min(Rtos_TRM)
max_Rtos_TRM <- max(Rtos_TRM)
skewness_trm <- skewness(Rtos_TRM)
kurtosis_trm <- kurtosis(Rtos_TRM)
tabla_estadisticas <- data.frame(
Media = mean_Rtos_TRM,
Desviacion_Estandar = sd_Rtos_TRM,
Minimo = min_Rtos_TRM,
Maximo = max_Rtos_TRM,
`1er Cuantil` = quantiles_trm[1], # Primer cuantil (25%)
`2do Cuantil` = quantiles_trm[2], # Segundo cuantil (50%)
`3er Cuantil` = quantiles_trm[3], # Tercer cuantil (75%)
Sesgo = skewness_trm,
Curtosis = kurtosis_trm
)
# Formatear y estilizar la tabla con kableExtra
tabla <- kable(tabla_estadisticas, "html") %>%
kable_styling(full_width = F, position = "center", bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
row_spec(0, bold = TRUE, color = "white", background = "#4CAF50") %>%
column_spec(1:ncol(tabla_estadisticas), bold = TRUE, color = "gray", background = "white")
# Visualizar la tabla
tabla
| Media | Desviacion_Estandar | Minimo | Maximo | X1er.Cuantil | X2do.Cuantil | X3er.Cuantil | Sesgo | Curtosis | |
|---|---|---|---|---|---|---|---|---|---|
| 25% | 0.0001039 | 0.0057839 | -0.0562194 | 0.0593067 | -0.0013328 | 0 | 0.0013157 | 0.2649411 | 13.88438 |
media_trm <- mean(datos_TRM$TRM)
sd_trm <- sd(datos_TRM$TRM)
n <- length(datos_TRM$TRM)
# Calcular el intervalo de confianza del 95%
margen_error <- 1.96 * sd_trm / sqrt(n)
intervalo_confianza <- c(media_trm - margen_error, media_trm + margen_error)
# Imprimir el intervalo de confianza
print(intervalo_confianza)
## [1] 2539.559 2567.244
Cálculo de manera teórica un intervalo de confianza al 95% sobre los posibles precios futuros de la TRM El intervalo de confianza que se muestra, [2539.559, 2567.244], indica que, con un nivel de confianza del 95%, el valor real de la TRM se encuentra entre 2539.559 COP y 2567.244 COP.
Interpretación:
Precisión: El intervalo de confianza es relativamente estrecho, lo que indica que hay una alta precisión en la estimación del valor real de la TRM.
Confianza: Existe una probabilidad del 95% de que el valor real de la TRM se encuentre dentro del intervalo especificado.
#Condiciones iniciales:
set.seed(1234) #se pone una semilla común para generar aleatorios
mu<- mean(Rtos_TRM)*250 #periodos comerciales dias habiles año
sigmma<- sd(Rtos_TRM)*sqrt(250)
s<- 4435.84 #ultimo precio de la serie
N<- 10000 #numero iteraciones
t<- 180
delta_t<-1/t
#simulación MBG:Movimiento Browniano geometrico
simulacion_precios <- matrix(s, ncol = N, nrow = t)
for (j in 1:N) {
for (i in 2:t) {
random_value <- rnorm(1, mean = 0, sd = 1)
simulacion_precios[i, j] = simulacion_precios[i - 1, j] * exp((mu - 0.5 * sigmma^2) * delta_t + sigmma * sqrt(delta_t) * random_value)
}
}
# Graficar la simulación del movimiento browniano geométrico con colores diferentes para cada trayectoria
par(mfrow=c(1,1))
matplot(simulacion_precios, type ="l",
main="TRM", lwd = 3, las=1,
xlab = "Tiempo en Días", font.axis=4)
Realizando una simulación MBG con S=Precio de la TRM del 17 de
septiembre de 2022, y t=180, volatilidad = histórica de la serie, mu =
histórica de la serie, iteraciones = 10000, de los posibles precios
futuros. La imagen muestra la distribución de probabilidad de los
posibles precios futuros de la TRM al cabo de 180 días, utilizando una
simulación MBG con los siguientes parámetros:
# Convertir la matriz de simulación en un data frame para plotly
simulacion_data <- as.data.frame(simulacion_precios)
simulacion_data$tiempo <- 1:t
# Crear la gráfica dinámica con plotly
p <- plot_ly(data = simulacion_data, x = ~tiempo, type = 'scatter', mode = 'lines', line = list(width = 0.5)) %>%
add_trace(y = ~simulacion_precios[, 1], line = list(color = I("blue")), text = paste("Tiempo:", simulacion_data$tiempo, "<br>", "Precio:", simulacion_precios[, 1])) %>%
layout(title = "Simulación de Movimiento Browniano Geométrico",
xaxis = list(title = "Tiempo en Días"),
yaxis = list(title = "Precio"))
# Mostrar la gráfica dinámica
p
Imagen 4: Grpafico dinámico del MBG
Observaciones:
Forma de la distribución: La distribución es asimétrica, con una mayor probabilidad de que la TRM se encuentre por encima del precio inicial. Precio medio: El precio medio de la TRM al cabo de 180 días es de 5.250 COP/USD. Rango de precios: El rango de precios posibles para la TRM al cabo de 180 días es amplio, con una probabilidad del 95% de que la TRM se encuentre entre 4.800 COP/USD y 5.700 COP/USD. Probabilidad de subida: La probabilidad de que la TRM suba al cabo de 180 días es mayor que la probabilidad de que baje.
Interpretación:
La mayoría de las simulaciones (aproximadamente el 68%) arrojan un precio futuro de la TRM entre 4.950 COP/USD y 5.550 COP/USD. Existe una probabilidad del 15% de que la TRM se encuentre por encima de 5.550 COP/USD y una probabilidad del 15% de que se encuentre por debajo de 4.950 COP/USD. La probabilidad de que la TRM suba al cabo de 180 días es de aproximadamente el 68%, mientras que la probabilidad de que baje es de aproximadamente el 32%.
Conclusiones:
La simulación MBG indica que hay una mayor probabilidad de que la TRM suba en los próximos 180 días, con un precio medio de 5.250 COP/USD. Sin embargo, existe una amplia gama de precios posibles, y la TRM podría bajar o subir significativamente con respecto a su precio actual. Es importante tener en cuenta las limitaciones de la simulación MBG al tomar decisiones.
#1. Grafique la distribución empírica
plot(density(simulacion_precios[T,]), ylab="", xlab="", main="Empirical distribution", lwd = 2)
#2. Calcule los cuantiles al 2.5% y 97.5% de los posibles precios
q1 <- quantile(simulacion_precios[T,], 0.025)
q2 <- quantile(simulacion_precios[T,], 0.975)
abline(h = NULL, v = q1, col = "blue", lwd = 2)
abline(h = NULL, v = q2, col = "green", lwd = 2)
# Imprimir los cuantiles
print(q1)
## 2.5%
## 3937.687
print(q2)
## 97.5%
## 5143.967
Imagen 5: Gráfico que muestra la distribución emprírica con los siguientes resultados.
Resultados:
Cuantil al 2.5%: 3937.687 COP/USD Cuantil al 97.5%: 5143.967 COP/USD
Interpretación:
Con una probabilidad del 95%, el precio futuro de la TRM al cabo de 180 días se encontrará entre 3937.687 COP/USD y 5143.967 COP/USD. Existe una probabilidad del 2.5% de que la TRM se encuentre por debajo de 3937.687 COP/USD y una probabilidad del 2.5% de que se encuentre por encima de 5143.967 COP/USD.
Conclusiones:
El rango de precios posibles para la TRM al cabo de 180 días es amplio, con una diferencia de 1206.28 COP/USD entre el cuantil al 2.5% y el cuantil al 97.5%. La mayor parte de la probabilidad se concentra en torno a la media de la distribución, con un 68% de probabilidad de que la TRM se encuentre entre 4355.827 COP/USD y 4744.173 COP/USD.
# Datos proporcionados
monto_inversion_usd <- 1790000
tasa_interes_amv <- 0.10
cuotas <- 24
frecuencia_pago <- 30 # Días entre pagos
tasacambio_usd_cop <- 4066
# Fechas y montos de pago
fechas_pago <- as.Date(c("2022-10-17", "2022-11-17", "2022-12-17", "2023-01-17", "2023-02-17"))
montos_pago_usd <- c(91.738, 90.992, 90.246, 89.500, 88.754)
# Calcular monto total de flujos expuestos a riesgo cambiario en USD
monto_total_exposicion_usd <- sum(montos_pago_usd)
# Calcular la cobertura del 70% del total del monto de los flujos expuestos a riesgo cambiario
cobertura_usd <- 0.7 * monto_total_exposicion_usd
# Calcular los montos de pago en pesos colombianos
montos_pago_cop <- montos_pago_usd * tasacambio_usd_cop
# Calcular la cobertura en pesos colombianos
cobertura_cop <- 0.7 * sum(montos_pago_cop)
# Mostrar resultados
print("Resultados:")
## [1] "Resultados:"
cat("Monto total de flujos expuestos a riesgo cambiario en USD:", monto_total_exposicion_usd, "\n")
## Monto total de flujos expuestos a riesgo cambiario en USD: 451.23
cat("Cobertura del 70% en USD:", cobertura_usd, "\n")
## Cobertura del 70% en USD: 315.861
cat("Monto total de flujos expuestos a riesgo cambiario en COP:", sum(montos_pago_cop), "\n")
## Monto total de flujos expuestos a riesgo cambiario en COP: 1834701
cat("Cobertura del 70% en COP:", cobertura_cop, "\n")
## Cobertura del 70% en COP: 1284291
#2.1 1. Proyecte la TRM por medio de simulación MBG con 1000 iteraciones.
set.seed(1234) #se pone una semilla común para generar aleatorios
mu<- mean(Rtos_TRM)*250 #periodos comerciales dias habiles año
sigmma<- sd(Rtos_TRM)*sqrt(250)
s<- 4435.84 #ultimo precio de la serie
N<- 1000 #numero iteraciones
t<- 7
delta_t<-1/12
#simulación MBG:Movimiento Browniano geometrico
simulacion <- matrix(s, ncol = N, nrow = t)
for (j in 1:N) {
for (i in 2:t) {
random_value <- rnorm(1, mean = 0, sd = 1)
simulacion[i, j] = simulacion[i - 1, j] * exp((mu - 0.5 * sigmma^2) * delta_t + sigmma * sqrt(delta_t) * random_value)
}
}
#2.2 Simular el flujo de caja total esperado para las cuotas sin cobertura de un futuro
Cuotas_USD=c(91.738,90.992,90.246,89.500,88.754)
Cuotas_COP=simulacion[2,]*Cuotas_USD[1]
for(j in 2:length(Cuotas_USD)){
Cuotas_COP=rbind(Cuotas_COP,simulacion[j+1,]*Cuotas_USD[j])
}
media_cuotas=vector()
volatilidad_cuotas=vector()
percentil_5_cuotas=vector()
percentil_95_cuotas=vector()
for(l in 1:6){
media_cuotas[l] <- mean(simulacion[l + 1, ] * Cuotas_USD[l], na.rm = TRUE)
volatilidad_cuotas[l] <- sd(simulacion[l + 1, ] * Cuotas_USD[l], na.rm = TRUE)
percentil_5_cuotas[l] <- quantile(simulacion[l + 1, ] * Cuotas_USD[l], 0.05, na.rm = TRUE)
percentil_95_cuotas[l] <- quantile(simulacion[l + 1, ] * Cuotas_USD[l], 0.95, na.rm = TRUE)
}
matplot(Cuotas_COP,type = "l", col="lightcyan3", main="Estimado Cuotas en COP sin cobertura", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas, type = "l")
lines(percentil_95_cuotas, type = "l")
lines(media_cuotas, type = "l")
Cuotas_USD <- c(91.738, 90.992, 90.246, 89.500, 88.754)
Cuotas_COP <- simulacion[2, ] * Cuotas_USD[1]
for (j in 2:length(Cuotas_USD)) {
Cuotas_COP <- rbind(Cuotas_COP, simulacion[j + 1, ] * Cuotas_USD[j])
}
media_cuotas <- vector()
volatilidad_cuotas <- vector()
percentil_5_cuotas <- vector()
percentil_95_cuotas <- vector()
for (l in 1:6) {
media_cuotas[l] <- mean(simulacion[l + 1, ] * Cuotas_USD[l])
volatilidad_cuotas[l] <- sd(simulacion[l + 1, ] * Cuotas_USD[l])
percentil_5_cuotas[l] <- quantile(simulacion[l + 1, ] * Cuotas_USD[l], 0.05,na.rm = T)
percentil_95_cuotas[l] <- quantile(simulacion[l + 1, ] * Cuotas_USD[l], 0.95, na.rm = T)
}
# Repetir los valores de los percentiles y la media para que tengan la misma longitud que Cuotas_COP
percentil_5_rep <- rep(percentil_5_cuotas, length.out = nrow(Cuotas_COP))
percentil_95_rep <- rep(percentil_95_cuotas, length.out = nrow(Cuotas_COP))
media_rep <- rep(media_cuotas, length.out = nrow(Cuotas_COP))
# Crear el dataframe
df <- data.frame(
Cuotas_COP = as.vector(Cuotas_COP),
Percentil_5 = percentil_5_rep,
Percentil_95 = percentil_95_rep,
Media = media_rep
)
# Crear el gráfico interactivo con plotly
plot_ly(data = df) %>%
add_lines(x = ~seq_along(Cuotas_COP), y = ~Cuotas_COP, name = "Cuotas en COP con sin cobertura", line = list(color = 'blue')) %>%
add_lines(x = ~seq_along(Percentil_5), y = ~Percentil_5, name = "Percentil 5", line = list(color = 'lightblue')) %>%
add_lines(x = ~seq_along(Percentil_95), y = ~Percentil_95, name = "Percentil 95", line = list(color = '#4CAF50')) %>%
add_lines(x = ~seq_along(Media), y = ~Media, name = "Media", line = list(color = 'lightcoral')) %>%
layout(title = "Estimado Cuotas en COP",
yaxis = list(title = "Valor Cuota"),
xaxis = list(title = "cuota"))
Imagen 6: Gráfico que muestra un gráfico del flujo de caja con cobertura para una empresa exportadora. muestra el flujo de caja neto y el impacto de la cobertura cambiaria para cada mes durante un período de 24 meses.
Percentil 95: El 95% de los valores del flujo de caja se encuentran por debajo de la línea verde. Percentil 5: El 5% de los valores del flujo de caja se encuentran por debajo de la línea azul claro. Media: La línea rojiza indica el valor promedio del flujo de caja.
Conclusiones:
Existe una alta probabilidad (95%) de que el flujo de caja de la empresa sea positivo. Existe una baja probabilidad (5%) de que el flujo de caja de la empresa sea negativo. El flujo de caja promedio de la empresa es positivo.
Recomendaciones:
La empresa debería utilizar las líneas de color para evaluar el riesgo del flujo de caja. La empresa debería considerar la posibilidad de utilizar instrumentos financieros para mitigar el riesgo del flujo de caja. La empresa debería consultar con un asesor financiero para obtener asesoramiento sobre la mejor manera de gestionar el riesgo del flujo de caja.
Utilidad_POR_USD <- simulacion[-1, ] - s
matplot(Utilidad_POR_USD, type = "l", col = "tan")
#utilidad total
Utilidad_total<- Utilidad_POR_USD[1,]*Cuotas_USD[1]*0.7
for(j in 2:length(Cuotas_USD)){
Utilidad_total=rbind(Utilidad_total,Utilidad_POR_USD[j,]*Cuotas_USD[j]*0.7)
}
matplot(Utilidad_total,type="l", col = "lightblue")
# Calcular las cuotas con cobertura
Cuotas_COP_CON_C <- Cuotas_COP - Utilidad_total
# Calcular estadísticas de las cuotas con cobertura
media_cuotas_COP_CON_C <- apply(Cuotas_COP_CON_C, 2, mean, na.rm = TRUE)
volatilidad_cuotas_COP_CON_C <- apply(Cuotas_COP_CON_C, 2, sd, na.rm = TRUE)
percentil_5_cuotas_COP_CON_C <- apply(Cuotas_COP_CON_C, 2, quantile, probs = 0.05, na.rm = TRUE)
percentil_95_cuotas_COP_CON_C <- apply(Cuotas_COP_CON_C, 2, quantile, probs = 0.95, na.rm = TRUE)
# Graficar las cuotas con cobertura
matplot(Cuotas_COP_CON_C, type = "l", col = "lightcyan3", main = "Estimado Cuotas en COP con Cobertura", ylab = "Valor Cuota", xlab = "Cuota")
lines(percentil_5_cuotas_COP_CON_C, type = "l", col = "green")
lines(percentil_95_cuotas_COP_CON_C, type = "l", col = "blue")
lines(media_cuotas_COP_CON_C, type = "l", col = "red")
#Obtenga los beneficios reales de las serie de los apartedos 2.2 y 2.3
#Beneficios sin cobertura
# Suponiendo que tienes los flujos de caja reales en una variable llamada "flujos_reales"
flujos_reales <- c(91.738, 90.992, 90.246, 89.500, 88.754) # Agrega los flujos de caja reales
# Calcula la diferencia entre los flujos de caja esperados y los flujos de caja reales
diferencia_flujos <- Cuotas_COP - flujos_reales
# Suma las diferencias para obtener los beneficios reales totales
beneficios_reales <- sum(diferencia_flujos)
# Crear un vector para el tiempo (puede ser la secuencia de números de 1 a la longitud de los flujos reales)
tiempo <- 1:length(flujos_reales)
# Graficar los beneficios reales en función del tiempo
# Agrupar los beneficios reales por cada período de tiempo en `tiempo`
beneficios_por_tiempo <- tapply(diferencia_flujos, rep(1:5, each = 1000), mean)
#Crear un gráfico interactivo con plotly
plot_ly(x = tiempo, y = beneficios_por_tiempo, type = "scatter", mode = "lines", line = list(color = 'blue')) %>%
layout(title = "Beneficios reales en función del tiempo sin cobertura",
xaxis = list(title = "Tiempo"),
yaxis = list(title = "Beneficios reales"))
# Calcular los beneficios con cobertura
# Calcular la media de las cuotas con cobertura
media_cuotas_con_cobertura <- apply(Cuotas_COP_CON_C, 2, mean, na.rm = TRUE)
# Calcular los beneficios con cobertura como la diferencia entre la media de las cuotas sin cobertura y la media de las cuotas con cobertura
beneficios_con_cobertura <- mean(Cuotas_COP) - media_cuotas_con_cobertura
# Graficar los beneficios con cobertura en función del tiempo
main <- ("Beneficios con cobertura en función del tiempo")
# Crear un gráfico interactivo con plotly
plot_ly(x = 1:length(beneficios_con_cobertura), y = beneficios_con_cobertura, type = "scatter", mode = "lines", line = list(color = 'blue')) %>%
layout(title = "Beneficios con cobertura en función del tiempo",
xaxis = list(title = "Tiempo"),
yaxis = list(title = "Beneficios con cobertura"))
La imagen 7: Gráfico que muestra los beneficios reales sin cobertura para una empresa exportadora que realizó una inversión empresarial con los siguientes criterios:
Monto de inversión: 1’790.000 USD Tasa de interés: 10% AMV Cuotas: 24 Frecuencia de pago: Mensua
La gráfica muestra los beneficios reales en pesos colombianos (COP) para cada mes durante un período de 24 meses. Los beneficios reales son variables, con algunos picos y caídas pronunciadas. La volatilidad de los beneficios reales se debe a la volatilidad de la tasa de cambio TRM.
Interpretación:
La empresa exportadora ha obtenido beneficios reales significativos durante los primeros 24 meses de la inversión. La volatilidad de la tasa de cambio TRM ha generado un riesgo significativo para la empresa.
Conclusiones:
La empresa exportadora ha tenido éxito en la inversión empresarial. La volatilidad de la tasa de cambio TRM es un riesgo importante que la empresa debe tener en cuenta
La imagen 8: Gráfico que muestra los beneficios reales con cobertura para una empresa exportadora que realizó una inversión empresarial con los siguientes criterios:
Monto de inversión: 1’790.000 USD Tasa de interés: 10% AMV Cuotas: 24 Frecuencia de pago: Mensual Cobertura cambiaria: 70%
Observaciones:
La gráfica muestra los beneficios reales en pesos colombianos (COP) para cada mes durante un período de 24 meses. Los beneficios reales son más estables que los beneficios reales sin cobertura. La volatilidad de los beneficios reales se ha reducido gracias a la cobertura cambiaria.
Interpretación:
La empresa exportadora ha obtenido beneficios reales significativos durante los primeros 24 meses de la inversión. La cobertura cambiaria ha ayudado a proteger a la empresa de la volatilidad de la tasa de cambio TRM.
Conclusiones:
La empresa exportadora ha tenido éxito en la inversión empresarial. La cobertura cambiaria ha sido una herramienta eficaz para mitigar el riesgo cambiario.
# punto 5 Realizar la cuenta de margen con el flujo de caja operado
#margen inicial
margen_inicial=(cuotas[1]*0.70)*s*0.08
#probabilidad de ser llamado al margen
nivel_margen_requerido <- margen_inicial/monto_inversion_usd
tamano_posicion <- monto_inversion_usd
volatilidad <- volatilidad_cuotas
# Calcular la cantidad máxima de pérdida permitida antes de ser llamado al margen
maxima_perdida_permitida <- margen_inicial * nivel_margen_requerido
# Definir los parámetros de la distribución normal
media <- 0 # Media de la distribución
# Calcular la probabilidad de ser llamado al margen
probabilidad_llamado_al_margen <- pnorm((maxima_perdida_permitida - mu) / volatilidad)
# Imprimir resultados
print(paste("Probabilidad de ser llamado al margen:", probabilidad_llamado_al_margen))
## [1] "Probabilidad de ser llamado al margen: 0.500726375806667"
## [2] "Probabilidad de ser llamado al margen: 0.500505957974521"
## [3] "Probabilidad de ser llamado al margen: 0.500426266707337"
## [4] "Probabilidad de ser llamado al margen: 0.500372242270882"
## [5] "Probabilidad de ser llamado al margen: 0.500334425390941"
## [6] "Probabilidad de ser llamado al margen: NA"
' ¿Cuánto debería de haber en la cuenta de margen al inicio para que la probabilidad de ser
llamado al margen antes de cubrir el primer flujo sea menor al 1%?'
## [1] " ¿Cuánto debería de haber en la cuenta de margen al inicio para que la probabilidad de ser \nllamado al margen antes de cubrir el primer flujo sea menor al 1%?"
# Definir el nivel de significancia (1%)
nivel_significancia <- 0.01
# Calcular el percentil 99 de la distribución normal estándar
z_value <- qnorm(1 - nivel_significancia)
# Calcular la cantidad máxima de pérdida permitida en términos de desviaciones estándar de la media
maxima_perdida_permitida_desv_estandar <- z_value * volatilidad
# Calcular la cantidad inicial en la cuenta de margen
margen_inicial <- maxima_perdida_permitida_desv_estandar * tamano_posicion
# Imprimir resultado
print(paste("La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de:", margen_inicial))
## [1] "La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de: 45352889084.8806"
## [2] "La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de: 65110646384.3754"
## [3] "La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de: 77283195615.0037"
## [4] "La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de: 88499499902.0953"
## [5] "La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de: 98507041121.2288"
## [6] "La cantidad inicial en la cuenta de margen para una probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo es de: NA"
library(knitr)
# Definir el nivel de significancia (1%)
nivel_significancia <- 0.01
# Calcular el percentil 99 de la distribución normal estándar
z_value <- qnorm(1 - nivel_significancia)
# Calcular la cantidad máxima de pérdida permitida en términos de desviaciones estándar de la media
maxima_perdida_permitida_desv_estandar <- z_value * volatilidad
# Calcular la cantidad inicial en la cuenta de margen
margen_inicial <- maxima_perdida_permitida_desv_estandar * tamano_posicion
# Crear una tabla con los resultados
resultados <- data.frame(
"Nivel de significancia" = paste0(100 * nivel_significancia, "%"),
"Z-value" = z_value,
"Máxima pérdida permitida (desv. estándar)" = maxima_perdida_permitida_desv_estandar,
"Margen inicial" = margen_inicial
)
# Imprimir la tabla usando kable
kable(resultados, align = "c", caption = "Resultados del cálculo de margen inicial para probabilidad menor al 1% de ser llamado al margen antes de cubrir el primer flujo")
| Nivel.de.significancia | Z.value | Máxima.pérdida.permitida..desv..estándar. | Margen.inicial |
|---|---|---|---|
| 1% | 2.326348 | 25336.81 | 45352889085 |
| 1% | 2.326348 | 36374.66 | 65110646384 |
| 1% | 2.326348 | 43174.97 | 77283195615 |
| 1% | 2.326348 | 49441.06 | 88499499902 |
| 1% | 2.326348 | 55031.87 | 98507041121 |
| 1% | 2.326348 | NA | NA |
-----