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)
# 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í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 |
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.
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.
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.
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.
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
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