Se analiza la serie diaria TRM desde 1991-11-27, hasta 2017-02-15
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"
Datos_TRM[,"Fecha"]<-as.Date(Datos_TRM[,"Fecha"],format = "%d/%m/%Y")
class(Datos_TRM[,"Fecha"])
## [1] "Date"
plot(Datos_TRM[,"Fecha"],Datos_TRM[,"Precio"], type = "l", main = "Serie Historica TRM")
plot(Datos_TRM[-1,"Fecha"],diff(log(Datos_TRM[,"Precio"])), type = "l", main = "Serie Historica rendimientos diarios TRM")
# Distribucion de frecuencias
hist(Datos_TRM[,"Precio"], breaks = 30, col = "gray", main = "histograma de precios", freq = FALSE)
Rtos_TRM<-diff(log(Datos_TRM[,"Precio"]))
hist(Rtos_TRM, breaks = 50, col = "gray", main = "histograma de rendimientos", freq = FALSE, xlim = c(-0.02,0.02))
max(Datos_TRM[,"Precio"])
## [1] 5061.21
min(Datos_TRM[,"Precio"])
## [1] 1652.41
print("media de la TRM")
## [1] "media de la TRM"
mean(Datos_TRM[,"Precio"])
## [1] 2660.824
print("desviación estandar de la TRM")
## [1] "desviación estandar de la TRM"
sd(Datos_TRM[,"Precio"])
## [1] 762.3418
#install.packages("moments")
library(moments)
print("Sesgo")
## [1] "Sesgo"
skewness(Datos_TRM[,"Precio"])
## [1] 0.896888
print("curtosis")
## [1] "curtosis"
kurtosis(Datos_TRM[,"Precio"])
## [1] 3.041658
#Percentiles
quantile(Datos_TRM[,"Precio"],c(0.01,0.05,0.1,0.5,0.75,0.90,0.95,0.99))
## 1% 5% 10% 50% 75% 90% 95% 99%
## 1762.380 1791.625 1838.275 2389.750 3054.020 3856.000 4093.180 4802.480
max(Rtos_TRM)
## [1] 0.05930667
min(Rtos_TRM)
## [1] -0.05621935
print("media Rendimientos de la TRM")
## [1] "media Rendimientos de la TRM"
mean(Rtos_TRM)
## [1] 8.36742e-05
print("desviación estandar rendimientos de la TRM")
## [1] "desviación estandar rendimientos de la TRM"
sd(Rtos_TRM)
## [1] 0.005923667
skewness(Rtos_TRM)
## [1] 0.2697665
print("curtosis")
## [1] "curtosis"
kurtosis(Rtos_TRM)
## [1] 12.81127
quantile(Rtos_TRM,c(0.01,0.05,0.1,0.5,0.75,0.90,0.95,0.99))
## 1% 5% 10% 50% 75% 90%
## -0.016723469 -0.008985171 -0.005719345 0.000000000 0.001295553 0.005983632
## 95% 99%
## 0.009561866 0.019031630
##Estimación de un intervalo de predicción del 90% para los rendimientos de la TRM
quantile(Rtos_TRM, c(0.05,0.95))
## 5% 95%
## -0.008985171 0.009561866
breaks<-c(min(Rtos_TRM)-0.0000001,-0.03)
corte<-cut(Rtos_TRM,breaks)
tabla<-table(corte)
print(tabla)
## corte
## (-0.0562,-0.03]
## 14
probabilidad<-tabla/length(Rtos_TRM)
print(probabilidad)
## corte
## (-0.0562,-0.03]
## 0.001588202
breaks2<-c(min(Rtos_TRM)+0.0000001,+0.05)
corte2<-cut(Rtos_TRM,breaks2)
tabla2<-table(corte2)
print(tabla2)
## corte2
## (-0.0562,0.05]
## 8812
probabilidad2<-tabla2/length(Rtos_TRM)
print(probabilidad2)
## corte2
## (-0.0562,0.05]
## 0.9996597
¿Que tipo de distribución teorica siguen los rendimientos diarios de la TRM? ¿Es valido el supuesto de normalidad para los rendimientos diarios de la TRM?
En este casoPara la estimación de los parámetros de la distribución normal, Utilice el promedio aritmetico de los rendimientos de la TRM como estimador del valor esperado y la desvicación estandar historica 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")
## 6.1 Comparación de cuantiles
qqnorm(Rtos_TRM)
qqline(Rtos_TRM)
### 6.2 Comparación de percentiles empiricos con los normales
teoricos
cuantiles<-c(0.01,0.025,0.05,0.1,0.25,0.40,0.45,0.5,0.75,0.9,0.95,0.975,0.99)
qnorm(cuantiles,mean = mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] -0.0136968356 -0.0115264995 -0.0096598907 -0.0075078103 -0.0039117784
## [6] -0.0014170696 -0.0006607018 0.0000836742 0.0040791268 0.0076751587
## [11] 0.0098272391 0.0116938478 0.0138641839
quantile(Rtos_TRM, cuantiles)
## 1% 2.5% 5% 10% 25% 40%
## -0.016723469 -0.012630315 -0.008985171 -0.005719345 -0.001425601 0.000000000
## 45% 50% 75% 90% 95% 97.5%
## 0.000000000 0.000000000 0.001295553 0.005983632 0.009561866 0.013183574
## 99%
## 0.019031630
qnorm(c(0.05,0.95),mean = mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] -0.009659891 0.009827239
pnorm(-0.01,mean =mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] 0.04435248
Suponga 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 historica de los rendimientos diarios
Numero_iteraciones=10000
TRM_SIMULADA=matrix(,3,Numero_iteraciones)
TRM_Inicial=Datos_TRM[length(Datos_TRM[,"Precio"]), "Precio"]
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")
hist(TRM_SIMULADA[2,],15, main = "HISTOGRAMA SIMULACIÓN TRM 16 DE FEBRERO DE 2017", col ="gray")
View(TRM_SIMULADA)
hist(TRM_SIMULADA[3,],15, main = "HISTOGRAMA SIMULACIÓN TRM 16 DE FEBRERO DE 2017", col ="gray")
conteo_mayores <- sum(TRM_SIMULADA[3,] > TRM_SIMULADA[1,])
cat("Número de valores en la tercera fila mayores que los de la primera fila:", conteo_mayores, "\n")
## Número de valores en la tercera fila mayores que los de la primera fila: 5079
matriz_largos <- TRM_SIMULADA
matriz_largos[3,] <- ifelse(TRM_SIMULADA[3,] > TRM_SIMULADA[1,], TRM_SIMULADA[3,], NA)
# Imprimir la matriz de valores mayores
View(matriz_largos)
largos <- matriz_largos[3,]-matriz_largos[1,] #PAYOFF
mean(largos, na.rm = TRUE)*10*50000
## [1] 9279872
conteo_menores <- sum(TRM_SIMULADA[3,] < TRM_SIMULADA[1,])
cat("Número de valores en la tercera fila menores que los de la primera fila:", conteo_menores, "\n")
## Número de valores en la tercera fila menores que los de la primera fila: 4921
matriz_cortos <- TRM_SIMULADA
matriz_cortos[3,] <- ifelse(TRM_SIMULADA[3,] < TRM_SIMULADA[1,], TRM_SIMULADA[3,], NA)
# Imprimir la matriz de valores mayores
View(matriz_cortos)
cortos <- matriz_cortos[1,]-matriz_cortos[3,] #PAYOFF
mean(cortos, na.rm = TRUE)
## [1] 18.34907
library(quantmod) library(zoo)
contratos <- 10 valor_contrato <- 50000 precio_actual <- 3918 deposito_cop <- 150000000 mu <- 0.00064 # Media diaria (aproximadamente 0.01/20 días hábiles al mes) sigma <- 0.03 / sqrt(15.67) # Desviación estándar diaria (ajustada por raíz cuadrada de días hábiles al mes) num_iteraciones <- 10000
rendimientos_diarios <- diff(log(trm_cierre))
set.seed(123) # Establecer semilla para reproducibilidad simulaciones <- matrix(rnorm(contratos * num_iteraciones, mean = mu, sd = sigma), nrow = num_iteraciones)
rendimientos <- exp(simulaciones)
valor_cuenta_margen <- deposito_cop + (precio_actual * contratos * valor_contrato * cumprod(1 + rendimientos))
percentiles <- quantile(valor_cuenta_margen, c(0.05, 0.95)) prob_perdida_10000000 <- mean(valor_cuenta_margen < (deposito_cop - 10000000)) prob_llamada_margen <- mean(valor_cuenta_margen < 130000000)
cat(“Intervalo de predicción del 90%:”, percentiles, “”) cat(“Probabilidad de perder más de 10,000,000 COP:”, prob_perdida_10000000, “”) cat(“Probabilidad de ser llamado al margen:”, prob_llamada_margen, “”)
```