Informe de estrategia de cobertura del riesgo de tasa de cambio USDCOP a través de contratos Forward para cubrir los pagos de un crédito en Dólares.

1 CONTEXTO DEL PROBLEMA:

Contexto del problema: La empresa AAA adqurió un crédito en Dolares el cual fue desembolsado el 30 - 11 de 2009 La información facial del crédito es la siguiente: Monto del prestamo: 47378846 USD. Tasa de interés: 14,1 % Efectiva Anual. Numero de cuotas:48 Código Frecuencia anual de pago de interés mas capital : 1

Código Frecuencia anual de pago de interés mas capital Numero de pagos por año 1 2 2 4 3 6 4 12

La modalidad del crédito es de abono constante a capital. Se debe Proponer una estrategia de cobertura para los 6 primeros pagos de cuotas a través de forward. Por política la razón de cobertura debe de ser del 73 % EL precio de entrega del contrato corresponde al valor de la TRM en la fecha de cobertura.

El intermediario financiero IF le ofrece contratos Forward con un precio de entrega por USD igual al valor de la TRM de la fecha de desembolso del crédito, los cuales serán liquidados financieramente entregando o recibiendo la diferencia entre el valor de la TRM para del día de vencimiento de cada contrato, con el precio de entrega.

2 ANÁLISIS DE LA TRM.

Se tiene una base de datos del valor de la TRM con frecuencia diaria desde 27/11/1991 hasta la fecha

Cargar Datos

Datos_TRM<-read.csv(file = "TRM.csv", header = TRUE)
head(Datos_TRM)
##        Fecha    TRM
## 1 27/11/1991 693.32
## 2 28/11/1991 693.99
## 3 29/11/1991 694.70
## 4 30/11/1991 694.70
## 5  1/12/1991 643.42
## 6  2/12/1991 643.42
# Convertir a formato de fecha la columna "Fecha"

Datos_TRM[,"Fecha"]<-as.Date(Datos_TRM[,"Fecha"],format = "%d/%m/%Y")

3 MUESTRA

Se extrae una muestra de la base de datos desde 2003-01-01 hasta 2010-12-30, dado que en esta fecha se observa un cambio de estructura en la serie, ocasionado por la crisis financiera que comenzó en 2008.

#Seleccion de datos para muestra en un periodo determinado
Inicio_muestra=which(Datos_TRM[,1]=="2002-01-01")
Fin_muestra=which(Datos_TRM[,1]=="2009-11-30")

TRM_2002_2009=Datos_TRM[Inicio_muestra :Fin_muestra,]

library(plotly)
## Loading required package: ggplot2
## 
## 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

3.1 cargar el grafico dinamico

plot_ly(TRM_2002_2009, x = ~Fecha, y=~TRM, type = "scatter" ,mode="line" )
## Warning in arrange_impl(.data, dots): '.Random.seed' is not an integer
## vector but of type 'NULL', so ignored
## A line object has been specified, but lines is not in the mode
## Adding lines to the mode...

3.2 cargo el grafico de los rendimientos de la TRM para el periodo 2003-2010

Rtos_TRM=diff(log(TRM_2002_2009[,"TRM"]))

plot_ly(TRM_2002_2009, x=~TRM_2002_2009[-1,"Fecha"],y=~diff(log(TRM_2002_2009[,"TRM"])), type = "scatter", mode="line")
## A line object has been specified, but lines is not in the mode
## Adding lines to the mode...
summary(Rtos_TRM)
##       Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
## -5.622e-02 -1.399e-03  0.000e+00 -4.747e-05  7.678e-04  4.805e-02
sd(Rtos_TRM)
## [1] 0.006011288

3.3 cargo el histograma de rendimientos

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")

Se observa que en Mayo (TRM: 2292) del año 2002 empieza la TRM a presentar una tendencia alasita (TRM: 2960,77) hasta el mes de Marzo del 2003, cerca del 23% aproximadamente, esto se debe a la recuperación q estaba presentando la economía en estados unidos debido a la crisis presentada de las BURBUJAS.COM.

Este último valor de la TRM fue el más representativo de todo el periodo analizado, sin embargo a partir de esa fecha la TRM presento un rebote en caída el cual hizo que se desplomara en un valor cercano del 24% hasta Marzo del 2006, donde presento una leve recuperación durante el periodo de 4 meses, no obstante se siguió presentando la tendencia a la baja donde presento su valor más bajo 1.748,43 en Junio del 2008, debido a la crisis inmobiliaria que se presentó en EEUU; A partir de esta fecha tuvo una leve recuperación hasta Marzo del 2009 donde creció un 32%.

En cuanto a los Rendimientos de la TRM según el periodo analizado se tiene un valor mínimo de - 0.05622 y un valor máximo de 0.04805, con estos valores valores podemos concluir que observando el rendimiento total del periodo analizado fue del 0.6% , esto se pudo ser causado por la tendencia generalizada a la baja que presento en gran porcentaje la TRM en todo este periodo de tiempo.

4 PROYECCIÓN DE LA TRM.

Para la proyección de la TRM se utiliza simulación de montecarlo a través de un proceso de Wiwiner generalizado, conocido como Modelo Browniano geometrico el cual se presenta a continuación:

??TRMt=TRMt???1??????????t+TRMt???1??????????w??TRMt=TRMt???1??????????t+TRMt???1??????????w

Donde:

??TRMt=TRMt???TRMt???1??TRMt=TRMt???TRMt???1 Representa el cambio de la TRM en un intervalo de tiempo ??t??t entre tt y t???1t???1.

???? Es el valor Esperado de la tasa de crecimiento anual continuo de la TRM.

???? Es la volatilidad anual de los rendimientos de la TRM.

??w??w Es el cambio de un proceso de Wieiner simple entre el momento tt y t???1t???1 ??w=??t?????t??????????????w=??t?????t

??t???N(0,1),??t???N(0,1), cov(??i,??j)=0cov(??i,??j)=0 ???i???j???i???j

4.1 Estimacion de parametros

Se estima ???? como el rendimiento promedio de la muestra seleccionada y ???? se calcula como la volatilidad historica. Para anualización de los parámetros, se asume que la divisa se negocia 250 dias al año.

#media el rendimiento promedio de la muestra seleccionada 
Mu=mean(Rtos_TRM)*250
print(Mu)
## [1] -0.01186727
# Desviacion 
Sigma=sd(Rtos_TRM)*sqrt(250)
print(Sigma)
## [1] 0.0950468

Se espera un decrecimiento anual de 1.18% y la volatilidad anual es del 9.5% anual.

5 SIMULACIÓN DE MONTECARLO

Se realiza una simulación de Montecarlo. Se realizan 10.000 iteraciones a través del modelo Browniano geometrico y los parámetros estimados.

5.1 Simulacion montecarlo de la TRM

#simulacionmontecarlo

TRM_30_NOV_09=Datos_TRM[Fin_muestra,2] 
dt=1/2
Numero_periodos=7
Numero_iteraciones=10000
TRM=matrix(0,Numero_periodos,Numero_iteraciones)
TRM[1,]=TRM_30_NOV_09

for(j in 1:Numero_iteraciones){
for(i in 2:Numero_periodos){
Cambio_TRM=TRM[i-1,j]*(Mu*dt+Sigma*rnorm(1)*sqrt(dt))
    TRM[i,j]=TRM[i-1,j]+Cambio_TRM
  }
}
matplot(TRM, type="l" ,col="deepskyblue")

5.2 Simulación de Montecarlo del Flujo de caja total esperado para cada cuota sin cobertura

Dada la proyección de la TRM, se hace una estimación del valor de las cuotas en COP para cada periodo.

Cuotas_USD=c(4213559,4146340,4079121,4011902,3944684,3877465)


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:6){
  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="lightcyan3", 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")

print("Volatilidad de cada cuota  en millones de COP")
## [1] "Volatilidad de cada cuota  en millones de COP"
## [1] "Volatilidad de cada cuota  en millones de COP"

print(volatilidad_cuotas/1000000)
## [1]  563.9758  781.7244  927.9813 1052.7696 1143.9269 1237.9473

5.3 Simulación de Montecarlo de los pagos de cuotas con cobertura

Dado que quien tiene una deuda en USD tiene una posición corta en la tasa de cambio, se debe de tomar una posición larga en los contratos Forward para hacer la cobertura.

#Simulación de Montecarlo de los pagos de cuotas con cobertura

proporcion_cobertura=0.73
Precio_Entrega=1997.47
Utilidad_POR_USD=TRM[-1,]-Precio_Entrega
matplot(Utilidad_POR_USD,type="l", col="gray")

Utilidad_total=Utilidad_POR_USD[1,]*Cuotas_USD[1]*0.73

for(j in 2:length(Cuotas_USD)){
  Utilidad_total=rbind(Utilidad_total,Utilidad_POR_USD[j,]*Cuotas_USD[j]*0.73)
}

matplot(Utilidad_total,type="l", col = "lightblue")

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:6){
  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="lightcyan3", 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")

print("Volatilidad de cada cuota con cobertura  en millones de COP")
## [1] "Volatilidad de cada cuota con cobertura  en millones de COP"
## [1] "Volatilidad de cada cuota con cobertura  en millones de COP"
print(volatilidad_cuotas_COP_CON_C/1000000)
## [1] 152.2735 211.0656 250.5549 284.2478 308.8603 334.2458
#Valor real observado del pago de cuotas en COP

6 RESULTADOS

En esta sección se presentan los resultados observados de la cobertura

6.1 Valor real observado del pago de cuotas en COP

Fechas_pago=c("2010-05-30","2010-11-30","2011-05-30","2011-11-30","2012-05-30","2012-11-30")

TRM_OBSERVADA=vector()
for(j in 1:6){TRM_OBSERVADA[j]=Datos_TRM[which(Datos_TRM[,1]==Fechas_pago[j]),2]}

Cuota_Real_COP=TRM_OBSERVADA*Cuotas_USD


matplot(Cuotas_COP,type = "l", col="lightcyan3", 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)

print(Cuota_Real_COP)
## [1] 8307242246 7948367926 7413149758 7892133376 7174670153 7048959947

6.2 Beneficio Real Observado

Utilidad_POR_USD_Observada=TRM_OBSERVADA-Precio_Entrega
Utilidad_total_observada= Cuotas_USD*Utilidad_POR_USD_Observada

6.3 Valor Real cuota con cobertura

Valor_Observado_Cuotas_con_cobertura=Cuota_Real_COP-Utilidad_total_observada

matplot(Cuotas_COP_CON_C,type = "l", col="lightcyan3", 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)