Santiago López, Esteban Moncada, Juana Marín

Ejercicio Estadístico


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

Análisis de los resultados

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.

#Percentiles

quantile(TRM_datos[,"TRM"],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
quantile(rendimiento,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
quantile(rendimiento, c(0.05,0.95))
##           5%          95% 
## -0.008985171  0.009561866
qqnorm(rendimiento)
qqline(rendimiento)

# Corte 
breaks<-c(min(rendimiento)-0.0000001,-0.01)
corte<-cut(rendimiento,breaks)
tabla<-table(corte)
print(tabla)
## corte
## (-0.0562,-0.01] 
##             359
probabilidad<-tabla/length(rendimiento)
print(probabilidad)
## 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
quantile(rendimiento, 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(rendimiento),sd=sd(rendimiento))
## [1] -0.009659891  0.009827239
pnorm(-0.01,mean =mean(rendimiento),sd=sd(rendimiento))
## [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

Ejercicio Simulación Montecarlo


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

Liquidación del futuro

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.

qnorm(c(0.05,0.95),mean = mean(head(tablaliq$margen,30)),sd=sd(head(tablaliq$margen,30)))
## [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: "
Prob10Perdida
## [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"
LlamadoOcurrido
## [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"
Prob_LlamadoMargen
## [1] 0

Práctica sobre MBG y precios Futuros

Primera parte


Segunda parte

  1. Proyecte la TRM por medio de simulación MBG con 1000 iteraciones, los parámetros del ejercicio se ejecutan a través de los valores históricos de desviación estándar, promedio de los rendimientos de la serie
# 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))
  }
}
  1. Simule el flujo de caja total esperado para las cuotas sin cobertura de un futuro
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")

"Volatilidad de cada cuota en millones"
print(volatilidad_cuotas/1000000)
  1. Simule el flujo de caja total esperado para las cuotas con cobertura de un futuro
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)
  1. Obtenga los beneficios reales de las series de la pregunta 2 y 3
# 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)

"Cuota Real COP"
## [1] "Cuota Real COP"
print(Cuota_Real_COP)
## [1] 425373511 447926318 433404610 420112105 440781653
"Beneficio SIN cobertura"
## [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) 

  1. Realizar la cuenta de margen con el flujo de caja operado
# 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
  1. ¿Cuál es la probabilidad de ser llamado al margen si solo se deposita en la cuenta el margen inicial?
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%"
  1. ¿Cuánto debería de haber en la cuenta de margen al inicio para que la probabilidad de ser llamado al margen antes de cubrir el primer flujo sea menor al 1%?
# 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%."