Vous êtes sur la page 1sur 73

Universit dOrlans

Master 2 : conomtrie et Statistique Applique

conomtrie financire

M. Christophe HURLIN Oana ALVADANE Loredana MOLDOVAN

2011 2012

Contenu
Introduction ......................................................................................................................................2 Chapitre 1 : Analyse du portefeuille ....................................................................................................3 1.1. 1.2. Le portefeuille .....................................................................................................................3 Analyse descriptive des donnes .........................................................................................4

Chapitre 2 : Les proprits de sries financires ..................................................................................7 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. Proprit 1 Stationnarit ..................................................................................................7 Proprit 2 Autocorrlations des carrs des variations de prix ...........................................8 Proprit 3 Distribution leptokurtique ..............................................................................9 Proprit 4 Clusters de Volatilit .......................................................................................9 Proprit 5 Distribution conditionnelle leptokurtique ...................................................... 10 Proprit 6 Effet de levier ............................................................................................... 10 Proprit 7 Saisonnalit .................................................................................................. 11 Proprit 8 Asymtrie perte/gain .................................................................................... 12

Chapitre 3 : Lapproche ARCH / GARCH et la modlisation de la volatilit .......................................... 13 3.1. 3.2. 3.3. Une analyse pralable ....................................................................................................... 13 Les modles ...................................................................................................................... 15 Value at Risk 1% sur lchantillon in-sample .................................................................... 16 Le modle GJR-GARCH sous la loi de Student .............................................................. 16 Le modle GJR-GARCH sous la loi de Skewed-Student ................................................. 18 Le modle GJR-GARCH sous la loi de GED.................................................................... 19

3.3.1. 3.3.2. 3.3.3. 3.4.

Le test du LR Kupiec........................................................................................................... 21

Chapitre 4 : Les Prvisions ................................................................................................................ 22 4.1. 4.2. Types des prvisions.......................................................................................................... 22 Les prvisions pour lchantillon out-of-sample.................................................................. 23

Chapitre 5. Estimation de la VaR diversifie du portefeuille .............................................................. 27 1. Modlisation CCC sous Normale ............................................................................................ 27

5.2. Prvisions glissantes .............................................................................................................. 29 Conclusions ..................................................................................................................................... 32 Annexes........................................................................................................................................... 34

Introduction

Importe la fin des annes 1980 sur les marchs financires aux Etats-Unis et ayant ses origines dans le domaine de lassurance, la notion de Value-at-Risk (VaR) est devenu un instrument important utilis notamment pour dterminer le risque sur les march financires, ainsi que pour mesurer la volatilit dun portefeuille Le but de ces modles VaR est de calculer le maximum de perte possible, un seuil donn, pour une certaine priode. Dans dautres mots, la VaR peut galement tre dfinie comme un quantile dune distribution de probabilit utilis pour tablir les risques des marchs financiers. Le modle RiskMetrics du J.P. Morgan est lun des instruments les plus connu caractrisant la volatilit dun portefeuille sous lhypothse de normalit. Gnralement, les rendements sont caractriss par de fortes asymtries et kurtosis, ce qui signifie que lhypothse de normalit nest pas respecte. Dans lanalyse que nous avons mene, nous avons considr plusieurs modles sous diffrentes lois de distribution.

Chapitre 1 : Analyse du portefeuille


1.1. Le portefeuille

En vue de crer notre portefeuille, nous avons choisi les actifs de trois grandes compagnies qui, en plus, sont trs diffrentes regardant leur secteur dactivit. Ainsi, nous avons :

Questcore Pharmaceuticals compagnie amricaine qui droule son activit dans le secteur de la sant, notamment en neurologie et nphrologie. Elle a t cre le 17 Novembre 1999, quand Cypros Pharmaceuticals Corporation et RiboGene Inc ont fusionn pour devenir une entreprise intgre.

Coca Cola Company a dbut son activit en 1886 comme une compagnie qui vendait une boisson pour 5 cents le verre. Si au dbut, il y avait que 9 verres vendus par jour, travers le temps, CocaCola sest transforme dans une compagnie de renomm mondial, avec plus de 1.7 milliards de portions de boissons vendus chaque jour.

British American Tobacco - existe depuis plus de 100 ans. A t cre en 1902, en tant que joint-venture entre la socit britannique Imperial Tobacco et l'American Tobacco Company fonde par le Duc 'Buck' James. Malgr son nom qui est driv des noms des deux socits fondatrices, British American Tobacco a t tabli pour le commerce extrieur entre le Royaume-Uni et les Etats-Unis, et cest dvelopp dans dizaines de pays en Afrique, Asie, Amrique Latine et en Europe continentale. Par consquent, notre portefeuille, que nous allons dnommer QCB, est construit partir de ces trois actifs, chacun ayant une contribution de 1/3. Les prix des actions sont observes pendant 11 ans, partir du 4 dcembre 2000 jusquau 5 dcembre 2011. Le rendement de chaque actif a t construit selon la formule suivante:

O :

p1 = le prix du titre la fin de la priode considre

p0 = le prix du titre au dbut de la priode considre d = la dividende vers au cours de la priode Dans notre cas, p1 est le cours dnomme close de lactif, d est gal 0 et p0 est le cours close de la dernire session. Ensuite, nous avons calcul le rendement final du portefeuille, tout en utilisant la formule prsente ci-dessous :

Finalement, pour obtenir la valeur de notre rendement exprime en euros, nous allons multiplier cette par 1.000.000.

1.2.

Analyse descriptive des donnes

Les cours enregistres varient entre 18.8967 et 68.9900 units montaires, ayant comme moyenne la valeur de 34.185. La srie prsente une asymtrie positive (Sk=0.81876848>0), la mdiane (31.673) est infrieure la moyenne (34.185) et le coefficient d'aplatissement est ngatif (Ku=-0.0474093), aspect qui nous indique quon se trouve dans un cas dune distribution platikurtique. (cf. Annexe 1)

Si maintenant on regarde les rendements, ceux-ci varient entre -0.0895879 et 0.243100 units montaires, avec une moyenne qui ne diffre pas significativement de 0 (sa valeur est de 0.00125021). Les coefficients dasymtrie et daplatissement (Sk = 1.49058783, Ku = 11.9686628) nous indiquent que dans ce cas-l, par rapport celui prcdent, lasymtrie est droite et la srie est plus paisse que celle des cours (elle est leptokurtique). (cf. Annexe 1)

Fig. 1 : Graphique des cours du portefeuille

Gnralement, on observe une tendance croissante des cours. Toutefois, si nous regardons la priode comprise entre Janvier 2008 et Mars 2009, on observe que les cours ont connu une forte baisse, baisse produite cause de la crise financire.

En vue de calculer les prvisions de notre srie, nous allons faire plusieurs modlisations des cours et nous allons choisir le modle qui donne les meilleurs rsultats. Pour cela, nous avons divis la srie en 2 sous-chantillons : un chantillon destimation ou chantillon in-sample et un chantillon de test ou out-of-sample, qui correspond un tiers de lchantillon initial. Le premier chantillon va servir comme base de calcul sur laquelle nous allons construire nos modles et ensuite nos prvisions. La qualit prvisionnelle va tre ensuite vrifie sur le 2 me chantillon.

Fig. 2 : Graphique des rendements du portefeuille

Chapitre 2 : Les proprits de sries financires


2.1. Proprit 1 Stationnarit

Les processus stochastiques pt associs aux prix dactif sont gnralement non stationnaires au sens de la stationnarit du second ordre, tandis que les processus associs aux rendements sont compatibles avec la proprit de stationnarit au second ordre. Pour tester la stationnarit dun processus, on utilise le test dADF : Test de Dickey Fuller Augment (ADF) O lhypothse nulle correspond : H0 : La srie prsente au moins une racine unitaire (elle est non-stationnaire) H1 : La srie ne prsente pas de racine unitaire Les tests que nous avons mens indiquent que la srie de cours est non-stationnaire. Par contre, quant la srie des rendements, on rejette lhypothse nulle.

Table 1 : Test Augmented Dickey Fuller pour les cours

Table 2 : Test Augmented Dickey Fuller pour les rendements

2.2.

Proprit 2 Autocorrlations des carrs des variations de prix


2

La srie rt

associe aux carrs des rendements prsente gnralement de fortes auto-

corrlations, tandis que les autocorrlations de la srie r t sont souvent trs faibles (hypothse de bruit blanc). Dans notre cas, la srie des rendements levs aux carrs est stationnaire avec de fortes autocorrlations. Table 3 : Test de Ljung-Box sur la srie rt

Table 4 : Test de Ljung-Box sur la srie rt2

2.3.

Proprit 3 Distribution leptokurtique

(Queues de distribution paisses) Lhypothse de normalit des rendements est gnralement rejete. Les queues des distributions empiriques des rendements sont gnralement plus paisses que celles dune loi gaussienne. On parle alors de distribution leptokurtique. Pour un seuil considr de 1%, notre srie de rendements rejette lhypothse de normalit. Table 5 : Test de normalit pour la srie rt

En plus, elle est leptokurtique et prsente une faible asymtrie positive, comment nous lavons dj dmontr dans le chapitre prcdent. (voir Annexe 3)

Fig. 3 : Distribution leptokurtique

2.4.

Proprit 4 Clusters de Volatilit

On observe empiriquement que de fortes variations des rendements sont gnralement suivies par de fortes variations. On assiste ainsi un regroupement des extrmes en cluster ou paquets de volatilits. Cette proprit est aussi vrifie en regardant la figure 2.

2.5.

Proprit 5 Distribution conditionnelle leptokurtique

(Queues paisses conditionnelles) Une fois corrige la volatilit clustering (par exemple avec des modles ARCH), la distribution des rsidus demeure leptokurtique mme si la kurtosis est plus faible que dans le cas non-conditionnel.

2.6.

Proprit 6 Effet de levier

Il existe une asymtrie entre leffet des valeurs passes ngatives et leffet des valeurs passes positives sur la volatilit des cours ou de rendements. Les baisses des cours tendent engendrer une augmentation de la volatilit suprieure celle induite par une hausse des cours de mme ampleur. Essayant dappliquer cette proprit pour notre srie, nous observons que la volatilit pour les valeurs ngatives de rendements (0.01188) est infrieure celle des valeurs positives (0.01778). Donc, cette proprit nest pas vrifie. Table 6 : Volatilit des rendements ngatifs

Table 7 : Volatilit des rendements positifs

10

2.7.

Proprit 7 Saisonnalit

Les rendements prsentent de nombreux phnomnes de saisonnalit (effets week-end, effet janvier etc..). Table 8 : Leffet Janvier Rendement moyen (%) Priode 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 Janvier 0.73952 -0.24144 0.0162032 0.0953226 -0.32492 -0.11471 0.18766 -0.31212 -0.55716 -0.0891581 -0.0591 Autres mois 0.22142 -0.02329 0.077813 0.0030193 0.20134 0.16202 0.36341 0.0498465 0.0551420 0.23771 0.23377

Aprs avoir regard le tableau ci-dessus, nous pouvons dire que les rendements moyens du janvier sont infrieurs ceux obtenus pour les autres mois de lanne, ce qui signifie quil existe bien un effet janvier. Table 9 : Leffet Week-end Lundi Rendement moyen (%) -0.18427 Mardi -0.0012360 Mercredi -0.25553 Jeudi 0.0553284 Vendredi 0.0764297

Les rendements tendent crotre vers la fin de la semaine et dcrotre vers le dbut, mais on voit que leffet lundi (en valeur absolue) est plus lev que celui de vendredi.

11

2.8.

Proprit 8 Asymtrie perte/gain

La distribution des cours est gnralement asymtrique : il y a plus de mouvements forts la baisse qu la hausse. Nous avons vu prcdemment que la srie des rendements a une faible asymtrie positive. La srie des cours est galement asymtrique.

12

Chapitre 3 : Lapproche ARCH / GARCH et la modlisation de la volatilit

3.1.

Une analyse pralable

Avant de construire plusieurs modles, il faut tout dabord tester si les rsidus de la srie des rendements prsentent des autocorrlations (concept connu sous le nom dhtroscedasticit). Ce type de test se fait en utilisant les tests suivants : Le Multiplicateur de Lagrange (LM), test pour lequel on considre les hypothses suivantes : H0 : Absence d'autocorrlations sur t2 et donc absence des effets ARCH H1 : Prsence d'autocorrlations sur t2 (prsence des effets ARCH) Le Test de Ljung Box (Q-stat), ayant les mmes hypothses. Les rsultats que nous avons obtenus nous indiquent que lhypothse nulle est rejete, donc on est bien dans la prsence des effets ARCH. Cest le motif pour lequel on va utiliser une modlisation de type GARCH pour notre portefeuille.

Table 10 : Test de prsence des effets ARCH

13

Si on dsire dfinir les modles ARCH et GARCH, nous pouvons dire que, dune part, le modle ARCH fondamental est un processus avec mmoire courte, qui utilise les carrs des rsidus les plus rcentes pour estimer la variance.

Contrairement ce modle, le modle GARCH est un processus avec mmoire longue, qui utilise tous les derniers carrs des rsidus pour estimer la variance actuelle. Les tests LM prsents ci-dessus nous mnent conclure que lutilisation du modle GARCH est prfrable au modle ARCH. Donc, les rsidus t de la srie des rendements satisfont une reprsentation GARCH(1,1), caractrise par les quations suivantes :

o :

zt est un bruit blanc faible, 0 > 0, i = 1, , q, i 0, i = 1, , p.

Dans notre cas, lquation ht peut tre rcrite sous la forme : (voir Annexe 5 pour plus de dtails)

14

3.2.

Les modles

Nous avons commenc notre modlisation avec le modle AR(1)-GARCH(1,1) et nous avons continu avec les modles GJR-GARCH, VS-GARCH, APARCH, Q-GARCH. Les lois utilises sont la loi de Student, la loi de Skewed-Student, ainsi que la loi GED, aspect qui sera argument par la suite.

En ce qui concerne le modle IGARCH, modle qui correspond au cas dune racine unitaire dans la variance conditionnelle, nous avons d vrifier cet aspect. Les rsultats du test dADF nous indiquent que la variance est stationnaire. Du coup, nous allons liminer ce modle de notre analyse. (pour les rsultats obtenus, voir lAnnexe 2) Si nous revenons sur les lois utilises comme estimation, nous constatons que lhypothse de normalit a t rejete, donc la loi normale nest pas adquate pour notre srie. Par consquent, les lois de distribution utilises pour construire nos modles seront la loi de t Student, loi Skewed t Student et loi GED.

Si la distribution de Student permet de modliser des queues de distribution plus paisses que celles de la loi normale, la distribution Skewed Student modlise leffet dasymtrie. Essayant de caractriser la distribution erreurs gnralises (GED), nous pouvons dire quelle est symtrique. En mme temps, le paramtre v la fait plus flexible dans les queues, qui permet ainsi de modliser la Kurtosis. Pour un v<2, la GED a des queues plus paisses que celle de la loi normale. Dans le cas o v=2, on obtient une distribution normale standard et lorsque v>2, on obtient une distribution platykurtique. Pour choisir le meilleur modle construit pour chaque loi de distribution, nous avons pris en compte plusieurs critres. Tout dabord, nous avons calcul la log-vraisemblance, critre pour lequel on prend en compte les valeurs les plus leves. Deuximement, on considre le critre dAIC pour lequel on regarde que les valeurs plus petites et aussi on prend en compte le nombre de paramtres qui doit tre minimal.

15

Les meilleurs rsultats sont obtenus pour les modles suivants (cf. Annexe 3): Distribution Modle Paramtres LogLikelihood Student GJR GARCH (la constante nest pas significative) Skewed Student GED GJR GARCH GJR GARCH 8 6 5016.72 4754.211 -10017.44 -9496.42 6 4772.881 -9533.76 AIC

3.3.

Value at Risk 1% sur lchantillon in-sample

Pour les trois modles retenus nous avons construit la VaR 1% et nous lavons reprsente par la suite. La mthode de calcul de la VaR est base sur les trois actifs choisis au dbut, sans prendre en compte leurs corrlations. De mme, lors de cette partie, nous allons considrer les mthodes paramtriques de calcul, reprsentes par le modle GJR-GARCH, dans notre cas.
3.3.1. Le modle GJR-GARCH sous la loi de Student

Fig. 4 : Variance conditionnelle estime pour GJR-GARCH sous la loi de Student

16

Fig. 5 : Estimation de la VaR 1% sous la loi de Student Table 11 : Les violations de la VaR pour le 1er modle

On voit bien que la frquence de violations dans le cas de la loi de Student est gale 1.94, valeur suprieure la valeur aspecte de 1%, ce se traduit par le fait que notre VaR sous-estime le risque.

17

3.3.2. Le modle GJR-GARCH sous la loi de Skewed-Student

Fig. 6 : Variance conditionnelle estime pour GJR-GARCH sous la loi de Skewed - Student

Fig. 7 : Estimation de la VaR 1% sous la loi de Skewed - Student

18

Table 12 : Les violations de la VaR pour le 2me modle

Par rapport au cas prcdent, o on sous-estimait le risque, ici on le surestime, le pourcentage des violations tant gal 0.22%<1% souhait.

3.3.3. Le modle GJR-GARCH sous la loi de GED

Fig. 8 : Variance conditionnelle estime pour GJR-GARCH sous la loi de GED

19

Fig. 9 : Estimation de la VaR 1% sous la loi de GED Table 13 : Les violations de la VaR pour le 3me modle

Aprs avoir regard le tableau ci-dessus prsent, nous pouvons dire que le nombre des violations est trs grand, ayant une valeur de 309 sur le total de 1854, lquivalent en pourcentage tant de 16.67%. Cette valeur est norme comparativement la valeur de 1% quon aurait aim dobtenir.

20

3.4.

Le test du LR Kupiec

H0 : Le taux dchec est gal au seuil spcifi (f = ) H1 : Le taux dchec nest pas gal au seuil spcifi (f )

x nombre de fois les rendements sont suprieurs la VaR estime N taille de lchantillon [( ) ] [( ) ] ( )

Le test LR de Kupiec est utilis pour faire le backtesting , cest--dire pour vrifier la prcision des prvisions de la VaR. Lintrt est de ne pas rejeter lhypothse nulle. Ceci nest pas le cas de chacun des modles, mais on considra le 2me modle, pour lequel on a les moins violations.

Les rsultats obtenus sont prsents dans le tableau suivant.

Modle 1 (Loi de Student) 2 (Loi de Sk-Student) 3 (Loi de GED)

Conclusion Rejet de H0 1% Rejet de H0 1% Rejet de H0 1%

Statistique de LR 13.0250 16.9258 Impossible dtre calcule*

Probabilit 0.000307363 0.00003887 Impossible dtre calcule*

*Les valeurs nont pas pu tre calcules cause du fait que les arguments des logarithmes ncessaires pour le calcul de la statistique LR ont t ngatifs.

21

Chapitre 4 : Les Prvisions

4.1.

Types des prvisions

En dbut de ce projet, nous avons divis les donnes en 2 sous-chantillons, lchantillon de test reprsentant une proportion de 33% des donnes. Cette tape sera ensuite utile pour comparer les prvisions obtenues avec les vraies valeurs observes. A partir des observations du premier chantillon, nous avons estim le modle GJR-GARCH et nous avons construit une prvision out of sample pour la premire observation du 2me chantillon. On obtient ainsi une prvision de la Value-at-Risk pour la date T+1, o T est le nombre dobservations dans le 1er chantillon. La mthode connue sous le nom de historical simulation nous permet de construire des prvisions de la VaR, tout en considrant la mme distribution des rendements en T+1 quen 1, 2, jusquen T. Pour cela, nous avons notre disposition deux mthodes : soit on utilise toute linformation passe disponible pour construire lestimateur, soit on construit un estimateur glissant de la VaR en T+1 partir dun sous ensemble dinformations rcentes dune taille fix.

1re Estimation

Prvision temps

T-1

T-N+1

2me Estimation

Prvision

T-N+1

T-N+2

Fig. 10 : Prvision glissante

22

1re Estimation

Prvision temps

T-1

T-N+1

2me Estimation

Prvision

T-N+1 Fig. 11 : Prvision non-glissante

T-N+2

On utilise gnralement des squences de prvisions construites partir dune estimation glissante, cette mthode-ci permettant daccorder trop de poids aux ralisations des rendements plus rcentes.

4.2.

Les prvisions pour lchantillon out-of-sample

Dans une premire phase on estime les prvisions laide de lchantillon destimation et la mthode glissante, les rsultats tant prsents ci-dessous :

Fig. 12 : Les rendements de lchantillon test et les prvisions VaR de lchantillon destimation

23

Fig. 13 : Variance conditionnelle estime sur lchantillon de test

Fig. 14 : Les rendements de lch. test avec les prvisions VaR (observes et prdites)

24

On observe que les valeurs trouves comme prvisions de la VaR (reprsentes en vert) sont plus proches des valeurs rellement observes (reprsentes ici en rouge). On retrouve seulement 8 (0.86%) cas de violations de la VaR prdite par GJR-GARCH par rapport aux rendements estimes :

Table 14 : Les violations de la VaR prdite pour lchantillon de test

Table 15 : Les violations de la VaR observe pour lchantillon de test

Lors de la construction de la VaR observe sur lchantillon de test, nous obtenons 5 violations, par rapport 8 obtenu prcdemment, indiquant que ce dernier modle choisi donne une meilleure interprtation des fluctuations de la srie des rendements.

Les tests de LR Kupiec nous confirment la bonne qualit du modle : Le test LR de Kupiec (UC) Table 16 : Test de LR Kupiec sur la VaR prdite sur lchantillon de test

Le test de couverture conditionnelle (CC) Table 17 : Test de LR Kupiec de couverture conditionnelle (CC)

25

Le test dindpendance (IND) Table 18 : Test de LR Kupiec dindpendance (IND)

26

Chapitre 5. Estimation de la VaR diversifie du portefeuille


Par la suite de notre analyse, nous allons considrer le rendement du portefeuille en tenant compte des corrlations qui peuvent exister entre les actifs qui le composent. Si jusqu maintenant la modlisation des rendements a t laspect le plus important de notre analyse, dans cette deuxime partie du rapport nous allons mettre en vidence galement la comprhension des covariances des rendements financiers, aspect ayant un apport pratique dont il faut tenir compte. Pour cela, lapproche utilise est celle de la VaR multivarie. Cette mthode va nous permettre de prendre en compte non plus la covariance des rendements financiers, mais implicitement la diversification des risques. Par ailleurs, le rendement sur lequel nous allons baser notre analyser sera construit de la manire suivante : R=1/3*RPhar+1/3*RCoca+1/3*RTobacco

1. Modlisation CCC sous Normale


Daprs Bollerslev (1990), le modle GARCH multivari se caractrise par les corrlations conditionnelles constantes et les variances conditionnelles modlises par les modles GARCH univairs. Cest ce quon appelle CCC (corrlations conditionnelles constantes). Le modle CCC(1,1) scrit sous la forme suivante : hii,t=wi+i hij,t=ij pour lequel i,j=1,.,d et ij est gal la corrlation constante entre it et jt, qui peut tre estime sparment de la variance conditionnelle. Le principal avantage du modle CCC est quil peut tre utilis pour des systmes trs grands de sries temporelles. Par contre, lhypothse de corrlation constante peut savrer tre trs restrictive dans certain cas. Cette modlisation qui sera utilise par la suite de notre rapport a une formule de calcul de la VaR quivalente : VaR=--1(alpha)* , o : +ihii,t-1, avec :

27

alpha=le seuil de risque choisi, ici gal 1% sigma=la matrice de variance-covariance des rendements Dans notre cas, la VaR calcule sur tout lchantillon peut tre reprsente sous la

forme suivante :

Fig. 15 : La VaR diversifie estime sur tout lchantillon

Nous prcisons le fait que pour le calcul de ce VaR nous avons utilis la mme dmarche que dans le cas univari. Au niveau du nombre de violations prsentes, on observe quil est gal 29, ayant une frquence de 1.04%.

28

Table 19 : Les violations de la VaR diversifie

5.2. Prvisions glissantes


Comme dans le cas univari, nous avons ralis de nouveau les prvisions glissantes pour lchantillon out-of-sample qui comprend 928 observations. Leur reprsentation peut tre observe dans le graphique suivant.

Fig. 16 : La VaR diversifie prdite utilisant lchantillon destimation

Si on compare la VaR prdite et la Var rellement observe, on remarque le fait que les prvisions sont plus proches des observations rellement observes que dans le cas univari.

29

Fig. 17 : La VaR diversifie prdite et observe pour les rendements (chantillon de test)

Si nous regardons de nouveau les violations obtenues, elles sont prsentes en nombre de 11, ce qui correspond une VaR 1.19%. Le test LR nous dit que lhypothse nulle nest pas rejete a un seuil de 1%, ce qui signifie que les deux approches : univari et multivari sont appropries pour estimer cette srie financire. Table 20 : Les violations de la VaR diversifie

Comme dans le cas univari trait prcdemment, nous avons fait aussi le backtesting pour les prvisions obtenues. Les tests utilis pour a ont t les mmes quavant : Le test LR de Kupiec (UC) Table 16 : Test de LR Kupiec sur la VaR prdite sur lchantillon de test

30

Le test de couverture conditionnelle (CC) Table 17 : Test de LR Kupiec de couverture conditionnelle (CC)

Le test dindpendance (IND) Table 18 : Test de LR Kupiec dindpendance

La qualit des prvisions est confirme aussi dans le cas multivari, car lhypothse nulle nest pas rejete pour les trois tests.

31

Conclusions
Mesure financire extrmement importante permettant de prvoir pour un certain seuil de risque donn les pertes dun investissement, la VaR peut tre classifie en deux catgories. Dune part, on retrouve la VaR non diversifie du portefeuille, qui ne prend pas en compte la diversification des risques. De lautre part, la VaR diversifie du portefeuille considre galement les corrlations entre les actifs. Lors de ce rapport, nous avons pris en compte les deux types destimations et nous les avons appliqus pour un portefeuille compos par trois actifs financiers. En plus, nous avons essay de faire une comparaison de ces mthodes pour en tirer les conclusions quant la meilleure mthode utiliser. La comparaison faite se base principalement sur les tests de Kupiec qui visent ltude des violations des prvisions obtenues sur lchantillon in-sample et compares avec les valeurs relles observes et retrouves dans lchantillon out-of-sample. Tout dabord, pour lapproche non diversifie paramtrique, nous avons fait plusieurs modlisations qui ont abouti un rsultat final qui sest concrtis dans le choix du modle GJR-GARCH comme tant le modle qui donne les meilleurs rsultats. Comme le test de normalit a t rejet, seules les lois Student, Skewed Student et GED ont t prises en compte. En vue de calculer les prvisions, nous avons choisi un seul modle appliqu sur une seule loi. Du coup, nous avons compar les rsultats obtenues pour les trois lois numres prcdemment, tout en utilisant le test de Kupiec. Nous prcisons galement le fait que ces rsultats ont t en fait bass sur lestimation de la VaR calcule 1% sur lchantillon insample. Ainsi, pour la loi de Student, nous avons obtenu un pourcentage de 1.94 violations, pour la loi de Skewed-Student, les violations ont reprsent 0.22% du nombre total des observations, tandis que pour la dernire loi, la GED, nous avons eu un pourcentage de 16.67 de violations.

32

En ce qui concerne le test LR du Kupiec, dans tous les cas, on rejette lhypothse nulle dgalit du taux dchec au seuil spcifi. Ce rsultat obtenu nest pas satisfaisant, mais cela peut tre d aux actifs utiliss pour la construction du portefeuille. Comme nous avons d faire un choix entre les trois lois, nous avons pris comme deuxime critre le nombre de violations, aspect que nous venons de prsenter. Donc, le modle restant a t le modle GJR-GARCH pour la loi de Skewed-Student, modle sur lequel nous avons construit ensuite nos prvisions. Si jusqu maintenant le test LR de Kupiec a rejet lhypothse nulle, aprs avoir construit les prvisions, avec une probabilit de 0.6653 et une valeur critique gale 0.18706, nous ne pouvons plus rejeter lhypothse nulle H0. Ces valeurs correspondent au test de Kupiec de couverture non-conditionnelle. Nous avons utilis galement les deux autres tests de Kupiec : de couverture conditionnelle et dindpendance. Dans les deux cas, lhypothse nulle nest pas rejete, avec une valeur critique de 0.323, respectivement de 3.87845. La deuxime partie de notre projet est base sur lestimation de la VaR diversifie du portefeuille, mthode qui prend en compte les covariances des rendements financires. Par rapport au cas univari, on obtient une valeur de 1.04% de violations, valeur qui est trs proche de la valeur souhaite de 1%. De mme, dans le cas des prvisions glissantes, on obtient une valeur galement trs proche de celle souhaite : 1.19%. Pour vrifier la qualit prvisionnelle, nous avons fait de nouveau les tests de backtesting : les trois tests LR de Kupiec : de couverture conditionnelle, couverture non-conventionnelle et le test dindpendance. Dans tous les trois cas lhypothse nulle na pas pu tre rejete. Ainsi, on aboutit un rsultat satisfaisant. Comme le nombre de violations a t infrieur par rapport lapproche non diversifie du portefeuille et comme les tests de Kupiec ont t plus significatifs, nous pourrons conclure que le modle multivari est prfrable celui univari.

33

Annexe 1
Lanalyse descriptive des cours du portefeuille

Lanalyse descriptive des rendements du portefeuille

34

Annexe 2

Estimateurs des rsidus GARCH (1, 1)

Le test ADF sur la variance conditionnelle

35

Annexe 3

Loi Student Modle GJR-GARCH

Loi Skewed Student Modle GJR-GARCH

36

Loi GED Modle GJR-GARCH

37

Annexe 4
Code SAS utilis
/***************************************************** 1. ANALYSE DESCRIPTIVE ******************************************************/ * Cration de la librairie ; libname fin 'D:\D\sc\master\sem 9\Financial Econometrics\dossier final'; * Importation des donnes ; data phar; infile 'D:\D\sc\master\sem 9\Financial Econometrics\dossier final\pharm.csv' dsd firstobs=2; input date :ddmmyy. open_phar high_phar low_phar phar volume_phar; run; data coca; infile 'D:\D\sc\master\sem 9\Financial Econometrics\dossier final\cola.csv' dsd firstobs=2; input date :ddmmyy. open_coca high_coca low_coca coca volume_coca; run; data tobacco; infile 'D:\D\sc\master\sem 9\Financial Econometrics\dossier final\tobacco.csv' dsd firstobs=2; input date :ddmmyy. open_tobacco high_tobacco low_tobacco tobacco volume_tobacco; run; * Classement des donnes ; proc sort data=phar; by date; run; proc sort data=coca; by date; run; proc sort data=tobacco; by date; run; * Construction des rendements pour chaque actif: rphar, rcoca, rtobacco ; data phar (keep=date phar rphar); set phar; rphar = (phar - lag(phar))/lag(phar); format date date9.; run; data coca (keep=date coca rcoca); set coca; rcoca = (coca - lag(coca))/lag(coca); format date date9.; run; data tobacco (keep=date tobacco rtobacco); set tobacco; rtobacco = (tobacco - lag(tobacco))/lag(tobacco); format date date9.; run; * Construction du portefeuille ; data port_initial; merge phar coca tobacco; by date;

38

if phar=. then phar=0; if coca=. then coca=0; if tobacco=. then tobacco=0; t+1; run; * Construction du cours et data fin.port (keep = date set port_initial; cport = (phar + coca rdt = (rphar + rcoca if rdt=. then rdt=0; run; rendement du portefeuille ; cport rdt t); + tobacco) / 3; + rtobacco) / 3;

* Construction du rendement en euro ; data fin.port; set fin.port; rdt_euro = 1000000 + 1000000*rdt; run; data port_selected; set fin.port; if (rdt<0.1 and rdt>-0.1); run; * Descriptive statistics ; title "Analyse descriptive des cours"; proc univariate data = fin.port; var cport; run; title "Analyse descriptive des rendements"; proc univariate data = fin.port; var rdt; run; title; /***************************************************************** 2. LES PROPRIETES STATISTIQUES DU RENDEMENT DU PORTEFEUILLE *****************************************************************/ * On fait des graphiques pour les cours & rendements du portefeuille; goptions ftext=grotesk interpol=join rotate=landscape; title color=Darkcyan 'Graphique des cours du portefeuille'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; axis1 label=(color=Darkcyan 'Prix du Portefeuille QCB'); axis2 label=(color=Darkcyan 'Date') order=('01jan2001'd, '01jan2003'd, '01jan2005'd, '01jan2007'd, '01jan2009'd, '01jan2011'd , '01jan2012'd); legend1 value=(tick=1 color=Darkgreen j=c 'Prix du portefeuille' tick=2 color=OliveDrab tick=3 color=indianred) label=none frame ; proc gplot data=fin.port;

39

plot cport*date / overlay vaxis=axis1 haxis=axis2 legend=legend1; run; quit; title; goptions ftext=grotesk interpol=join rotate=landscape; title color=Darkcyan 'Graphique des rendements du portefeuille'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; axis1 label=(color=Darkcyan 'Rendements QCB'); axis2 label=(color=Darkcyan 'Date') order=('01jan2001'd, '01jan2003'd, '01jan2005'd, '01jan2007'd, '01jan2009'd, '01jan2011'd , '01jan2012'd); legend1 value=(tick=1 color=Darkgreen j=c 'Rendements du portefeuille' tick=2 color=OliveDrab tick=3 color=indianred) label=none frame ; proc gplot data = fin.port annotate = fin.port; plot rdt*date/ overlay vaxis=axis1 haxis=axis2 legend=legend1; run; title; /*************************************** 2.1. Proprit 1 (Stationnarit) ****************************************/ * Les processus stochastiques pt associs aux prix dactif sont gnralement non stationnaires au sens de la stationnarit du second ordre, tandis que les processus associs aux rendements sont compatibles avec la proprit de stationnarit au second ordre; title 'Stationnarite de cours'; proc arima data = fin.port; identify var = cport nlag=24 stationarity = (adf = (1 2 3)); /*srie non stationnaire*/ run; title 'Stationnarite de rendements'; proc arima data = fin.port; identify var = rdt nlag=24 stationarity =(adf =(1 2 3)); /*srie stationnaire*/ run; title; /********************************************************************** ***** 2.2. Proprit 2 (Autocorrlations des carrs des variations de prix) *********************************************************************** ****/ * La srie r2t associe aux carrs des rendements prsente gnralement de fortes auto-corrlations tandis que les auto-corrlation de la srie rt sont souvent trs faibles ( hypothse de bruit blanc ); title 'Autocorrlations des carrs des variations de prix';

40

data fin.port; set fin.port; rdt2 = rdt**2; run; proc arima data = fin.port; identify var = rdt2 nlag=24 stationarity =(adf =(1 2 3)); stationnaire avec des fortes auto-corrlation */ run; title; /* srie

/******************************************************** 2.3. Proprit 3 (Queues de distribution paisses) *********************************************************/ * Lhypothse de normalit des rendements est gnralement rejete. Les queues des distributions empiriques des rendements sont gnralement plus paisses que celles dune loi gaussienne. On parle alors de distribution leptokurtique; title 'Test de normalit'; proc autoreg data = fin.port; model rdt=/ dwprob normal; normalit */ run;

/* On rejet l'hypothse de

title height=3 'Distribution leptokurtique'; proc univariate data = fin.port; var rdt; histogram rdt/normal(noprint) cbarline=red kernel(c=MISE k=quadratic color=green); /* distribution leptokurtique */ run; /*************************************************** 2.4. Proprit 4 (Clusters de Volatilit) ****************************************************/ * On observe empiriquement que de fortes variations des rendements sont gnralement suivies de fortes variations. On assiste ainsi un regroupement des extrmes en cluster ou paquets de volatilits; * Cette proprit est vrifie - le 2me graph du pt. 1; /******************************************************** 2.5. Proprit 5 (Queues paisses conditionnelles) *********************************************************/ * Mme une fois corrige de la volatilit clustering (par exemple avec des modles ARCH), la distribution des rsidus demeure leptokurtique mme si la kurtosis est plus faible que dans le cas non conditionnelle; /******************************************************** 2.6. Proprit 6 (Effet de levier) *********************************************************/ * Il existe une asymtrie entre leffet des valeurs passes ngatives et leffet des valeurs passes positives sur la

41

volatit des cours ou de rendements. Les baisses de cours tendent engendrer une augmentation de la volatilit suprieure celle induite par une hausse des cours de mme ampleur; * Valeurs negatives du rdt; title 'Volatilite du rendements negatives'; data fin.port_neg ( keep = date rdt ); set fin.port; run; proc sort data = fin.port_neg; by rdt; run; data fin.port_neg; set fin.port_neg; where rdt < 0; run; proc univariate data = fin.port_neg; */ var rdt; run; * Valeurs positives du rdt; title 'Volatilite du rendements positives'; data fin.port_pos ( keep = date rdt ); set fin.port; run; proc sort data = fin.port_pos; by rdt; run; data fin.port_pos; set fin.port_pos; where rdt > 0; run; proc univariate data = fin.port_pos; */ var rdt; run; /* Volatilite + = 0.01777653 /* Volatilite - = 0.01188407

/******************************************************** 2.7. Proprit 7 (Saisonnalit) *********************************************************/ * Les returns prsentent de nombreux phnomnes de saisonnalit (effets week end, effet janvier etc..); * Verifier l'existance d'effet janvier; title 'Effet Janvier'; data fin.port_sais ( keep = date rdt jan_rdt mois_rdt ); set fin.port; if month(date) = 1 then jan_rdt = rdt; else mois_rdt = rdt;

42

run; data fin.port_jan (keep = date jan_rdt); set fin.port_sais; where (jan_rdt ~= .); run; data fin.port_mois (keep = date mois_rdt); set fin.port_sais; where (mois_rdt ~= .); run; %macro janvier(table, year, variable); proc means data = &table( where = (year(date) = &year)); var &variable; run; %mend; %janvier(fin.port_jan, 2001, jan_rdt); %janvier(fin.port_mois, 2001, mois_rdt); %janvier(fin.port_jan, 2002, jan_rdt); %janvier(fin.port_mois, 2002, mois_rdt); %janvier(fin.port_jan, 2003, jan_rdt); %janvier(fin.port_mois, 2003, mois_rdt); %janvier(fin.port_jan, 2004, jan_rdt); %janvier(fin.port_mois, 2004, mois_rdt); %janvier(fin.port_jan, 2005, jan_rdt); %janvier(fin.port_mois, 2005, mois_rdt); %janvier(fin.port_jan, 2006, jan_rdt); %janvier(fin.port_mois, 2006, mois_rdt); %janvier(fin.port_jan, 2007, jan_rdt); %janvier(fin.port_mois, 2007, mois_rdt); %janvier(fin.port_jan, 2008, jan_rdt); %janvier(fin.port_mois, 2008, mois_rdt); %janvier(fin.port_jan, 2009, jan_rdt); %janvier(fin.port_mois, 2009, mois_rdt); %janvier(fin.port_jan, 2010, jan_rdt); %janvier(fin.port_mois, 2010, mois_rdt); %janvier(fin.port_jan, 2011, jan_rdt); %janvier(fin.port_mois, 2011, mois_rdt); /* moyenne = 0.0073952 */ /* moyenne = 0.0022142 */ /* moyenne = -0.0024144 */ /* moyenne = -0.000232902 */ /* moyenne = 0.000162032 */ /* moyenne = 0.000778130 */ /* moyenne = 0.000953226 */ /* moyenne = 0.000030193 */ /* moyenne = -0.0032492 */ /* moyenne = 0.0020134 */ /* moyenne = -0.0011471 */ /* moyenne = 0.0016202 */ /* moyenne = 0.0018766 */ /* moyenne = 0.0036341 */ /* moyenne = -0.0031212 */ /* moyenne = 0.000498465 */ /* moyenne = -0.0055716 */ /* moyenne = 0.000551420 */ /* moyenne = -0.000891581 */ /* moyenne = 0.0023771 */ /* moyenne = -0.000591008 */ /* moyenne = 0.0023377 */

* Verifier l'existence d'effet weekend; title 'Effet Weekend'; data fin.port_sais; set fin.port_sais; if week(date) = 1 then rdt_lundi = rdt; if week(date) = 2 then rdt_mardi = rdt; if week(date) = 3 then rdt_mercredi = rdt; if week(date) = 4 then rdt_jeudi = rdt; if week(date) = 5 then rdt_vendredi = rdt; run; %macro weekend(jour); data fin.port_&jour (keep = rdt_&jour); set fin.port_sais; where (rdt_&jour ~= .); run;

43

proc means data = fin.port_&jour; run; %mend; %weekend(lundi); %weekend(mardi); %weekend(mercredi); %weekend(jeudi); %weekend(vendredi); /* moyenne = -0.0018427 */ /* moyenne = -0.000012360 */ /* moyenne = -0.0025553 */ /* moyenne = 0.000553284 */ /* moyenne = 0.000764297 */

/******************************************************** 2.8. Proprit 8 (Asymtrie perte/gain) *********************************************************/ * La distribution des cours est gnralement asymtrique : il y a plus de mouvements forts la baisse qu la hausse; * Proprit vrifi au pt. 1 ; /***************************************************************** 2.9 Echantillon destimation et Echantillon de test *****************************************************************/ data ech_estim (drop = rdt2); set fin.port (firstobs=1 obs=1854); run; data ech_test (drop = rdt2); set fin.port (firstobs=1855 obs=2782); run; /************************************************************************** 3. CONSTRUCTION DE LA VAR SANS PRISE EN COMPTE DES CORRELATIONS **************************************************************************/ * Test de prsence d'effet Arch; title 'Effets ARCH'; proc autoreg data=ech_estim; d'absence d'effets Arch */ model rdt=/ archtest dwprob normal; heteroscedasticit */ run; title; * Rcupration des valeurs initiales des param; proc autoreg data=ech_estim outest=result; model rdt= /garch=(p=(1),q=(1)) dist=t ; run; data result; set result (rename=(_AH_0=alpha _AH_1=alpha1 _GH_1=beta)); v=1/_tdfi_; run; proc print; run; /***************************************** 3.1. Modeles Loi Student ******************************************/

/* Rejet de l'hypothse nulle /* prsence d'effet arch -

44

/********************************************************************** ********** 3.1.1. Estimation AR(1)-GARCH(1,1) avec distribution de Student par MODEL *********************************************************************** **********/ title 'Loi Student - AR(1)-GARCH(1,1)'; proc model data = ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 df 3.91690; rdt = intercept; h.rdt = arch0 + arch1 * zlag(resid.rdt ** 2)+garch1*zlag(h.rdt); bounds arch0 arch1 garch1 >=0; restrict arch1 + garch1 <1; errormodel rdt ~ t(h.rdt,df); distribution='Student'; fit rdt / fiml method=marquardt out = modelear1_student ; outvars resid.rdt h.rdt t intercept distribution; run; quit; title; /*Log Likelihood = 4769.874 5 paramtres AIC = -9529.75 */ data aic; aic = 2*5-2*4769.874; run; proc print data = aic; run; ods graphics on; stationnaire => sans IGARCH*/ proc arima data = modelear1_student; identify var=h_rdt stationarity=(adf); run; quit; ods graphics off; /********************************* 3.1.2. Estimation GJR-GARCH **********************************/ title "Loi Student - GJR-GARCH"; proc model data = ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 df 3.91690; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+phi*zlag(resid.rdt**2) ; bounds arch0 arch1 garch1 >0; errormodel rdt ~ t(h.rdt,df); fit rdt / method = marquardt fiml ; run; quit ; data aic; aic = 2*6-2*4774.976; /* serie

45

proc print data = aic; run; /* Log Likelihood = 4774.976 6 parametres AIC = -9537.95 non-signif: intercept */ /********************************* 5.1.3. Estimation VS-GARCH **********************************/ title "Loi Student - VS-GARCH"; proc model data = ech_estim ; parms arch0neg .000037383 arch1neg 0.15768 garch1neg 0.77786 arch0pos .000037383 arch1pos 0.15768 garch1pos 0.77786 df 3.91690 ; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0pos + arch1pos*zlag(resid.rdt**2) + garch1pos*zlag(h.rdt); else h.rdt = arch0neg + arch1neg*zlag(resid.rdt**2) + garch1neg*zlag(h.rdt) ; errormodel rdt ~ t(h.rdt,df); fit rdt / fiml method = marquardt converge=0.01; run ; data aic; aic = 2*8-2*4775.119; proc print data = aic; run; /* Log Likelihood = 4775.119 8 parametres AIC = -9534.24 non-signif: intercept, arch0pos */ /********************************* 3.1.4. Estimation APARCH **********************************/ title "Loi Student - APARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 df 3.91690; rdt = intercept; h.rdt =arch0+ arch1 * 2*(gamma(3/2)*gamma((v-3)/2)*(v2)**(3/2))/(1.5*sqrt(constant("pi")*(v-2))*gamma(v/2)); errormodel rdt~t(h.rdt,v); fit rdt / fiml method=marquardt converge=0.1 ; run; quit; * ne converge pas; /********************************* 3.1.5. Estimation Q-GARCH **********************************/ title "Loi Student - Q-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 df 3.91690; rdt = intercept ; h.rdt =arch0+ arch1 * zlag(resid.rdt ** 2)+garch1*zlag(h.rdt)+gamma*zlag(-resid.rdt); bounds arch0 arch1 >=0;

46

errormodel rdt~t(h.rdt,v); fit rdt / method = marquardt concerge=0.1; run; quit ; /* biais */ /***************************************** 3.2. Modeles Loi Skewed Student ******************************************/ /********************************* 3.2.1. Estimation GARCH **********************************/ title "Loi Skewed Student - GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; h.rdt =arch0+ arch1 * zlag(resid.rdt ** 2)+garch1*zlag(h.rdt); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt ; run; quit; data aic; aic = 2*7-2*5005.061; proc print data = aic; run; /* Log Likelihood = 5005.061 7 parametres AIC = -9996.12 */ /********************************* 3.2.2. Estimation APARCH **********************************/ title "Loi Skewed Student - APARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; h.rdt =arch0+ arch1 * 2*(gamma(3/2)*gamma((v-3)/2)*(v2)**(3/2))/(1.5*sqrt(constant("pi")*(v-2))*gamma(v/2)); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s) -0.5*(log(constant("pi")*(v2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(-2*IT)));

47

obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt converge=0.1; run; quit; * biais; /********************************* 3.2.3. Estimation GJR-GARCH **********************************/ title "Loi Skewed Student - GJR-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+ phi*zlag(resid.rdt**2); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt ; run; quit; data aic; aic = 2*8-2*5018.003; proc print data = aic; run; /* Log Likelihood = 5018.003 8 parametres AIC = -10020.01 */ /********************************* 3.2.4. Estimation VS-GARCH **********************************/ title "Loi Skewed Student - VS-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept; if zlag(resid.rdt) > 0 then h.rdt = arch0pos + arch1pos*zlag(resid.rdt**2) + garch1pos*zlag(h.rdt); else h.rdt = arch0neg + arch1neg*zlag(resid.rdt**2) + garch1neg*zlag(h.rdt) ; m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1;

48

else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt converge = 0.1; run; quit; /* biais */ /********************************* 3.2.5. Estimation Q-GARCH **********************************/ title "Loi Skewed Student - Q-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt) + gamma*zlag(-resid.rdt); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt; run; quit; data aic; aic = 2*7-2*5013.478; proc print data = aic; run; /* Log Likelihood = 5013.478 7 parametres AIC = -10012.96 */ /***************************************** 3.3. Modeles Loi GED ******************************************/ /********************************* 3.3.1. Estimation GARCH **********************************/ title "Loi GED - GARCH"; proc model data = ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690; rdt = intercept; h.rdt = arch0 + arch1 * zlag(resid.rdt ** 2) + garch1 * zlag(h.rdt); zt=resid.rdt/sqrt(h.rdt); lambda=sqrt(2**(-2/v)*gamma(1/v)/gamma(3/v)); obj=log(v/lambda)-0.5*abs(zt/lambda)**v-(1+v**(-1))*log(2)log(gamma(1/v))-0.5*log(h.rdt);

49

obj=-obj; errormodel rdt ~ general(obj,v); fit rdt/ fiml method=marquardt; run; quit; data aic; aic = 2*5-2*4753.216; proc print data = aic; run; /* Log Likelihood = 4753.216 5 parametres AIC = -9496.43 non-sign: intercept */ /********************************* 3.3.2. Estimation GJR-GARCH **********************************/ title "Loi GED - GJR-GARCH"; proc model data = ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690; rdt = intercept; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+phi*zlag(resid.rdt**2) ; bounds arch0 arch1 garch1 >0; zt=resid.rdt/sqrt(h.rdt); lambda=sqrt(2**(2/v)*gamma(1/v)/gamma(3/v)); obj=log(v/lambda)-0.5*abs(zt/lambda)**v-(1+v**(-1))*log(2)log(gamma(1/v))-0.5*log(h.rdt); obj=-obj; errormodel rdt ~ general(obj,v); fit rdt / fiml method = marquardt; run; quit; data aic; aic = 2*6-2*4756.546; proc print data = aic; run; /* Log Likelihood = 4756.546 6 parametres AIC = -9501.09 non-sign: intercept */ /********************************* 3.3.3. Estimation VS-GARCH **********************************/ title "Loi GED - VS-GARCH "; proc model data = ech_estim ; parms arch0neg .000037383 arch1neg 0.15768 garch1neg 0.77786 arch0pos .000037383 arch1pos 0.15768 garch1pos 0.77786 v 3.91690 ; rdt = intercept; if zlag(resid.rdt) > 0 then h.rdt = arch0pos + arch1pos*zlag(resid.rdt**2) + garch1pos*zlag(h.rdt); else

50

h.rdt = arch0neg + arch1neg*zlag(resid.rdt**2) + garch1neg*zlag(h.rdt) ; zt=resid.rdt/sqrt(h.rdt); lambda=sqrt(2**(2/v)*gamma(1/v)/gamma(3/v)); obj=log(v/lambda)-0.5*abs(zt/lambda)**v-(1+v**(-1))*log(2)log(gamma(1/v))-0.5*log(h.rdt); obj=-obj; errormodel rdt ~ general(obj,v); fit rdt / fiml method = marquardt converge = 0.01; run ;quit; data aic; aic = 2*8-2*4755.693; proc print data = aic; run; /* Log Likelihood = 4755.693 8 parametres AIC = -9495.39 non signif: intercept, arch0neg, arch0pos /********************************* 3.3.4. Estimation Q-GARCH **********************************/ title "Loi GED - Q-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690; rdt = intercept ; h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt) + gamma*zlag(-resid.rdt); zt=resid.rdt/sqrt(h.rdt); lambda=sqrt(2**(2/v)*gamma(1/v)/gamma(3/v)); obj=log(v/lambda)-0.5*abs(zt/lambda)**v-(1+v**(-1))*log(2)log(gamma(1/v))-0.5*log(h.rdt); obj=-obj; errormodel rdt ~ general(obj,v); fit rdt / method = marquardt fiml converge = 0.001; run; quit; data aic; aic = 2*6-2*4754.5; proc print data = aic; run; /* Log Likelihood = 4754.5 6 parametres AIC = -9497 non signif: intercept, gamma

*/

*/

/********************************* 3.3.5. Estimation APARCH **********************************/ title "Loi GED - APARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690; rdt = intercept ;

51

h.rdt =arch0+ arch1 * 2*(gamma(3/2)*gamma((v-3)/2)*(v2)**(3/2))/(1.5*sqrt(constant("pi")*(v-2))*gamma(v/2)); zt=resid.rdt/sqrt(h.rdt); lambda=sqrt(2**(2/v)*gamma(1/v)/gamma(3/v)); obj=log(v/lambda)-0.5*abs(zt/lambda)**v-(1+v**(-1))*log(2)log(gamma(1/v))-0.5*log(h.rdt); obj=-obj; errormodel rdt ~ general(obj,v); fit rdt / fiml method = marquardt converge = 0.001; run; quit; * biais; /***************************************************************** Modles retenus l'issue de cette tape: ****************************************************************** Loi Student: GJR-GARCH Log Likelihood 4774.976 AIC -9537.95 6 parametres intercept non-signif Loi Skewed Student: AIC -10020.01 Loi GED: AIC -9501.09 GJR-GARCH Log Likelihood 5018.003 8 parametres GJR-GARCH Log Likelihood 4756.546 6 parametres intercept non-signif

/************************************************************************** 4. Estimation paramtrique **************************************************************************/ /********************************** 4.1. Les modles retenus ***********************************/ title; proc sort data = ech_estim; by date; run; * STUDENT - Le modele GJR-GARCH ; title "Loi Student - GJR-GARCH"; proc model data = ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 df 3.91690; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt) + phi*zlag(resid.rdt**2) ; bounds arch0 arch1 garch1 >0; errormodel rdt ~ t(h.rdt,df); fit rdt / method = marquardt fiml out = stud_gjr_garch; outvars date intercept rdt h.rdt df; run ; quit ; data stud_gjr_garch; set stud_gjr_garch (rename = (df = v));

52

run; * SKEWED STUDENT - Le modele GJR-GARCH ; title "Loi Skewed Student - GJR-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+ phi*zlag(resid.rdt**2); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt out=sk_gjr_garch ; outvars date intercept rdt h.rdt v; run; quit; * GED - Le modele GJR-GARCH ; title "Loi GED - GJR-GARCH"; proc model data = ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt) + phi*zlag(resid.rdt**2) ; bounds arch0 arch1 garch1 >0; zt=resid.rdt/sqrt(h.rdt); lambda=sqrt(2**(2/v)*gamma(1/v)/gamma(3/v)); obj=log(v/lambda)-0.5*abs(zt/lambda)**v-(1+v**(-1))*log(2)log(gamma(1/v))-0.5*log(h.rdt); obj=-obj; errormodel rdt ~ general(obj,v); fit rdt / fiml converge = 0.001 maxiter = 200 method = marquardt out = ged_gjr_garch; outvars date intercept rdt h.rdt v; run; quit ; /************************************* 4.2. Calculer la VaR 1% **************************************/ %macro var( model, table_model, distribution); %let a=.01; %let csi = 1.49091776; /* Sk du rendements */ data var_&model (keep = date intercept rdt h_rdt var1); set &table_model;

53

if &distribution = "student" then do; var1 = -intercept - sqrt((v-2)/v) * sqrt(h_rdt) * quantile('t',&a,v); end; else if &distribution= "skewed" then do; m = (gamma((v-1)/2) * sqrt((v-2)/3.1415) * (&csi-1/&csi) / gamma(v/2)); s = sqrt((&csi**2 + (1/&csi**2) - 1) - m**2); if &a <= ( 1 / (1+&csi**2) ) then f1 = ((1/&csi) * quantile("t" ,(&a/2) * (1+&csi**2),v) - m) / s; else f1 = ((-&csi) * quantile("t" ,((1-&a)/2) * (1+&csi**(-2)),v) - m) / s; var1 = -intercept - sqrt(h_rdt) * f1; end; else if &distribution = "ged" then do; lambda = sqrt(2**(-2/v) * gamma(1/v) / gamma(3/v)) ; q1 = lambda * (2*quantile("gamma" , (abs(2*&a-1)), 1/v)) ** (1/v); f1 = q1 * sign(2*&a-1); var1 = -intercept - sqrt(h_rdt)*f1; end; var1 = - var1; run; data var_&model; set var_&model (rename = (rdt = rdt_&model)); run; %mend; %var (studgjrgarch, stud_gjr_garch, "student"); %var (skgjrgarch, sk_gjr_garch, "skewed"); %var (gedgjrgarch, ged_gjr_garch, "ged"); /*************************************** 4.3. Graph Variance conditionnelle ****************************************/ proc sort data = ech_estim; by date; run; %macro graphvariance (model, table_model, var,suite_du_title); proc sort data = &table_model; by date; run; data graphvar_&model; merge &var ech_estim; by date; run; * Variance conditionnelle; title height = 2 color = Darkcyan 'Variance conditionnelle estime pour' &suite_du_title; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; axis1 label=(color=Darkcyan 'Rendement'); axis2 label=(color=Darkcyan 'Date'); axis3 label=(color=Darkcyan j=c 'Variance' j=c 'conditionnelle estime'); legend1 value=(color=Darkgreen 'Rendement') label=none frame;

54

legend2 value=(color=OliveDrab 'Variance conditionnelle estime') label=none frame; proc gplot data = &table_model; plot rdt*date / vaxis=axis1 haxis=axis2 legend=legend1; plot2 h_rdt*date / vaxis=axis3 legend=legend2; run; quit; title; %mend; %graphvariance (studgjrgarch, stud_gjr_garch, var_studgjrgarch,GJR-GARCH sous la loi de Student ); %graphvariance (skgjrgarch, sk_gjr_garch, var_skgjrgarch,GJR-GARCH sous la loi de Skewed-Student); %graphvariance (gedgjrgarch, ged_gjr_garch, var_gedgjrgarch,GJR-GARCH sous la loi de GED); /*************************************** 4.4. Graph Var et Validation ****************************************/ %macro graphvar (model, table_model, var, suite_du_title); goptions reset=all; goptions ftext=grotesk interpol=join rotate=landscape; title color=Darkcyan 'Estimation de la VaR' &suite_du_title; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; axis1 label=(color=Darkcyan 'Rendement et VaR'); axis2 label=(color=Darkcyan 'date') order=('01jan2001'd to '01jan2009'd by year); legend1 value=(tick=1 color=Darkgreen j=c 'Rendement' tick=2 color=OliveDrab j=c 'VaR 1%') label=none frame; proc gplot data = graphvar_&model; plot rdt*date var1*date / overlay vaxis=axis1 haxis=axis2 legend=legend1; run; quit; title; * Validation de la VaR; title "Validation de la VaR a 1%"; data validation1_&model; set graphvar_&model; if rdt < var1 then f=1; else f=0; keep f; run; proc freq data = validation1_&model; tables f; run; title; %mend; %graphvar (studgjrgarch, stud_gjr_garch, var_studgjrgarch, sous la loi de Student); * validation: rejet pour 36 (1.94%);

55

%graphvar (skgjrgarch, sk_gjr_garch, var_skgjrgarch, sous la loi de SkewedStudent); * validation: rejet pour 4 (0.22%); %graphvar (gedgjrgarch, ged_gjr_garch, var_gedgjrgarch, sous la loi de GED); * validation: rejet pour 309 (16.67%); %macro lr_kupiec (model); %let a = 0.01; %let no = 1854; title 'Test du LR Kupiec 1%'; data lr_kupiec_&model; set graphvar_&model; if rdt < var1 then N=1; else N=0; N1+N; p=N1/&no; keep rdt var1 N N1 p; run; data lr2_kupiec_&model; set lr_kupiec_&model end=dernier; if dernier; length conclusion1 $20; z = (N1-&a*&no) / sqrt(&a*(1-&a)*&no); LR1 = -2 * log(((1-&a)**(&no-N1)) * (&a**N1)) + 2 * log( ((1 - N1/&no)**(&noN1)) * ((N1/&no)**N1)); prob = 1 - probchi(LR1,1); if prob < 0.01 then conclusion1 = "Rejet H0 a 1%"; else conclusion1 = "Non-rejet H0 1%"; keep LR1 prob conclusion1; run; proc print title; %mend; %lr_kupiec %lr_kupiec %lr_kupiec data = lr2_kupiec_&model; run; (studgjrgarch); (skgjrgarch); (gedgjrgarch); /* rejet H0 */ /* rejet H0 */ /* rejet H0 */

/******************************************** 5. Prvisions - GJR-Garch Skewed Student *********************************************/ * Le modle choisi; title "Loi Skewed Student - GJR-GARCH"; proc model data=ech_estim; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+ phi*zlag(resid.rdt**2); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1;

56

else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method=marquardt out=sk_gjr_garch ; outvars date intercept rdt h.rdt v; run; quit; title; * La prvision glissante pour obs 1855 ; %macro prevgarch; data is0; set ech_estim; run; proc model data=is0 noprint; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+ phi*zlag(resid.rdt**2); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml out=var0 method=marquardt; outvars rdt intercept arch0 arch1 garch1 v k m s h.rdt; quit; data is0; set is0 end=dernier; if dernier; data var0; set var0 end=dernier; if dernier; data var0; merge var0 is0; data previsionsk; set var0; if 0.01 <= ( 1 / (1+1.49091776**2) ) then f1 = ((1/1.49091776) * quantile("t" ,(0.01/2) * (1+1.49091776**2),v) m) / s; else f1 = ((-1.49091776) * quantile("t" ,((1-0.01)/2) * (1+1.49091776**(2)),v) - m) / s;

57

var1 = -intercept - sqrt(h_rdt) * f1; run; %mend prevgarch; %macro prevgarchbis; * Insertion de la prevision 1855 ; %prevgarch; * Les prvisions glissantes pour obs 1856 - 2782 ; %do i=2 %to 929; data is; set fin.port (firstobs=&i obs=%sysevalf(&i+1854)); run; proc model data=is noprint; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+ phi*zlag(resid.rdt**2); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml out=var method=marquardt; outvars rdt intercept arch0 arch1 garch1 v k m s h.rdt; quit; * On retienne la derniere obs de la base PORT; data is; set is end=dernier; if dernier; * On retienne les estimateurs de la variance cond GJR GARCH pour la derniere obs de la base PORT; data var; set var end=dernier; if dernier; * On construit une BD pour le rdt de la base PORT et sa VaR ; data var; merge var is; * On construit la VaR estime pour la derniere obs de la BD PORT ; data previsions; set var; if 0.01 <= ( 1 / (1+1.49091776**2) ) then f1 = ((1/1.49091776) * quantile("t" ,(0.01/2) * (1+1.49091776**2),v) m) / s;

58

else f1 = ((-1.49091776) * quantile("t" ,((1-0.01)/2) * (1+1.49091776**(2)),v) - m) / s; var1 = -intercept - sqrt(h_rdt) * f1; keep var1; data previsionsk; set previsionsk previsions; keep var1; %end; %mend prevgarchbis; %prevgarchbis; * Equivalent au ech_test ; data is; set fin.port; *rcupration des rendements de t=1854 2782; where 1854<t<=2782; keep date rdt t; run; * On introduit un t qui commence de 1855 pour faire le merge apres ; data previsionsk_; set previsionsk; t = _n_ + 1854; run; * L'etape data prcedente a genere une obs en plus ; data previsionsk_; set previsionsk_; if t=2783 then delete; run; * Renommer la BD avec les previsions de la VaR; data previsionsk; set previsionsk_; run; * BD contienne les rdt et les VaR pour obs 1855 - 2872 ; data previsionsk2; merge ech_test previsionsk; * merge des rendements et de la VaR; by t; var1 = -var1; * La VaR est par definition negative ; run; title height = 3 color=Darkcyan 'GJR-GARCH: Les rendements et les prvisions de la VaR'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; axis1 label=(color=Darkcyan 'Rendement et VaR'); axis2 label=(color=Darkcyan 'date'); legend1 value=(tick=1 color=Darkgreen j=c 'Rendement' tick=2 color=OliveDrab j=c 'VaR prdite') label=none frame ; proc gplot data=previsionsk2 annotate = previsionsk2; plot rdt*date var1* / overlay vaxis=axis1 haxis=axis2 legend=legend1;

59

run; quit; title; * Calcul de la Var sur l'echantillon de test ; proc model data = ech_test; parameters arch0 .000037383 arch1 0.15768 garch1 0.77786 v 3.91690 gamma 0 k 1; rdt = intercept ; if zlag(resid.rdt) > 0 then h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt); else h.rdt = arch0 + arch1*zlag(resid.rdt**2) + garch1*zlag(h.rdt)+ phi*zlag(resid.rdt**2); m=gamma(((v-1)/2)*sqrt(v-2))/(sqrt(constant("pi"))*gamma(v/2))*(k-1/k); s=sqrt((k**2+1/(k**2)-1)-m**2); zt=resid.rdt/sqrt(h.rdt); if zt >= -m/s then IT=1; else IT=0; obj=log(gamma((v+1)/2))-log(gamma(v/2))+log(2/(k+1/k))+log(s)0.5*(log(constant("pi")*(v-2))+log(h.rdt)+(1+v)*log(1+(s*zt+m)**2/(v-2)*k**(2*IT))); obj=-obj; errormodel rdt~general(obj,v,k); fit rdt / fiml method = marquardt out = gjr_garch_test ; outvars intercept h.rdt m s v k date; run; quit; * Estimation de la VaR sur l'chantillon de test ; %var (gjrgarchtest, gjr_garch_test, "skewed"); * Variance conditionelle estime sur l'chantillon de test ; data variance_cond_test; merge ech_test var_gjrgarchtest; by date; run; title color=Darkcyan "Variance conditionnelle estime sur l'chantillon de test"; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; axis1 label=(color=Darkcyan "Rendement"); axis2 label=(color=Darkcyan "date"); axis3 label=(color=Darkcyan j=c "Variance" j=c "conditionnelle estime"); legend1 value=(color=Darkgreen "Rendement") label=none frame; legend2 value=(color=OliveDrab "Variance conditionnelle estime") label=none frame; proc gplot data = variance_cond_test; *graphique de la variance conditionnelle estime avec le rendement; plot rdt*date / vaxis=axis1 haxis=axis2 legend=legend1; plot2 h_rdt*date / vaxis=axis3 legend=legend2; run; quit; title; * Calcul de la frquence de violation pour la VaR observe ; data violation_test; set variance_cond_test; if rdt < var1 then f=1; else f=0;

60

keep f; run; proc freq data = violation_test; tables f; run; */

/* 5 violations (0.54%)

* On voit la diffrence entre la VaR prdite et la VaR observe ; data previsions_var_test (rename = (var1 = var_predite)); set previsionsk2; keep date var1; run; proc sort data = previsions_var_test; by date; run; data test (rename = (var1 = var_observee)); set variance_cond_test; keep date rdt var1; run; proc sort data = test; by date; run; data fin.var; merge test previsions_var_test; by date; run; title color=Darkcyan 'Prvisions GARCH de la VaR'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; symbol3 i=join color=red; axis1 label=(color=Darkcyan 'Rendement et VaR'); axis2 label=(color=Darkcyan 'date'); legend1 value=(tick=1 color=Darkgreen j=c 'Rendement' tick=2 color=OliveDrab j=c 'VaR prdite' tick=3 color=red j=c 'VaR observe') label=none frame ; proc gplot data = fin.var; plot rdt*date var_predite*date var_observee*date / overlay vaxis=axis1 haxis=axis2 legend=legend1; run; quit; title; * Calcul de la frquence de violation pour la VaR prdite; data frequence; set fin.var; *f=1 si violation, 0 sinon; if rdt < var_predite then f=1; else f=0; n+f; keep f n; run;

61

proc freq data = frequence; tables f; run; ; /***************************/ /* LR de Kupiec (UC) */ /***************************/ title 'Test du LR Kupiec (UC) 1%'; data lr_kupiec; set fin.var; if rdt < var_predite then N=1; else N=0; N1+N; p=N1/928; keep rdt var_predite N N1 p; run; proc print;run;

* 8 violations (0.86%)

data lr2_kupiec; set lr_kupiec end = dernier; if dernier; length conclusion $20; z=(N1-0.01*928)/sqrt(0.01*0.99*928); LR=-2*log(((1-0.01)**(928-N1))*(0.01**N1))+2*log(((1-N1/928)**(928N1))*((N1/928)**N1)); prob=1-probchi(LR,1); if prob<0.01 then conclusion='rejet H0'; else conclusion='non rejet H0'; keep LR prob conclusion; run; proc print data = lr2_kupiec; run; title; test LR = 0.18706 p=0.66537% */

/* On ne rejete pas H0,

/******************************************************/ /* Test de couverture conditionnelle (CC) */ /******************************************************/ *VaR non diversifie paramtrique - GJR-GARCH Skewed-Student; title "Test de couverture conditionnelle (CC)"; data H0ccparamged; set fin.var end=dernier; if rdt<var_predite then N=1; else N=0; alpha=0.01; p00=1-alpha; p01=alpha; p10=1-alpha; p11=alpha; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; t1=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11);

62

run; data H1ccparam0ged; set fin.var end=dernier; if rdt<var_predite then N=1;else N=0; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; run; data H1ccparamged; set H1ccparam0ged; p00=n00/(n00+n01); p01=n01/(n01+n00); p10=n10/(n10+n11); *p11=n11/(n10+n11); p11=0.00000000000001; t2=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data ccparamged; merge H0ccparamged H1ccparamged; run; data ccparamged; set ccparamged; length conclusion $12; LR_cc=-2*(log(t1)-log(t2)); *stat cc; prob=1-probchi(LR_cc,2); if prob<0.01 then conclusion='rejet H0'; else conclusion='non rejet H0'; *test chi2; keep LR_cc prob conclusion; run; proc print data=ccparamged;run; * On accepte H0--- non rejetH0 LR=0.32357 p-value=0.85062; /***************************************/ /* Test d'indpendance (IND) */ /***************************************/

*VaR non diversifie paramtrique - GJR-GARCH Ged; title "Test d'indpendance (IND)"; data indged; set fin.var end=dernier; if rdt<var_predite then N=1;else N=0; p=0.004; p00=1-p;p01=p;p10=1-p;p11=p; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; t1=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data ind1ged;

63

set fin.var end=dernier; if rdt<var_predite then N=1;else N=0; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; run; data ind2ged; set ind1ged; p00=n00/(n00+n01); p01=n01/(n01+n00); p10=n10/(n10+n11); *p11=n11/(n10+n11); p11=0.00000000000001; t2=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data ind3ged; merge indged ind2ged; run; data ind3ged; set ind3ged; length conclusion $12; LR_ind=-2*(log(t1)-log(t2)); *stat ind; prob=1-probchi(LR_ind,1); if prob<0.01 then conclusion='rejet H0'; else conclusion='non rejet H0'; *test chi2; keep LR_ind prob conclusion; run; proc print data=ind3ged;run; *on accepte H0---LR_IND=0.008080645; /* LR_cc prob non rejetH0 0.32357 0.85062 */

/*******************************/ /* Estimation GARCH multivari */ /*******************************/ /*******************/ /* CCC */ /*******************/ * Recuperation des donnes ; data fin.port2; set port_initial; cport = (phar + coca + tobacco) / 3; rdt = (rphar + rcoca + rtobacco) / 3; if rdt=. then rdt=0; if rphar=. then rphar=0; if rcoca=. then rcoca=0; if rtobacco=. then rtobacco=0; rdt_euro = 1000000 + 1000000*rdt;

64

run; proc varmax data = fin.port2; model rphar rcoca rtobacco; garch p=1 q=1 form=ccc outht=vcv2; run; quit; /*************/ /* VaR */ /*************/ data varmulti2; set vcv2; x1=1/3*h1_1+1/3*h1_2+1/3*h1_3; * partir de la matrice VCV de ht; x2=1/3*h1_2+1/3*h2_2+1/3*h2_3; x3=1/3*h1_3+1/3*h2_3+1/3*h3_3; sigma=1/3*x1+1/3*x2+1/3*x3; *calcul de x'sigmax; var=quantile('normal',0.01)*sqrt(sigma); *calcul de la VaR; run; data varmulti2; merge fin.port2 varmulti2; *on rcupre les rendements; keep t date rdt var; run; title color=Darkcyan 'Estimation de la VaR diversifie du portefeuille'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive ; axis1 label=(color=Darkcyan 'Rendement et VaR'); axis2 label=(color=Darkcyan 'date'); legend1 value=(tick=1 color=darkgreen j=c 'Rendement' tick=2 color=OliveDrab j=c 'VaR') label=none frame ; proc gplot data=varmulti2 annotate = varmulti2; *reprsentation de la VaR et des rendements; plot rdt*date var*date / overlay vaxis=axis1 haxis=axis2 legend=legend1; format date ddmmyy.; run; quit; title; *calcul de la frquence de violation; data freq2; set varmulti2; *f=1 si violation, 0 sinon; if rdt<var then f=1; else f=0; keep f; run; proc freq data=freq2; *frquence de violation; tables f; run; *VaR->1,04% -> on veut une VaR 1% donc sous-estime le rique (29 violations de trop); /*************************/ /* Prvisions */

65

/*************************/ ods listing close; ods html close; %macro Varm; data is0; set fin.port2 (firstobs=2 obs=1854); ods output GARCHParameterEstimates=cccestim; * on recupere les estimateurs de la methode CCC; proc varmax data=is0; model rphar rcoca rtobacco; garch p=1 q=1 form=ccc outht=vcvccc; nloptions tech=qn maxiter=1000; output out=test ; quit; ods output close; proc iml; * la table cccestim a les estimateurs dans une colonne et nous avons besoin de les avoir en ligne; use cccestim; var={"estimate"}; * on cre un vecteur avec une colonne et 12 lignes (12 paramtres sont estims); read all var {estimate} into beta; * on transpose le vecteur; beta=beta`; print beta [rowname=var]; * on cre une table avec les valeurs du vecteur beta; create cccestimIML from beta ; append from beta; quit; data residmulti; set test ( firstobs=1853 obs=1853); keep res1 res2 res3; run; data vcvccc; set vcvccc end=dernier; if dernier; run; data residmulti; set residmulti end=dernier; *on recupre les valeurs des residus,les valeurs de la matrice de variance covariance et aussi les estimateurs de CCC; merge residmulti cccestimIML vcvccc; if dernier; run; data is0; set is0 end=dernier; if dernier; run; data prevresid; merge residmulti is0;

66

run; data prevvarmulti1; set prevresid; h11=col4 + col7*(res1**2) + col10*h1_1; h22=col5 + col8*(res2**2) + col11*h2_2; h33=col6 + col9*(res3**2) + col12*h3_3; h12=col1*sqrt(h11*h22); h13=col2*sqrt(h11*h33); h23=col3*sqrt(h22*h33); x1=1/3*h11+1/3*h12+1/3*h13; x2=1/3*h12+1/3*h22+1/3*h23; x3=1/3*h13+1/3*h23+1/3*h33; sigma=1/3*x1+1/3*x2+1/3*x3; var1=quantile('normal',0.01)*sqrt(sigma); * col1, col2, col3 = sont les paramtres de la constante ; * col4, col5, col6 = sont les paramtres qui caracterisent la modlisation constante ; * col7, col8, col9 = sont les paramtres Arch ; * col10, col11, col12 = sont les paramtres Garch ; run; %mend Varm; %macro prevMULTI; %Varm; %do i=2 %to 928; data is; set fin.port2 (firstobs=&i obs=%sysevalf(&i+1853)); *on recupre les estimateurs de la methode CCC; ods output GARCHParameterEstimates=cccestim; proc varmax data=is noprint; model rphar rcoca rtobacco; garch p=1 q=1 form=ccc outht=vcvccc; nloptions tech=qn maxiter=1000; output out=test ; quit; ods output close; * table cccestim a les estimateurs dans une colonne et nous avons besoin de les avoir en ligne; proc iml; use cccestim; var={"estimate"}; * on cre un vecteur avec une colonne et 12 lignes (12 paramtres sont estims); read all var {estimate} into beta; * on transpose le vecteur; beta=beta`; print beta [rowname=var]; * on cre une table avec les valeurs du vecteur beta; create cccestimIML from beta ; append from beta; quit; data residmulti; set test ( firstobs=1853 obs=1853);

67

keep res1 res2 res3; run; data vcvccc; set vcvccc end=dernier; if dernier; run; data residmulti; set residmulti end=dernier; *on recupre les valeurs des rsidus, les valeurs de la matrice de variance covariance et aussi les estimateurs de CCC; merge residmulti cccestimIML vcvccc; if dernier; run; data is; set is (firstobs=1853 obs=1853); run; data prevresid; merge residmulti is; run; data prevvarmulti; set prevresid; h11=col4 + col7*(res1**2) + col10*h1_1; h22=col5 + col8*(res2**2) + col11*h2_2; h33=col6 + col9*(res3**2) + col12*h3_3; h12=col1*sqrt(h11*h22); h13=col2*sqrt(h11*h33); h23=col3*sqrt(h22*h33); x1=1/3*h11+1/3*h12+1/3*h13; x2=1/3*h12+1/3*h22+1/3*h23; x3=1/3*h13+1/3*h23+1/3*h33; sigma=1/3*x1+1/3*x2+1/3*x3; var1=quantile('normal',0.01)*sqrt(sigma); * col1, col2, col3 = sont les paramtres de la constante ; * col4, col5, col6 = sont les paramtres qui caracterisent la modlisation constante ; * col7, col8, col9 = sont les paramtres Arch ; * col10, col11, col12 = sont les paramtres Garch ; run; data prevvarmulti1; set prevvarmulti1 prevvarmulti; keep var1; run; %end; %mend prevMULTI; %prevMULTI; * rcupration des rendements de t=1854 2782; data is; set fin.port2; where 1854<t<=2782;

68

keep t date rdt; run; data prevvarmulti1; set prevvarmulti1; t = _n_ + 1854; run; * merge des rendements et de la VaR; data prevvarmulti1_; merge is prevvarmulti1; by t; run; * representation de la VaR ; ods listing; ods html; title color=Darkcyan 'Prvisions GARCH de la VaR diversifie'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive ; axis1 label=(color=Darkcyan 'Rendement et VaR'); axis2 label=(color=Darkcyan 'date'); legend1 value=(tick=1 color=darkgreen j=c 'Rendement' tick=2 color=OliveDrab j=c 'VaR prdite') label=none frame ; proc gplot data=prevvarmulti1_ annotate = prevvarmulti1_; plot rdt*date var1*date / overlay vaxis=axis1 haxis=axis2 legend=legend1; run; quit; title; * merge de la VaR observe et de la VaR prdite; data var_obs (rename = (var=var_observee)); set varmulti2; where t > 1854; keep date t rdt var; run; data var_pred; set prevvarmulti1_ (rename = (var1 = var_predite)); run; data fin.varmulti; merge var_obs var_pred; by t; keep date rdt var_observee var_predite; run; ods listing; ods html; title color=Darkcyan 'Prvisions GARCH de la VaR'; symbol1 i=join color=MediumSeaGreen; symbol2 i=join color=Olive; symbol3 i=join color=indianred; axis1 label=(color=Darkcyan 'Rendement et VaR'); axis2 label=(color=Darkcyan 'date');*order=(1860 to 2305 by 50);

69

legend1 value=(tick=1 color=darkgreen j=c 'Rendement' tick=2 color=OliveDrab j=c 'VaR prdite' tick=3 color=indianred j=c 'VaR observe') label=none frame ; proc gplot data=fin.varmulti; *reprsentation de la VaR observe et de la VaR prdite; plot rdt*date var_predite*date var_observee*date / overlay vaxis=axis1 haxis=axis2 legend=legend1; run; quit; title; *calcul de la frquence de violation; data freqvarmulti; set fin.varmulti; *f=1 si violation, 0 sinon; if rdt<var_predite then f=1; else f=0; N+F; keep f N; run; ods listing; ods html; proc freq data=freqvarmulti; tables f; *frquence des violations; run;

/*********************************/ /* Backtesting - VaR diversifie */ /*********************************/ /*********************************************************/ /* Test de couverture non conditionnelle (UC) */ /*********************************************************/ title 'VaR diversifie'; data backM; set fin.varmulti; if rdt<var_predite then N=1; else N=0; N1+N; *nombre de violations; p=N1/928; *p=proba de violations; keep rdt var_predite N N1 p; run; data backM1; set backM end=dernier; *on prend la dernire ligne pour avoir le nombre total de violations; if dernier; length conclusion $16; LR_UC=-2*log(((1-0.01)**(928-N1))*(0.01**N1))+2*log(((1N1/928)**(928-N1))*((N1/928)**N1)); *stat UC; prob=1-probchi(LR_UC,1); *loi de chi2 1 degr de libert; if prob<0.01 then conclusion='rejet H0'; else conclusion='non rejet de H0'; keep LR_UC conclusion;

70

proc print; run; *on accepte H0---p-value=

0.30396;

/****************************************************/ /* Test de couverture conditionnelle (CC) */ /****************************************************/ data H0ccmulti; set fin.varmulti end=dernier; if rdt<var_predite then N=1;else N=0; alpha=0.01; p00=1-alpha; p01=alpha; p10=1-alpha; p11=alpha; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; t1=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data H1ccmulti; set fin.varmulti end=dernier; if rdt<var_predite then N=1;else N=0; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; run; data H1ccmulti; set H1ccmulti; p00=n00/(n00+n01); p01=n01/(n01+n00); p10=n10/(n10+n11); p11=0.00000000000001; t2=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data ccvarmulti; merge H0ccmulti H1ccmulti; run; data ccvarmulti; set ccvarmulti; length conclusion $12; LR_cc=-2*(log(t1)-log(t2)); *stat cc; prob=1-probchi(LR_cc,2); if prob<0.01 then conclusion='rejet H0'; else conclusion='non rejet H0'; *test chi2; keep LR_cc prob conclusion; run; proc print data=ccvarmulti;run; *On accepte H0---p-value= 0.75129; /****************************************************/ /* Test d'indpendance (IND) */

71

/****************************************************/ data indM; set fin.varmulti end=dernier; if rdt<var_predite then N=1;else N=0; p=0.008; p00=1-p;p01=p;p10=1-p;p11=p; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; t1=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data indM1; set fin.varmulti end=dernier; if rdt<var_predite then N=1;else N=0; Nt_1=lag(N); if (N=1 and Nt_1=0) then n01+1; else if (N=1 and Nt_1=1) then n11+1; else if (N=0 and Nt_1=0) then n00+1; else if (N=0 and Nt_1=1) then n10+1; if dernier; run; data indM1; set indM1; p00=n00/(n00+n01); p01=n01/(n01+n00); p10=n10/(n10+n11); p11=0.00000000000001; t2=((1-p01)**n00)*(p01**n01)*((1-p11)**n10)*(p11**n11); run; data indVARM; merge indM indM1; run; data indVARM; set indVARM; length conclusion $12; LR_ind=-2*(log(t1)-log(t2)); *stat ind; prob=1-probchi(LR_ind,1); if prob<0.01 then conclusion='rejet H0'; else conclusion='non rejet H0'; *test chi2; keep LR_ind prob conclusion; run; proc print data=indVARM;run;

72