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

Aplicaciones de asignación de probabilidad basada en frecuencia

##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

¿Cuál es la probabilidad de obtener una perdida de hasta un 3% en un día?

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

¿Cuál es la probabilidad de obtener una ganancia de hasta un 5% en un día?

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

Supuesto de normalidad

¿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

7 Aplicaciones de asignación de probabilidad bajo el supuesto de que los rendimientos de la TRM siguen una distribución normal

7.1 Estimación de un intervalo de predicción del 90% para los rendimientos de la TRM

qnorm(c(0.05,0.95),mean = mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] -0.009659891  0.009827239

7.2 ¿que probabilidad hay de tener una perdida mayor al 1% en un dia?

pnorm(-0.01,mean =mean(Rtos_TRM),sd=sd(Rtos_TRM))
## [1] 0.04435248

8 Simulación de montecarlo

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

8.1 Realice unqa simulación con 10.0000 iteraciones para el valor de la TRM para el viernes 17 de febrero de 2017 (dos dias adelante de la ultima fecha de la muestra).

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

Instalar los paquetes necesarios si no los tienes instalados

install.packages(“quantmod”)

install.packages(“zoo”)

Cargar los paquetes

library(quantmod) library(zoo)

Parámetros del problema

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

Calcular los rendimientos diarios del futuro

rendimientos_diarios <- diff(log(trm_cierre))

Simulación de Montecarlo

set.seed(123) # Establecer semilla para reproducibilidad simulaciones <- matrix(rnorm(contratos * num_iteraciones, mean = mu, sd = sigma), nrow = num_iteraciones)

Calcular los rendimientos del futuro

rendimientos <- exp(simulaciones)

Calcular el valor de la cuenta de margen para cada simulación

valor_cuenta_margen <- deposito_cop + (precio_actual * contratos * valor_contrato * cumprod(1 + rendimientos))

Calcular estadísticas

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)

Mostrar resultados

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, “”)

```