Valor en Riesgo (VaR) en R

Se utiliza un archivo que tiene los rendimientos diarios de 4 acciones. Se calcula el VaR para cada acción suponiendo una inversión de $100 000 000  en cada una. Se calcula el VaR para un portafolio formado por las 4 acciones. También se calcula el VaR utilizando simulación histórica, por bootstrap y por simulación Montecarlo.
Puede consultar el libro "Introducción al riesgo financiero" en  

https://1drv.ms/b/s!Aj-hHTVbsx01h4JmNiA9O57JQuANWg?e=l4IFbm


A=read.csv("F:/U162/RIESGO/datos162.csv",header=TRUE,dec=".")
attach(A)
View(A)
n=nrow(A);n

t=1
z=qnorm(.99);z
s=c(100000000,100000000,100000000,100000000)
w=s/sum(s);w
rend.medio=0
varianza=0
desv.std=0
VaR.indiv=0
for(i  in 1: 4)
{
  aux0=mean(A[,i],na.rm=TRUE)
  aux1=var(A[,i],na.rm=TRUE)
  aux2=z*sqrt(t)*s[i]*sqrt(aux1)
  rend.medio[i]=aux0
  varianza[i]=aux1
  desv.std[i]=sqrt(aux1)
  VaR.indiv[i]=aux2
}
B=rbind(rend.medio,varianza,desv.std,VaR.indiv)
colnames(B)=c("bancolombia","EEB","Grupo Argos","Nutresa");B
VaR.indiv
Total=sum(VaR.indiv)
Total
covar=cov(A[1:4])
covar
corre<-cor(A[1:4])
corre
### Rendimiento, Varianza Y VaR del Portafolio ###
rend.P=w%*%rend.medio
varia.P=t(w)%*%covar%*%w
VaR.P=z*sum(s)*sqrt(t)*sqrt(varia.P)
C=rbind(rend.P,varia.P,VaR.P)
colnames(C)=c("Portafolio")
rownames(C)=c("Rendimiento.P","Varianza.P","VaR.P");C

######

##simulación historica

fa<-1+bancolo; fa
sa<-100000000
for(i in 2:n){
sa[i]<-sa[i-1]*fa[i-1]
}
sa
m<-n-1
ut<-sa[1]
for(j in 1:m){
ut[j]=sa[j+1]-sa[j]
}
ut
hist(ut,main="VaR 0.99",ylab="Frecuencia")
VaR<-quantile(ut,c(0.01));VaR
abline(v=quantile(ut,c(0.01)),col="red")
legend(VaR,130,"VaR",col="blue")
###












#portafolio
rend=0.25*bancolo*0.25*eeb+0.25*gargos+0.25*nutresa
rend
fac<-1+rend
fac
saldo<-400000000
for(i in 2:n){
saldo[i]<-saldo[i-1]*fac[i-1]
}
saldo
m<-n-1
ut<-saldo[1]
for(j in 1:m){
util[j]=saldo[j+1]-saldo[j]
}
util
hist(util,main="VaR 0.99",ylab="Frecuencia")
VaR<-quantile(util,c(0.01));VaR
abline(v=quantile(util,c(0.01)),col="red")
legend(VaR,130,"VaR",col="blue")














muestras <- lapply(1:20000, function(i)
  sample(ut, 200, replace=T))
VaRes<-sapply(muestras,quantile,c(0.01))
VaRes
VaR2<-mean(VaRes)
VaR2
hist(VaRes,main="VaR por Bootstrap",ylab="Frecuencia")
abline(v=VaR2,col="red")
legend(-17000,6000,"VaR")














###bootstrap portafolio

muestras <- lapply(1:20000, function(i)
  sample(util, 200, replace=T))
VaRes<-sapply(muestras,quantile,c(0.01))
VaRes
VaR2<-mean(VaRes)
VaR2
hist(VaRes,main="VaR por Bootstrap",ylab="Frecuencia")
abline(v=VaR2,col="red")
legend(VaR2,4000,"VaR")














##Montecarlo
# Primero los datos.
mu=0.00391657; sigma=0.0595001; t=10000; dt=1/t
# Particularmente estos son cuando t=1.
v.1=400000000 
Ut=0
# Las matrices que guardarán los datos que interesan. 
Vp=rep(v.1,t)

# Creamos el entorno gráfico.
plot(c(1,t),c(v.1-20000000,v.1+20000000),col="white",ylab="Vp",xlab="Días",main="Simulación")
abline(h=400000000,lty=2,col="red"); 

# El número de simulaciones que queremos.
n=1

for(j in 1:n)
{
  E=rnorm(t,0,1)
  for(i in 2:t)
  {
    Vp[i]=Vp[i-1]+Vp[i-1]*(mu*dt+sigma*E[i]*sqrt(dt))
    Ut[i]=Vp[i]-Vp[i-1]
  }
  lines(Vp,col=j+1)
}














# El Valor del portafolio para cada una de las "n" simulaciones.
#print("Un vector de posibles VaR para la acción sería:"); Vp

A=cbind(E,Vp,Ut)
colnames(A)=c("Epsilon","Vp","Utilidad"); A
hist(Vp,breaks=7,main="Valor del portafolio")
hist(Ut,breaks=7,main="Utilidad")
VaR=quantile(Ut,c(0.01));VaR
abline(v=quantile(Ut,c(0.01)),col="red")
legend(VaR,3000,"VaR")


No hay comentarios.:

Publicar un comentario