Datos_TRM<- read.csv(file = "Historico.csv", header = TRUE, sep = ";", dec = ".", fill = TRUE)
View(Datos_TRM)

head(Datos_TRM)
##       Fecha  Precio
## 1 1/01/2000 1873.77
## 2 2/01/2000 1873.77
## 3 3/01/2000 1873.77
## 4 4/01/2000 1874.35
## 5 5/01/2000 1895.97
## 6 6/01/2000 1912.69
class(Datos_TRM[,"Fecha"])
## [1] "character"

Cambiamos la clase de la fecha de “character” a “Date”

Datos_TRM[,"Fecha"]<-as.Date(Datos_TRM[,"Fecha"],format = "%d/%m/%Y")
class(Datos_TRM[,"Fecha"])
## [1] "Date"

Debemos instalar Plotly

#install.packages("plotly")
#install.packages("ggplot2")
# Cargar la librería ggplot2
library(ggplot2)
library(plotly)
## 
## 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
grafica_historica <- ggplot(Datos_TRM, aes(x = Fecha, y = Precio)) +
  geom_point(color = "blue") +  # Cambiar el color de los puntos
  labs(title = "Precio de la TRM a lo largo del tiempo",  # Añadir título
       x = "Fecha", y = "Precio") +  # Añadir etiquetas de los ejes
  theme_minimal() +  # Usar un tema minimalista
  theme(plot.title = element_text(size = 16, face = "bold"),  # Ajustar el tamaño y estilo del título
        axis.text.x = element_text(angle = 45, hjust = 1))  # Rotar las etiquetas del eje x para mayor legibilidad

# Convertir la gráfica a ggplotly
ggplotly(grafica_historica)
#(Datos_TRM[-1,"Fecha"],diff(log(Datos_TRM[,"Precio"])), type = "l", main = "Serie Historica rendimientos diarios TRM")
# Ajustar los márgenes
par(mar = c(5, 5, 4, 2) + 0.1)

# Crear la gráfica sin trazar los datos aún
plot(x = NA, y = NA, 
     type = "n", 
     xlim = c(min(Datos_TRM$Fecha), max(Datos_TRM$Fecha)), 
     ylim = c(min(diff(log(Datos_TRM$Precio))), max(diff(log(Datos_TRM$Precio)))), 
     main = "Serie Histórica de Rendimientos Diarios de TRM",
     xlab = "Fecha",
     ylab = "Rendimiento Diario")

# Ocultar la gráfica original
invisible({
  # Graficar los datos
  lines(Datos_TRM$Fecha[-1], diff(log(Datos_TRM$Precio)), type = "l", col = "blue")
})
# Agregar una leyenda
legend("topright", legend = "Rendimientos Diarios", col = "blue", lty = 1)

Distribucion de frecuencias

# Ajustar el tamaño de la imagen
options(repr.plot.width=8, repr.plot.height=6)

# Crear el histograma
hist(Datos_TRM[, "Precio"], 
     breaks = 30, # Número de barras
     col = "lightblue", # Color de las barras
     main = "Histograma de Precios de TRM", # Título
     xlab = "Precio", # Etiqueta del eje x
     ylab = "Frecuencia Relativa", # Etiqueta del eje y
     freq = FALSE) # Mostrar frecuencias relativas

# Agregar una línea de densidad
lines(density(Datos_TRM[, "Precio"]), col = "red", lwd = 2)

Rtos_TRM<-diff(log(Datos_TRM[,"Precio"]))
# Ajustar el tamaño de la imagen
options(repr.plot.width=8, repr.plot.height=6)

# Crear el histograma
hist(Rtos_TRM, 
     breaks = 50, # Número de barras
     col = "lightblue", # Color de las barras
     main = "Histograma de Rendimientos de TRM", # Título
     xlab = "Rendimiento Diario", # Etiqueta del eje x
     ylab = "Frecuencia Relativa", # Etiqueta del eje y
     freq = FALSE, # Mostrar frecuencias relativas
     xlim = c(-0.02, 0.02)) # Límites del eje x

# Agregar una línea de densidad
lines(density(Rtos_TRM), col = "red", lwd = 2)

#install.packages("moments")
#install.packages("knitr")
# Cargar las librerías necesarias
library(knitr)
library(moments)

# Calcular estadísticas de la TRM
max_precio <- max(Datos_TRM[,"Precio"])
min_precio <- min(Datos_TRM[,"Precio"])
media_precio <- mean(Datos_TRM[,"Precio"])
desviacion_estandar_precio <- sd(Datos_TRM[,"Precio"])
sesgo_precio <- skewness(Datos_TRM[,"Precio"])
curtosis_precio <- kurtosis(Datos_TRM[,"Precio"])
percentiles_precio <- quantile(Datos_TRM[,"Precio"], c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))

# Calcular estadísticas de los rendimientos de la TRM
Rtos_TRM <- diff(log(Datos_TRM[,"Precio"]))
max_rtos_trm <- max(Rtos_TRM)
min_rtos_trm <- min(Rtos_TRM)
media_rtos_trm <- mean(Rtos_TRM)
desviacion_estandar_rtos_trm <- sd(Rtos_TRM)
sesgo_rtos_trm <- skewness(Rtos_TRM)
curtosis_rtos_trm <- kurtosis(Rtos_TRM)
percentiles_rtos_trm <- quantile(Rtos_TRM, c(0.01, 0.05, 0.1, 0.5, 0.75, 0.90, 0.95, 0.99))

# Crear una tabla con las estadísticas
tabla_estadisticas <- data.frame(
  Estadística = c("Máximo", "Mínimo", "Media", "Desviación Estándar", "Sesgo", "Curtosis"),
  TRM = c(max_precio, min_precio, media_precio, desviacion_estandar_precio, sesgo_precio, curtosis_precio),
  Rendimientos_TRM = c(max_rtos_trm, min_rtos_trm, media_rtos_trm, desviacion_estandar_rtos_trm, sesgo_rtos_trm, curtosis_rtos_trm)
)

# Mostrar la tabla
kable(tabla_estadisticas, caption = "Estadísticas de la TRM y sus rendimientos")
Estadísticas de la TRM y sus rendimientos
Estadística TRM Rendimientos_TRM
Máximo 5061.210000 0.0593067
Mínimo 1652.410000 -0.0562194
Media 2660.823711 0.0000837
Desviación Estándar 762.341794 0.0059237
Sesgo 0.896888 0.2697665
Curtosis 3.041658 12.8112712

Informe sobre las Estadísticas del Precio de la TRM y sus Rendimientos

Las estadísticas presentadas ofrecen una visión detallada del comportamiento del precio de la Tasa Representativa del Mercado (TRM) y sus rendimientos durante el período analizado. Estos datos nos permiten comprender mejor la distribución, las tendencias y los posibles sesgos en los datos.

Variabilidad del Precio de la TRM:

El análisis del máximo y mínimo revela la amplia gama de precios observados durante el período. Esta variabilidad sugiere fluctuaciones significativas en el precio de la TRM a lo largo del tiempo.

Tendencias y Patrones Observados:

Observamos que la media del precio de la TRM está más cerca del precio mínimo que del máximo. Este hallazgo refleja una tendencia interesante: durante el período analizado, la TRM ha experimentado una evolución desde valores más bajos a valores más altos. Este patrón sugiere un aumento constante en la TRM en los últimos años, en contraste con el rango más bajo observado en el período anterior al año 2015.

Eventos Excepcionales:

Un análisis más detallado revela que el precio mínimo de la TRM podría haber sido influenciado por eventos económicos significativos, como la crisis financiera del año 2008. Este año de crisis se asocia comúnmente con una disminución abrupta en los precios de los activos financieros, lo que podría explicar la observación del precio mínimo en ese momento.

Interpretación de la Media:

Aunque la media del precio de la TRM puede parecer relativamente baja, es importante considerar el contexto histórico y las tendencias actuales del mercado. La baja media puede atribuirse a los valores más bajos predominantes en el pasado, y puede no reflejar completamente la situación actual del mercado.

Por lo anterior, al observar la amplia variabilidad en el precio de la TRM a lo largo del período analizado, se recomienda acortar la ventana de tiempo de análisis. Esto se fundamenta en la presencia de eventos excepcionales, como la crisis financiera del año 2008, que se encuentran muy alejados en el tiempo y podrían distorsionar las estadísticas actuales. Dado que estos eventos pasados pueden tener un impacto significativo en las estadísticas de precios, reducir el período de análisis puede ayudar a centrar el análisis en datos más relevantes y representativos de la situación actual del mercado. De esta manera, se facilita una comprensión más precisa y actualizada de la distribución y tendencias del precio de la TRM, lo que contribuye a una toma de decisiones más informada y precisa.

# Importar paquetes necesarios
#install.packages("magrittr")
#install.packages("dplyr")
#install.packages("stats")
library(magrittr)  # Para usar el operador %>%
library(dplyr)     # Para manipulación de datos
## 
## 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(stats)     # Para funciones estadísticas
# Definir los datos
valor_activo <- 500000  # Valor del activo en USD
prob_perdida <- 0.03    # Probabilidad de pérdida hasta 3%
prob_ganancia <- 0.05   # Probabilidad de ganancia hasta 5%

# Calcular intervalo de confianza del 95% para el valor en pesos de la importación
confianza_95 <- quantile(Rtos_TRM, c(0.05, 0.95))
intervalo_confianza <- valor_activo * exp(confianza_95)

# Calcular la probabilidad de obtener una pérdida de hasta un 3% en un día
probabilidad_perdida <- sum(Rtos_TRM <= log(1 - prob_perdida))

# Calcular la probabilidad de ganar hasta un 5% en un día
probabilidad_ganancia <- sum(Rtos_TRM >= log(1 + prob_ganancia))

# Imprimir resultados
cat("Intervalo de Confianza del 95% para el valor en pesos de la importación:\n")
## Intervalo de Confianza del 95% para el valor en pesos de la importación:
print(intervalo_confianza)
##       5%      95% 
## 495527.5 504803.9
cat("\nProbabilidad de obtener una pérdida de hasta un 3% en un día:\n")
## 
## Probabilidad de obtener una pérdida de hasta un 3% en un día:
print(probabilidad_perdida/100)
## [1] 0.12
cat("\nProbabilidad de ganar hasta un 5% en un día:\n")
## 
## Probabilidad de ganar hasta un 5% en un día:
print(probabilidad_ganancia/100)
## [1] 0.02

La probabilidada de obtener una perdida de hasta el 3% en un dia es del 12% y la probabilidad de tener una ganacia de hasta un 5% en un dia es del 2%

# Definir el valor de la inversión en COP
valor_inversion <- 10000000

# Calcular el rendimiento diario en COP
rendimientos_cop <- valor_inversion * exp(Rtos_TRM) - valor_inversion

# Calcular la probabilidad de obtener pérdidas entre -500.000 y 500.000 COP en un día
probabilidad_perdidas <- sum(rendimientos_cop >= -500000 & rendimientos_cop <= 500000) / length(rendimientos_cop)

# Imprimir el resultado
cat("La probabilidad de obtener pérdidas entre -500.000 y 500.000 COP en un día es:", probabilidad_perdidas)
## La probabilidad de obtener pérdidas entre -500.000 y 500.000 COP en un día es: 0.9995462

Simulacion montecarlo

Datos_futuroTRM<- read.csv(file = "TRMH24F.csv", header = TRUE, sep = ";", dec = ".", fill = TRUE)

View(Datos_futuroTRM)

# Parámetros del problema

contratos <- 10
Numero_iteraciones <- 10000
valor_contrato <- 50000

precio_actual <- 4198

deposito_cop <- 150000000

mu <- 0.01/25

sigma <- 0.03/25
ExposicionTotal <- (contratos*valor_contrato*precio_actual)

garantia_inicial<-150000000

mantenimiento <- 130000000

trm_cierre <- Datos_futuroTRM$Precio.Cierre
 
 
Rtos_futuro<-diff(log(Datos_futuroTRM[,"Precio.Cierre"]))

futuro_SIMULADA=matrix(,25,Numero_iteraciones)

futuro_Inicial=Datos_futuroTRM[length(Datos_futuroTRM[,"Precio.Cierre"]), "Precio.Cierre"]
 
futuro_SIMULADA[1,]=futuro_Inicial
 
for(j in 1:Numero_iteraciones){

  for(i in 2:25){

    futuro_SIMULADA[i,j]=futuro_Inicial*exp(rnorm(1,mean = mu,sd=sigma))

  }

}
 
 

# Graficar las series de tiempo
matplot(futuro_SIMULADA, type = "l",
        main = "Futuro Simulada", xlab = "Días", ylab = "Valor")

# Calcular el promedio de cada fila
promedio_SM <-data.frame(Promedio = rowMeans(futuro_SIMULADA)) 
n <- 25
Diferencia_pf <- -diff(promedio_SM$Promedio)
liquidacion_diaria <- Diferencia_pf*valor_contrato*contratos 

# Definir el número de datos
n <- 25

# Crear un vector para almacenar los datos
valores_cuenta_margen <- numeric(25)

# Definir el primer dato
valores_cuenta_margen[1] <- 150000000


# Calcular los datos restantes
for (i in 2:n) {
  valores_cuenta_margen[i] <- valores_cuenta_margen[i-1] + liquidacion_diaria
}
## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo

## Warning in valores_cuenta_margen[i] <- valores_cuenta_margen[i - 1] +
## liquidacion_diaria: número de items para para sustituir no es un múltiplo de la
## longitud del reemplazo
print(valores_cuenta_margen)
##  [1] 150000000 149160775 148321551 147482326 146643102 145803877 144964653
##  [8] 144125428 143286204 142446979 141607755 140768530 139929306 139090081
## [15] 138250857 137411632 136572408 135733183 134893959 134054734 133215510
## [22] 132376285 131537061 130697836 129858612
# Calcular el intervalo de predicción del 90%
intervalo_prediccion_90 <- quantile(valores_cuenta_margen, c(0.05, 0.95))

# Imprimir el intervalo de predicción del 90%
print(intervalo_prediccion_90)
##        5%       95% 
## 130865681 148992931
# Calcular la probabilidad de perder más de 10,000,000 COP en un mes
prob_perdida <- mean(valores_cuenta_margen < 150000000-10000000)

# Imprimir la probabilidad
print(prob_perdida)
## [1] 0.52
# Supongamos que tenemos una variable llamada 'valores_cuenta_margen' que contiene los posibles valores de la cuenta de margen para dentro de un mes

# Calcular la probabilidad de ser llamado al margen si el margen mínimo es de 130,000,000 COP
prob_llamado_margen <- mean(valores_cuenta_margen < 130000000)

# Imprimir la probabilidad
print(prob_llamado_margen)
## [1] 0.04