WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

A partir de quelles valeurs du skewness et du kurtosis, la Value-at-Risk de Cornish-Fisher est-elle préférable à  la VaR normale?

( Télécharger le fichier original )
par Mehdi DRISSI BOUTAYBI
Université de Bordeaux - Master Ingénierie des risques économiques et financiers 2016
  

précédent sommaire

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Conclusion

D'après toutes les simulations qui ont étéréalisées, il s'est avéréque : >Pour un skewness non significativement différent de 0 (i.e. = 0), et un kurtosis compris entre [3 : 4.2], la VaR Normale est adaptée.

Ce résultat a étédémontrédans toutes les simulations de lois qui respectent ces critères. Par ailleurs, dès que le skewness est différent de 0, la VaR Normale devient très sensible et semble inadaptée dans les simulations Monte-Carlo.

>La loi d'extremum généralisée semble échapée à cette règle, la 1 ère simulation de cette loi est sans doute biaisée. Il aurait fallu faire une simulation d'un nombre assez grand (>15) ou essayer de trouver d'autres alternatives.

>Pour un skewness 0.05 et un kurtosis 5.7, la VaR de Cornish-Fisher est préférable à la VaR Normale.

>Pour un skewness -1.3 et un kurtosis 5, la VaR de Cornish-Fisher est préférable à la VaR
Normale.

>Pour un skewness 0.5 et un kurtosis 3.2, la VaR de Cornish-Fisher est préférable à la VaR Normale.

>Pour un skewness -0.16 et un kurtosis 3, la VaR de Cornish-Fisher est préférable à la VaR Normale.

>Pour un skewness 0.1 et un kurtosis 6.4, la VaR de Cornish-Fisher est préférable à la VaR Normale.

>Pour un skewness -0.04 et un kurtosis 3.14, la VaR de Cornish-Fisher est préférable à la VaR Normale.

>Etant donnéque c'est des simulations Monte-Carlo, il aurait étémieux de faire 99 simulations mais celàprendrait beaucoup de temps et il faudrait des machines très performantes pour mettre celàen oeuvre.

54

55

Bibliographie

[1] Hurlin C. et Tokpavi S. (2008), Une Evaluation des Procédures de Backtesting : Tout va pour le Mieux dans le Meilleur des Mondes», Finance, vol 29.

[2] Méthodes de Monte-Carlo avec R, Livre de Christian Robert et George Casella

[3] www.cairn.info/revue-economique-2007-3-page-599.htm

[4] Les méthodes du bootstrap dans les modèles de régression, Emmanuel Flachaire

[5] Approximation de Cornish-Fisher, wikipedia

[6] www.ressources-actuarielles.net/

[7] Christophe Hurlin, Site Value-at-Risk

for(k in 1:N) {

ANNEXE

Code R

# load libraries library(PerformanceAnalytics) library(quantmod) library(rugarch) library(car)

library(FinTS)

library(GeneralizedHyperbolic) library(sn)

library(evd)

library(fGarch) library(triangle) library(fBasics) library(moments)

n<-10000 #nombre d'observation N<- 2 #nombre de simulation

rt <- rnorm(n,0.01/252,0.05)

plot(rt, type = "l", col = "steelblue")

skewness(rt)

kurtosis(rt)

agostino.test(rt) anscombe.test(rt)

#Matrice de simulation Monte-Carlo

sortie<- data.frame(matrix(rep(0,4*N),N,4))

colnames(sortie) = c("Normal:Test Kupiec:uc.LRp","Normal:Test Christoffersencc.LRp", "Modified:Test Kupiec:uc.LRp", "Modified:Test Christoffersen:cc.LRp")

########################################################################################

#### Entrer la loi ####

########################################################################################

rt <-rskewlap(n, mu = 0.0000321, alpha = 1/23, beta = 1/22) options(digits=4)

# convertir la simulation en time series (pour l'adapter au backtesting) x.Date <- as.Date("2003-02-01") + c(1:10000)

ret <- zoo(rt, x.Date)

# backtesting unconditional VaR models # normal VaR, HS and modified HS #

# set up estimation window and testing window

n.obs = length(ret)

w.e = 8000

w.t = n.obs - w.e

alpha = 0.95

# loop over testing sample, compute VaR and record hit rates backTestVaR <- function(x, p = 0.95) {

normal.VaR = as.numeric(VaR(x, p=0.95, method="gaussian")) modified.VaR = as.numeric(VaR(x, p=0.95, method="modified")) ans = c(normal.VaR, modified.VaR)

names(ans) = c("Normal", "Modified")

return(ans)

}

# rolling 1-step ahead estimates of VaR

VaR.results = rollapply(as.zoo(ret), width=w.e,

FUN = backTestVaR, p=0.95, by.column = FALSE,

align = "right")

VaR.results = lag(VaR.results, k=-1)

chart.TimeSeries(merge(ret, VaR.results), legend.loc="topright")

violations.mat = matrix(0, 2, 5)

rownames(violations.mat) = c("Normal", "Modified")

colnames(violations.mat) = c("En1", "n1", "1-alpha", "Percent", "VR")

violations.mat[, "En1"] = (1-alpha)*w.t violations.mat[, "1-alpha"] = 1 - alpha

# Show Normal VaR violations

normalVaR.violations = as.zoo(ret[index(VaR.results), ]) < VaR.results[, "Normal"] violation.dates.normal = index(normalVaR.violations[which(normalVaR.violations)])

# plot violations

plot(as.zoo(ret[index(VaR.results),]), col="blue", ylab="Return",main="Violations normal VaR")

} sortie

abline(h=0)

lines(VaR.results[, "Normal"], col="black", lwd=2)

lines(as.zoo(ret[violation.dates.normal,]), type="p", pch=16, col="red", lwd=2)

for(i in colnames(VaR.results)) {

VaR.violations = as.zoo(ret[index(VaR.results), ]) < VaR.results[, i] violations.mat[i, "n1"] = sum(VaR.violations)

violations.mat[i, "Percent"] = sum(VaR.violations)/w.t

violations.mat[i, "VR"] = violations.mat[i, "n1"]/violations.mat[i, "En1"]

}

violations.mat

VaR.test1 = VaRTest(1-alpha,

actual=coredata(ret[index(VaR.results),]), VaR=coredata(VaR.results[,"Normal"])) names(VaR.test1)

# LR test for correct number of exceedances VaR.test1[1:7]

# LR tests for independence of exceedances VaR.test1[8:12]

# Show modified VaR violations

modifiedVaR.violations = as.zoo(ret[index(VaR.results), ]) < VaR.results[, "Modified"] violation.dates.modified = index(modifiedVaR.violations[which(modifiedVaR.violations)])

# plot violations

plot(as.zoo(ret[index(VaR.results),]), col="blue", ylab="Return",main="Violations modified VaR")

abline(h=0)

lines(VaR.results[, "Modified"], col="black", lwd=2)

lines(as.zoo(ret[violation.dates.modified,]), type="p", pch=16, col="red", lwd=2)

VaR.test2 = VaRTest(1-alpha,

actual=coredata(ret[index(VaR.results),]), VaR=coredata(VaR.results[,"Modified"])) names(VaR.test2)

# LR test for correct number of exceedances for modified VaR

VaR.test2[1:7]

# LR tests for independence of exceedances for modified VaR VaR.test2[8:12]

sortie[k,1]=VaR.test1[6] sortie[k,2]=VaR.test1[11] sortie[k,3]=VaR.test2[6] sortie[k,4]=VaR.test2[11]

précédent sommaire






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Ceux qui vivent sont ceux qui luttent"   Victor Hugo