Santiago López, Esteban Moncada, Juana Marín
Descripción de la actividad
Descargue la TRM desde el año 2000 hasta el día de hoy y responda las siguientes preguntas asignando probabilidades basadas en frecuencia y bajo el supuesto de que los rendimientos siguen una distribución normal:
1. ¿Cómo se analiza estadísticamente el precio de la TRM en este lapso de información?
Primero, se descargó la base de datos para realizar el análisis correspondiente
TRM_datos<-read.csv(file = "trm2000.csv", header = TRUE, sep = ";")
head(TRM_datos)
class(TRM_datos[,"Fecha"])
TRM_datos[,"Fecha"]<-as.Date(TRM_datos[,"Fecha"],format = "%d/%m/%Y")
class(TRM_datos[,"Fecha"])
plot(TRM_datos[,"Fecha"],TRM_datos[,"TRM"], type = "l", main = "Serie Historica TRM")Dada la gráfica anterior, se pueden observar cambios notables durante el periodo analizado, tales como la volatilidad en el valor de la TRM alrededor del año 2008 causada por la crisis inmobiliaria en Estados Unidos. En el periodo comprendido entre 2010 y 2015, el dolár presentó una tendencia bajista debido a las dificultades generadas por la crisis tales como nuevas políticas monetarias, desempleo, aumento de la deuda externa, falta de confianza en la moneda dada su lenta recuperación financiera.A su vez también se produjo un aumento histórico durante del año 2015 a causa del colapso del valor del petróleo a nivel mundial que genero una devaluación en la moneda colombiana.
Posteriormente, se calcularon los rendimientos de la TRM durante el periodo seleccionado (2000-2024) y se graficaron los histogramas correspondientes para facilitar el análisis del comportamiento de la variable.
# Rendimientos de la TRM
rendimiento<-diff(log(TRM_datos[,"TRM"]))
plot(TRM_datos[-1,"Fecha"],rendimiento, type = "l", main = "Serie Histórica Rendimientos Diarios TRM")# Histogramas
hist(TRM_datos[,"TRM"], breaks = 30, col = "#465cb3", main = "Histograma de precios", freq = FALSE)hist(rendimiento, breaks = 50, col = "#465cb3", main = "Histograma de rendimientos", freq = FALSE, xlim = c(-0.02,0.02))# Calculo de Medidas de Tendencia Central
# Load necessary packages
if (!requireNamespace("e1071", quietly = TRUE)) {
install.packages("e1071")
}
library(e1071)
library(knitr)
ResumenEstadisticoTRM<- data.frame(
Minimo = min(TRM_datos[,"TRM"]),
Maximo = max(TRM_datos[,"TRM"]),
Media = mean(TRM_datos[,"TRM"]),
Desviacion = sd(TRM_datos[,"TRM"]),
Sesgo = skewness(TRM_datos[,"TRM"]),
Curtosis = kurtosis(TRM_datos[,"TRM"])
)
knitr::kable(ResumenEstadisticoTRM)| Minimo | Maximo | Media | Desviacion | Sesgo | Curtosis |
|---|---|---|---|---|---|
| 1652.41 | 5061.21 | 2660.824 | 762.3418 | 0.8967354 | 0.0409679 |
En el análisis estadístico del precio de la Tasa de Cambio Representativa del Mercado (TRM) desde el año 2000 hasta el 2024, se implementaron diversas medidas descriptivas para comprender la distribución de los datos. Esto incluyó el cálculo de la media, desviación estándar, cuantiles, mínimo y máximo, proporcionando una visión detallada de la tendencia central, dispersión y rango de la TRM a lo largo del tiempo.
Además, se evaluaron medidas de forma de la distribución, como el sesgo y la curtosis, para comprender la simetría y la forma de las colas de la distribución, lo que contribuye a la comprensión de la normalidad o presencia de sesgos en la TRM.
El análisis se extendió al rendimiento de la TRM, explorando variaciones porcentuales o rendimientos logarítmicos para comprender mejor la dinámica de cambio en la tasa de cambio. La visualización a través de histogramas permitió identificar patrones, tendencias y posibles anomalías en la variabilidad de la TRM.
Asimismo, se observaron las tendencias temporales de la TRM a lo largo del período, identificando cambios significativos, periodos de volatilidad o estabilidad en la tasa de cambio como se mencionó anteriormente. Se consideraron también posibles conexiones con factores externos, analizando relaciones con variables económicas, políticas o comerciales que podrían haber influido en su comportamiento.
En resumen, el análisis proporcionó una comprensión integral de la TRM desde el 2000 hasta el 2024, destacando tendencias dominantes, periodos de volatilidad y posibles influencias externas. Estos hallazgos son fundamentales para comprender la evolución de la TRM a lo largo del tiempo.
2. ¿Es necesario acortar la información teniendo en cuenta que la TRM ha variado tanto en 20 años? Sustente su respuesta con fundamentos financieros o económicos.
## 1% 5% 10% 50% 75% 90% 95% 99%
## 1762.380 1791.625 1838.275 2389.750 3054.020 3856.000 4093.180 4802.480
## 1% 5% 10% 50% 75% 90%
## -0.016723469 -0.008985171 -0.005719345 0.000000000 0.001295553 0.005983632
## 95% 99%
## 0.009561866 0.019031630
## 5% 95%
## -0.008985171 0.009561866
# Corte
breaks<-c(min(rendimiento)-0.0000001,-0.01)
corte<-cut(rendimiento,breaks)
tabla<-table(corte)
print(tabla)## corte
## (-0.0562,-0.01]
## 359
## corte
## (-0.0562,-0.01]
## 0.04072604
# Histograma de Rendimientos (Supuesto de normalidad)
hist(rendimiento, breaks = 50, col = "#465cb3", main = "Histograma de rendimientos", freq = FALSE, xlim = c(-0.02,0.02))
curve(dnorm(x,mean=mean(rendimiento),sd=sd(rendimiento)),-0.02,0.02,add = T,col="blue")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(rendimiento),sd=sd(rendimiento))## [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
## 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
## [1] -0.009659891 0.009827239
## [1] 0.04435248
# Resumen estadístico de los rendimientos
ResumenEstadisticoTRMRendimiento<- data.frame(
Minimo = min(rendimiento),
Maximo = max(rendimiento),
Media = mean(rendimiento),
Desviacion = sd(rendimiento),
Sesgo = skewness(rendimiento),
Curtosis = kurtosis(rendimiento)
)
knitr::kable(ResumenEstadisticoTRMRendimiento)| Minimo | Maximo | Media | Desviacion | Sesgo | Curtosis |
|---|---|---|---|---|---|
| -0.0562194 | 0.0593067 | 8.37e-05 | 0.0059237 | 0.2697206 | 9.808365 |
Teninedo en cuenta la gran variación que la Tasa de Cambio Representativa del Mercado (TRM) ha experimentado en los últimos 20 años, ciertos momentos históricos pueden no reflejar la totalidad del comportamiento de la TRM, ya que algunos factores que afectaron la tasa en el pasado pueden no ser relevantes de su comportamiento actual.
Considerar con mayor importancia los valores más recientes es una mejor estrategia. Dado que la TRM puede estar influenciada por eventos políticos, económicos y financieros de actualidad, otorgar mayor peso a los datos más recientes puede ofrecer una representación más precisa de la realidad del momento. Si bien la muestra diaria proporciona una perspectiva detallada, el cálculo del precio promedio puede conducir a un valor de TRM que no necesariamente refleja la realidad del mercado
Estimación de escenarios
Sabiendo que el valor del activo es al día de hoy, estime un intervalo de confianza del 95% para el valor en pesos de una importación de 500.000 USD. ¿Cuál es la probabilidad de obtener una perdida de hasta un 3% en un día? y la probabilidad de ganar hasta un 5% en un día?
# Probabilidad de pérdida de hasta un 3% en un día
Tres<-pnorm(-0.03,mean =mean(rendimiento),sd=sd(rendimiento))
print("Hay una probabilidad pérdida de hasta un 3% en un día de ")
Tres
# Probabilidad de ganar hasta un 5% en un día
Cinco<-1-pnorm(0.05,mean =mean(rendimiento),sd=sd(rendimiento))
print("Hay una probabilidad de ganar hasta un 5% en un día")
Cinco
# ¿Si usted invierte 10.000.000 COP cual es la probabilidad de obtener perdidas entre -500.000 Y 500.000 COP en un día?
Prop = 500000/10000000
Inv<-pnorm(Prop,mean =mean(rendimiento),sd=sd(rendimiento))
print("La probabilidad de obtener perdidas entre -500.000 Y 500.000 COP en un día es de ")
Inv## [1] "Hay una probabilidad pérdida de hasta un 3% en un día de "
## [1] 1.901571e-07
## [1] "Hay una probabilidad de ganar hasta un 5% en un día"
## [1] 0
## [1] "La probabilidad de obtener perdidas entre -500.000 Y 500.000 COP en un día es de "
## [1] 1
** Descripción de actividad**
Usted toma una posición corta en 10 contratos de futuros de la TRM (TRMH24F) y que tienen un precio actual de 4198 COP por cada USD. Sabiendo que cada contrato es de 50.000 USD y que usted deposita 150.000.000 de COP en la cuenta de margen, realice una simulación de Montecarlo con 10.000 iteraciones bajo el supuesto de que los rendimientos continuos mensuales del futuro, siguen una distribución normal con media de 1% y desviación estándar del 3%, para determinar:
# Leer Datos
TRM_FUTURO<-read.table(file = "futuros_TRM.txt", header = TRUE, sep = "")
F_rendimiento<-diff(log(TRM_FUTURO[,"F_TRM"]))
# Simulacion
N=10000
Trm_Simulado=matrix(,90,N)
TRM_Inicial=4198
Trm_Simulado[1,]=TRM_Inicial
for(j in 1:N){
for(i in 2:90){
Trm_Simulado[i,j]=TRM_Inicial*exp(rnorm(1,mean =mean(F_rendimiento),sd=sd(F_rendimiento)))
}
}
matplot(Trm_Simulado,type = "l", col = "gray", main="FUTURO TRM SIMULADA")Trm_Simulado<-t(Trm_Simulado)
#Posicion en corto
Posicion<-Trm_Simulado[,90]-Trm_Simulado[,1]
Trm_Simulado<-cbind(Trm_Simulado,Posicion)
sum(Trm_Simulado[,90]>0)
sum(Trm_Simulado[,90]<0)
mean(Trm_Simulado[,90])
sd(Trm_Simulado[,90])
# Cantidad de cortos y largos obtenidos
largos=sum(Trm_Simulado[,91]>0)
cortos<-N-largos
largos/N*100
cortos/N*100
# Promedio de largos y cortos obtenidos
promlargos<-0
for(k in 1:N) {
if (Trm_Simulado[k,91]>0) {promlargos=promlargos+Trm_Simulado[k,91]}
}
LargoPayoff<-(promlargos/largos)*10000
promcortos<-0
for(k in 1:N) {
if (Trm_Simulado[k,91]<0) {promcortos=promcortos+Trm_Simulado[k,91]}
}
CortoPayoff<-(promcortos/-cortos)*10000
print("Si se toma una posición de largo, la cantidad de largos obtenida es: ")
largos
print("Si se toma una posición de corto, la cantidad de cortos obtenida es: ")
cortos## [1] 10000
## [1] 0
## [1] 4193.948
## [1] 49.4066
## [1] 46.41
## [1] 53.59
## [1] "Si se toma una posición de largo, la cantidad de largos obtenida es: "
## [1] 4641
## [1] "Si se toma una posición de corto, la cantidad de cortos obtenida es: "
## [1] 5359
Se plantea la liquidación diaria del Derivado TRMH24F, el cuál se calculó bajo el siguiente procedimiento
# ------------------------------------------------------------------------------
# Definicion de variables
ndecontratos<-10
nominaldelc<-50000
precioini<-TRM_Inicial
garantiainicial<-0.35
mantenimiento<-0.18
# Formulas iniciales
ExposicionTotal<-ndecontratos*nominaldelc*precioini
vlrGarantiaInicial<-garantiainicial*ExposicionTotal
vlrGarantiaMinima<-mantenimiento*vlrGarantiaInicial
Apalancamiento<- ExposicionTotal/vlrGarantiaInicial
#Tabla de Liquidacion
tablaliq<-TRM_FUTURO
Dif_FTrm<-diff(tablaliq[,3])
Dif_FTrm<-append(0,Dif_FTrm)
tablaliq<-cbind(tablaliq,(Dif_FTrm*ndecontratos*nominaldelc))
# Nombres de Columnas
colnames(tablaliq) <- c("fecha","TRM","Futuro","LiquidacionDiaria")
# Calculo Tabla Auxiliar Margen y llamado al margen
margen<-matrix()
tabaux<-matrix()
llamado_margen<-matrix()
for (i in 1:(nrow(tablaliq))) {
# Tabla Auxiliar
tabaux[1]=vlrGarantiaInicial
tabaux[i+1] <- tabaux[i] + tablaliq$LiquidacionDiaria[i+1]
# Llamado al Margen
llamado_margen[i] <- if(tabaux[i]<vlrGarantiaMinima){vlrGarantiaInicial-tabaux[i]}
else{0}
# Margen
margen[i]<-tabaux[i]+llamado_margen[i]
}
margen<-na.omit(margen)
tablaliq<-cbind(tablaliq,margen,llamado_margen,Dif_FTrm)
knitr::kable(tail(tablaliq, 15))| fecha | TRM | Futuro | LiquidacionDiaria | margen | llamado_margen | Dif_FTrm | |
|---|---|---|---|---|---|---|---|
| 82 | 31/01/2024 | 3925.60 | 3959.00 | 415000 | 567595000 | 0 | 0.83 |
| 83 | 1/02/2024 | 3915.56 | 3916.80 | -21100000 | 546495000 | 0 | -42.20 |
| 84 | 2/02/2024 | 3889.05 | 3966.00 | 24600000 | 571095000 | 0 | 49.20 |
| 85 | 5/02/2024 | 3928.11 | 3995.00 | 14500000 | 585595000 | 0 | 29.00 |
| 86 | 6/02/2024 | 3975.74 | 3974.80 | -10100000 | 575495000 | 0 | -20.20 |
| 87 | 7/02/2024 | 3950.57 | 3989.81 | 7505000 | 583000000 | 0 | 15.01 |
| 88 | 8/02/2024 | 3962.23 | 3980.20 | -4805000 | 578195000 | 0 | -9.61 |
| 89 | 9/02/2024 | 3954.68 | 3943.10 | -18550000 | 559645000 | 0 | -37.10 |
| 90 | 12/02/2024 | 3926.08 | 3939.50 | -1800000 | 557845000 | 0 | -3.60 |
| 91 | 13/02/2024 | 3915.28 | 3945.00 | 2750000 | 560595000 | 0 | 5.50 |
| 92 | 14/02/2024 | 3929.00 | 3937.15 | -3925000 | 556670000 | 0 | -7.85 |
| 93 | 15/02/2024 | 3916.61 | 3928.00 | -4575000 | 552095000 | 0 | -9.15 |
| 94 | 16/02/2024 | 3909.89 | 3928.90 | 450000 | 552545000 | 0 | 0.90 |
| 95 | 19/02/2024 | 3917.84 | 3933.06 | 2080000 | 554625000 | 0 | 4.16 |
| 96 | 20/02/2024 | 3917.84 | 3941.35 | 4145000 | 558770000 | 0 | 8.29 |
Plantear un intervalo de predicción del 90% del valor de la cuenta de margen para dentro de un mes.
## [1] 611004219 826890114
La probabilidad de perder mas de 10.000.000 COP en un mes
ProporcionPerdida <- 10000000/150000000
Prob10Perdida<-pnorm(ProporcionPerdida,mean=mean(head(tablaliq$margen,30)),sd=sd(head(tablaliq$margen,30)))
print("La probalidad de perder mas de 10.000.000 COP en un mes es de: ")## [1] "La probalidad de perder mas de 10.000.000 COP en un mes es de: "
## [1] 3.128559e-28
Si el margen mínimo es de 130.000.000 COP ¿Cuál es la probabilidad de ser llamado al margen?
# Formulas iniciales
ExposicionTotal<-ndecontratos*nominaldelc*precioini
vlrGarantiaInicial<-garantiainicial*ExposicionTotal
vlrGarantiaMinima<-130000000
Apalancamiento<- ExposicionTotal/vlrGarantiaInicial
#Tabla de Liquidacion
tablaliq<-TRM_FUTURO
Dif_FTrm<-diff(tablaliq[,3])
Dif_FTrm<-append(0,Dif_FTrm)
tablaliq<-cbind(tablaliq,(Dif_FTrm*ndecontratos*nominaldelc))
# Nombres de Columnas
colnames(tablaliq) <- c("fecha","TRM","Futuro","LiquidacionDiaria")
# Calculo Tabla Auxiliar Margen y llamado al margen
margen<-matrix()
tabaux<-matrix()
llamado_margen<-matrix()
for (i in 1:(nrow(tablaliq))) {
# Tabla Auxiliar
tabaux[1]=vlrGarantiaInicial
tabaux[i+1] <- tabaux[i] + tablaliq$LiquidacionDiaria[i+1]
# Llamado al Margen
llamado_margen[i] <- if(tabaux[i]<vlrGarantiaMinima){vlrGarantiaInicial-tabaux[i]}
else{0}
# Margen
margen[i]<-tabaux[i]+llamado_margen[i]
}
margen<-na.omit(margen)
tablaliq<-cbind(tablaliq,margen,llamado_margen,Dif_FTrm)
# Cantidad de veces que se llamó al margen
LlamadoOcurrido<- sum(tablaliq$llamado_margen != 0)
print("La cantidad de veces que se llamó al margen fue")## [1] "La cantidad de veces que se llamó al margen fue"
## [1] 0
# Probabilidad de que se llame al margen
Prob_LlamadoMargen<-(LlamadoOcurrido/nrow(tablaliq))*100
print("La probabilidad de que se llame al margen es de")## [1] "La probabilidad de que se llame al margen es de"
## [1] 0
# Carga de la TRM
TRM_datos<-read.csv(file = "trm2000.csv", header = TRUE, sep = ";")
class(TRM_datos[,"Fecha"])
TRM_datos[,"Fecha"]<-as.Date(TRM_datos[,"Fecha"],format = "%d/%m/%Y")
class(TRM_datos[,"Fecha"])
rendimiento<-diff(log(TRM_datos[,"TRM"]))
# Simulacion Browniano Geometrico
mu= mean(rendimiento)*252
sigma= sd(rendimiento)*sqrt(252)
T= 5/12 # 5 meses
delta_t=1/252
N=T/delta_t
M= 1000 # Numero de simulaciones
TRM= matrix(ncol=M, nrow = (N+1))
TRM[1,]=4435.84
for(i in 1:M){
for (t in 2:(N+1)){
TRM[t,i]=TRM[(t-1),i]*exp((mu-sigma^2/2)*delta_t+sigma*sqrt(delta_t)*rnorm(1))
}
}Cuotas_USD=c(91738,90992,90246,89500,88754)
Cuotas_COP=TRM[2,]*Cuotas_USD[1]
for(j in 2:length(Cuotas_USD)){
Cuotas_COP=rbind(Cuotas_COP,TRM[j+1,]*Cuotas_USD[j])
}
media_cuotas=vector()
volatilidad_cuotas=vector()
percentil_5_cuotas=vector()
percentil_95_cuotas=vector()
for(l in 1:5){
media_cuotas[l]=mean(TRM[l+1,]*Cuotas_USD[l])
volatilidad_cuotas[l]=sd(TRM[l+1,]*Cuotas_USD[l])
percentil_5_cuotas[l]=quantile(TRM[l+1,]*Cuotas_USD[l],0.05)
percentil_95_cuotas[l]=quantile(TRM[l+1,]*Cuotas_USD[l],0.95)
}
matplot(Cuotas_COP,type = "l", col="#7AC5CD", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas, type = "l")
lines(percentil_95_cuotas, type = "l")
lines(media_cuotas, type = "l")Cobertura<-0.7
Precio_Entrega= 4500 # Valor Futuro TRM al dia del 17 de febrero del 2023:4907.35
Utilidad_POR_USD=TRM[-1,]-Precio_Entrega
matplot(Utilidad_POR_USD,type="l", col="#7AC5CD")Utilidad_total=Utilidad_POR_USD[1,]*Cuotas_USD[1]*0.8
for(j in 2:length(Cuotas_USD)){
Utilidad_total=rbind(Utilidad_total,Utilidad_POR_USD[j,]*Cuotas_USD[j]*0.8)
}
matplot(Utilidad_total,type="l", col = "#79CDCD")Cuotas_COP_CON_C=Cuotas_COP-Utilidad_total
media_cuotas_COP_CON_C=vector()
volatilidad_cuotas_COP_CON_C=vector()
percentil_5_cuotas_COP_CON_C=vector()
percentil_95_cuotas_COP_CON_C=vector()
for(l in 1:5){
media_cuotas_COP_CON_C[l]=mean(Cuotas_COP_CON_C[l,])
volatilidad_cuotas_COP_CON_C[l]=sd(Cuotas_COP_CON_C[l,])
percentil_5_cuotas_COP_CON_C[l]=quantile(Cuotas_COP_CON_C[l,],0.05)
percentil_95_cuotas_COP_CON_C[l]=quantile(Cuotas_COP_CON_C[l,],0.95)
}
matplot(Cuotas_COP_CON_C,type = "l", col="#79CDCD", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas_COP_CON_C, type = "l")
lines(percentil_95_cuotas_COP_CON_C, type = "l")
lines(media_cuotas_COP_CON_C, type = "l")"Volatilidad de cada cuota con cobertura en millones de COP"
print(volatilidad_cuotas_COP_CON_C/1000000)# Beneficio real Sin Cobertura
Fechas_pago=c("2022-10-17","2022-11-17","2022-12-17","2023-01-17","2023-02-17")
TRM_OBSERVADA=vector()
for(j in 1:5){
TRM_OBSERVADA[j]=TRM_datos[which(TRM_datos[,1]==Fechas_pago[j]),2]
}
Cuota_Real_COP=TRM_OBSERVADA*Cuotas_USD
matplot(Cuotas_COP,type = "l", col="#8EE5EE", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas, type = "l")
lines(percentil_95_cuotas, type = "l")
lines(media_cuotas, type = "l")
lines(Cuota_Real_COP, type = "l",lwd=2)## [1] "Cuota Real COP"
## [1] 425373511 447926318 433404610 420112105 440781653
## [1] "Beneficio SIN cobertura"
Utilidad_POR_USD_Observada=TRM_OBSERVADA-Precio_Entrega
Utilidad_total_observada= Cuotas_USD*Utilidad_POR_USD_Observada
# Beneficio real Con Cobertura
Valor_Observado_Cuotas_con_cobertura=Cuota_Real_COP-Utilidad_total_observada
matplot(Cuotas_COP_CON_C,type = "l", col="#8EE5EE", main="Estimado Cuotas en COP", ylab = "Valor Cuota", xlab = "cuota")
lines(percentil_5_cuotas_COP_CON_C, type = "l")
lines(percentil_95_cuotas_COP_CON_C, type = "l")
lines(media_cuotas_COP_CON_C, type = "l")
lines(Valor_Observado_Cuotas_con_cobertura, type = "l", lwd=2) # Definicion de variables
ndecontratos<-1
nominaldelc<-1790000*0.7
precioini<-4066 # TRM al momento 0
# Operar con garantía de TRM (7%) y margen de mantenimiento de 50%
garantiainicial<-0.063
mantenimiento<-0.5
# Formulas iniciales
ExposicionTotal<-ndecontratos*nominaldelc*precioini
vlrGarantiaInicial<-garantiainicial*ExposicionTotal
vlrGarantiaMinima<-mantenimiento*vlrGarantiaInicial
Apalancamiento<- ExposicionTotal/vlrGarantiaInicial
#Tabla de Liquidacion
TRM_Filas <- TRM[c(22, 43, 64, 85, 106), ]
Promedio_Filas <- rowMeans(TRM_Filas)
TRM_Promedio <- data.frame(Futuro_Promedio = Promedio_Filas)
tablaliq<-TRM_Promedio
TRM_Promedio$Fechas_Pago <- Fechas_pago
TRM_Promedio$TRM_Spot <-TRM_OBSERVADA
TRM_Promedio <- TRM_Promedio[, c("Fechas_Pago", "TRM_Spot", "Futuro_Promedio")]
tablaliq<-TRM_Promedio
Dif_FTrm<-diff(tablaliq[,3])*-1
Dif_FTrm<-append(0,Dif_FTrm)
tablaliq<-cbind(tablaliq,(Dif_FTrm*ndecontratos*nominaldelc))
# Nombres de Columnas
colnames(tablaliq) <- c("Fecha","TRM","Futuro","LiquidacionDiaria")
# Calculo Tabla Auxiliar Margen y llamado al margen
margen<-matrix()
tabaux<-matrix()
llamado_margen<-matrix()
for (i in 1:(nrow(tablaliq))) {
# Tabla Auxiliar
tabaux[1]=vlrGarantiaInicial
tabaux[i+1] <- tabaux[i] + tablaliq$LiquidacionDiaria[i+1]
# Llamado al Margen
llamado_margen[i] <- if(tabaux[i]<vlrGarantiaMinima){vlrGarantiaInicial-tabaux[i]}
else{0}
# Margen
margen[i]<-tabaux[i]+llamado_margen[i]
}
margen<-na.omit(margen)
tablaliq<-cbind(tablaliq,margen,llamado_margen,Dif_FTrm)
knitr::kable(tail(tablaliq, 15))| Fecha | TRM | Futuro | LiquidacionDiaria | margen | llamado_margen | Dif_FTrm |
|---|---|---|---|---|---|---|
| 2022-10-17 | 4636.83 | 4437.311 | 0 | 320965974 | 0 | 0.000000 |
| 2022-11-17 | 4922.70 | 4441.430 | -5161719 | 315804255 | 0 | -4.119488 |
| 2022-12-17 | 4802.48 | 4445.922 | -5627731 | 310176524 | 0 | -4.491405 |
| 2023-01-17 | 4693.99 | 4447.207 | -1610547 | 308565978 | 0 | -1.285353 |
| 2023-02-17 | 4966.33 | 4460.471 | -16619745 | 291946233 | 0 | -13.263962 |
VecesMargen<- sum(llamado_margen > 0)
ProbVecesMargen <- VecesMargen / nrow(tablaliq)
"Dado que nunca se llama al margen, la probabilidad de que se llamé nuevamente al margen es de 0%"## [1] "Dado que nunca se llama al margen, la probabilidad de que se llamé nuevamente al margen es de 0%"
# Probabilidad máxima deseada
probabilidad_maxima <- 0.01
# Calcular el saldo inicial necesario usando la distribución binomial inversa
saldo_inicial <- qbinom(probabilidad_maxima, size = nrow(tablaliq), prob = 0) * (vlrGarantiaMinima)
print(saldo_inicial)
"Dado que en la cantidad de fechas de liquidación nunca se debe recurrir al margen, es decir, el flujo siempre da un valor por encima del valor de garantía mínima, y la probabilidad de llamar al margen es de 0%, la posibilidad de que que se llame al margen nunca llega a ser del 1%."## [1] 0
## [1] "Dado que en la cantidad de fechas de liquidación nunca se debe recurrir al margen, es decir, el flujo siempre da un valor por encima del valor de garantía mínima, y la probabilidad de llamar al margen es de 0%, la posibilidad de que que se llame al margen nunca llega a ser del 1%."