Sujet 11 : Modélisation d actifs financiers Sujet proposé par J. Lelong & M. Echenim. [DOCUMENTATION API LOGICIEL MODAFI]



Documents pareils
Manuel d Utilisateur - Logiciel ModAFi. Jonathan ANJOU - Maud EYZAT - Kévin NAVARRO

Corrigés des premiers exercices sur les classes

Options et Swap sur intérêt

Les techniques des marchés financiers

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Pratique des options Grecs et stratégies de trading. F. Wellers

LISTE D EXERCICES 2 (à la maison)

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Programme Compte bancaire (code)

Liste des notes techniques... xxi Liste des encadrés... xxiii Préface à l édition internationale... xxv Préface à l édition francophone...

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

QUESTIONS D ENTRETIENS EN FINANCE DE MARCHE

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Plateforme PAYZEN. Définition de Web-services

1/ Présentation de SQL Server :

Probabilités III Introduction à l évaluation d options

Chapitre 2. Classes et objets

TP, première séquence d exercices.

Premiers Pas en Programmation Objet : les Classes et les Objets

Langage Java. Classe de première SI

Plan du cours. Historique du langage Nouveautés de Java 7

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TD/TP PAC - Programmation n 3

GUIDE UTILISATEUR. KPAX Discover

Alfstore workflow framework Spécification technique

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Présentation Salle des marchés. Centrale Lille Octobre Contacts: Matthieu MONLUN Responsable de la salle des marchés

SOFI Gestion+ Version 5.4. Echanges de données informatiques Spicers Sofi gestion+ Groupements. SOFI Informatique. Actualisé le

Utilisation d objets : String et ArrayList

Valorisation d es des options Novembre 2007

Algorithmique et programmation : les bases (VBA) Corrigé

Processus 6 : Gestion de la trésorerie et du financement

Définition des Webservices Ordre de paiement par . Version 1.0

TP 1. Prise en main du langage Python

LES MARCHÉS DÉRIVÉS DE CHANGE. Finance internationale 9éme ed. Y. Simon & D. Lautier

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Introduction à JDBC. Accès aux bases de données en Java

TP1 : Initiation à Java et Eclipse

Traduction des Langages : Le Compilateur Micro Java

Cours d initiation à la programmation en C++ Johann Cuenin

Tp 1 correction. Structures de données (IF2)

Programmation avec des objets : Cours 7. Menu du jour

TP de risque management Risque Forex

Remote Method Invocation (RMI)

Calcul et gestion de taux

Projet Active Object

Bases Java - Eclipse / Netbeans

Question 1: Analyse et évaluation des obligations / Gestion de portefeuille

Programmation en Java IUT GEII (MC-II1) 1

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Tutoriel D utilisation. Du PGI Open line d EBP

Héritage presque multiple en Java (1/2)

NOTICE MÉTHODOLOGIQUE SUR LES OPTIONS DE CHANGE

2- Comment les traders gèrent les risques

Programmation Objet Java Correction

TP1 Méthodes de Monte Carlo et techniques de réduction de variance, application au pricing d options

Table des matières. Avant-propos. Chapitre 2 L actualisation Chapitre 1 L intérêt Chapitre 3 Les annuités III. Entraînement...

LES TYPES DE DONNÉES DU LANGAGE PASCAL

JEU BOURSIER Séance d introduction à la plateforme de trading SaxoWebTrader. - Pour débutants -

TP2 : Client d une BDD SqlServer

Exercice du cours Gestion Financière à Court Terme : «Analyse d un reverse convertible»

COMPRENDRE LES OPTIONS BINAIRES - LEÇON 1

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Options, Futures, Parité call put

Exchange Traded Funds (ETF) Mécanismes et principales utilisations. 12 Mai 2011

Programmer en JAVA. par Tama

Programmation par les Objets en Java

Capital économique en assurance vie : utilisation des «replicating portfolios»

TD/TP PAC - Programmation n 3

TD3: tableaux avancées, première classe et chaînes

Hedging delta et gamma neutre d un option digitale

Traitement des données avec Microsoft EXCEL 2010

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Le Mini E-book de XForex pour débutants TRADER PRO. Guide de trading de devises

Guide de prise en main. Yourcegid SOLOS. Devis-Factures. 12/08/2013 Page 1 / 38

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

HighPush. document /06/2009 Révision pour version /11/2008 Revision pour la /10/2008 Documentation initiale.

Conversion d un entier. Méthode par soustraction

PROJET MODELE DE TAUX

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Comprendre vos relevés de comptes CFD/FOREX:

Chapitre 10. Les interfaces Comparable et Comparator 1

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

LA GESTION DU RISQUE DE CHANGE. Finance internationale, 9 ème édition Y. Simon et D. Lautier

as Architecture des Systèmes d Information

GUIDE PRATIQUE. Du provisionnement des emprunts à risques

Manuel du logiciel PrestaTest.

Cours 1: Java et les objets

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Bases de programmation. Cours 5. Structurer les données

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Utilitaires méconnus de StrataFrame

Dérivés Financiers Contrats à terme

Étude des résultats des investisseurs particuliers sur le trading de CFD et de Forex en France

Produits structurés. Sacha Duparc, Développement & Trading Produits Structurés

Plateforme PAYZEN. Intégration du module de paiement pour la plateforme Magento version 1.3.x.x. Paiement en plusieurs fois. Version 1.

BTS Groupement A. Mathématiques Session Spécialités CIRA, IRIS, Systèmes électroniques, TPIL

Transcription:

Sujet 11 : Modélisation d actifs financiers Sujet proposé par J. Lelong & M. Echenim. [DOCUMENTATION API LOGICIEL MODAFI] 1 P a g e

Sommaire Introduction p.3 Gestion de l Univers p.3 o Ajout / Suppression d actifs o Corrélation Simuler des actifs p.5 Exploiter les résultats p.6 Evaluation d actifs p.6 Erreurs p.7 XML Sauvegarde / Restauration de l Univers p.7 o Structure générale o Détails des taux o Détails des sous-jacents o Détails des corrélations o Détails des produits dérivés o Exemple complet XML Exportation des cours simulés p.13 o Structure générale o Exemple complet XML Exportation des évaluations p.15 o Structure générale o Exemple complet 2 P a g e

I. Introduction Ce document décrit de manière informelle comment utiliser l API. On détaille les fonctions principales de l API (avec des exemples d utilisation) ainsi que l architecture des fichiers d entrée/sortie de l application. Pour la documentation exhaustive et l architecture de l application, se référer au document d implémentation. II. Gestion de l Univers On sépare les actifs en trois catégories : les actifs «simples» dont le cours ne dépend pas d autres actifs (classe SousJacent), les actifs dont le cours dépend d un sous-jacent (classe ProduitDerive) et les taux (classe Taux). Tous les actifs sont stockés dans une classe appelée Univers. Cette classe est unique et ne peut pas être instanciée par l utilisateur. Chaque actif sous-jacent, chaque produit dérivé et chaque taux peuvent être stockés dans cette structure. L instance unique de l univers est obtenue avec la fonction : static Univers GetInstance() 1) Ajout / Suppression d actifs Les fonctions de création/ajout d actifs sont les suivantes : void AjouterObligationCoupon(String nom, int maturite, Double taux_coupon, Double valeur, Double intervalle,datetime date) void AjouterCallDividende(String nom, SousJacentSimple sj, int maturite, Double strike, Double r) void AjouterCallDividendePro(String nom, SousJacentSimple sj, int maturite, Double strike, Double r) void AjouterCallSimple(String nom, SousJacentSimple sj, int maturite, Double strike, Double r) void AjouterPutDividende(String nom, SousJacentSimple sj, int maturite, Double strike, Double r) void AjouterPutDividendePro(String nom, SousJacentSimple sj, int maturite, Double strike, Double r) void AjouterPutSimple(String nom, SousJacentSimple sj, int maturite, Double strike, Double r) void AjouterSpotForex(String nom, Double pip, Double solde, Double valeur,double levier_max, Definitions.typeDevise devc, Definitions.typeDevise dev1, Definitions.typeDevise dev2) void AjouterSousJacentMBGDividendePro(String nom, Double spot, Double tendance, Double volatilite,double proportion, Double intervalle) void AjouterSousJacentMBGDividende(String nom, Double spot, Double tendance, Double volatilite,double dividende, Double intervalle) void AjouterSousJacentMB(String nom, Double spot) void AjouterSousJacentMBD(String nom, Double spot, Double tendance, Double volatilite) void AjouterSousJacentMBG(String nom, Double spot, Double tendance, Double volatilite) void AjouterSousJacentMerton(String nom, Double spot, Double tendance, Double volatilite, Double lambda, Double moyennesauts, Double alpha) void AjouterSousJacentKouWang(String nom, Double spot, Double tendance, Double volatilite, Double lambda, Double p, Double lambda1, Double lambda2) void AjouterSousJacentPoisson(String nom, Double spot, Double lambda) void AjouterSousJacent(SousJacent sj) void AjouterZeroCoupon(String nom, Taux taux, int maturite) 3 P a g e

void AjouterTauxZeroCouponVasicek(String nom, Double tinit, Double volatilite, Double a, Double b, int maturite) void AjouterTauxCourtVasicek(String nom, Double tinit, Double volatilite, Double a, Double b) void AjouterBasisSwapTaux(string nom, double nominal, int maturite, DateTime dateemission, int intervallevar1, int intervallevar2, int convention1, int convention2, bool typeswap, double spread1, double spread2, int typetauxvariable1, int typetauxvariable2) void AjouterSwapDevise(string nom, double nomdomestique, int maturite, DateTime dateemission, int intervalledomestique, int intervalleetrangere, int conventiond, int conventione, bool typeswap, Definitions.typeDevise deviseetrangere, Definitions.typeDevise devisedomestique, double txfixedomestique, double txfixeetrangere) void AjouterSwapTaux(string nom, double nominal, int maturite, DateTime dateemission, int intervallefixe, int intervallevar, int conventionf, int conventionv, bool typeswap, double txfixe, double spread, int typetauxvariable) On peut également instancier des actifs directement avec leur constructeur, puis les ajouter dans l univers avec des fonctions génériques d ajout (voir la documentation du code). Il est cependant fortement conseillé d utiliser les méthodes précédentes, car elles garantissent la cohérence entre les actifs et les taux. Ainsi dans tout le programme, un actif est identifié par son nom. Passer par la classe univers pour gérer les actifs garantit l unicité du nom. De même, en passant par les constructeurs, on peut très bien faire des associations produits dérivés / sous-jacents incohérentes (ex. créer un call de sous-jacent suivant un processus de Poisson). Les méthodes précédentes interdisent de telles associations. On peut accéder aux actifs et aux taux enregistrés dans l univers avec : ProduitDerive Univers.GetProduitDerive(String nomproduit) SousJacent Univers.GetSousJacent(String nomsousjacent) Taux GetTaux(String nomtaux) Exemple : Le code suivant ajoute une action Google suivant un modèle brownien géométrique (spot = 100, tendance = 0.05, volatilité = 20%) et un call sur cet actif (prix d exercice = 110, maturité = 3 mois, taux d intérêt mensuel = 0.4%). Univers uni = Univers.GetInstance() ; uni.ajoutersousjacentmbg("goog", 100, 0.05, 0.2) ; SousJacent sj = uni.getsousjacent("goog") ; uni.ajoutercall("call_goog", sj, 3, 110, 0.004); Il est possible de retirer des actifs et des taux avec les fonctions suivantes: void SupprimerSousJacent(String nom) void SupprimerProduitDerive(String nom) void SupprimerTaux(String nom) void Univers.ViderUnivers() On peut également charger/enregistrer un univers préenregistré dans un fichier avec la fonction : void Output.RestaureUniversXML(String nomfichier) void Output.sauvegardeUniversXML(String nomfichier) (cf. section VII pour la structure des fichiers XML) 4 P a g e

2) Corrélation Pour corréler/décorréler des actifs: void Univers.SetCorrelation(String noma1, String noma2, Double correlation) Double Univers.GetCorrelation(String noma1, String noma2) void DecorrelerUnivers() Remarque : Il n y a pas d erreur levée quand on entre des corrélations incohérentes. Une erreur sera levée plus tard lors de la simulation. On rappelle qu ajouter un sous-jacent à un univers cohérent est susceptible de briser cette cohérence. Exemple : Le code suivant définit et corrèle les actions Google et Microsoft à 50%. Ces actifs ne suivent pas le même modèle. Univers uni = Univers.GetInstance() ; uni.ajoutersousjacentmbg("goog", 100, 0.05, 0.2) ; uni.ajoutersousjacentmbd("msft", 50, 0.03, 0.15) ; SetCorrelation("GOOG", "MSFT", 0.5) /* Idem SetCorrelation("MSFT", "GOOG", 0.5) */ III. Simuler des actifs Le cours d un actif sous-jacent est aléatoire et il est calculé à partir d un mouvement brownien. Le cours d un produit dérivé est obtenu en appliquant une formule fermée sur le cours de son sous-jacent. C est la classe Simulation qui pilote les simulations. Il est nécessaire d instancier cette classe en précisant les paramètres de la grille de simulation dans le constructeur. pas est le pas de discrétisation de la simulation, nbunitesdetemps est le nombre d unités de temps sur lesquelles on simule et toutcorreler est un booléen indiquant si on simule les actifs financiers sur le même mouvement brownien (corréler tous les actifs à 100%). Activer toutcorreler masque donc toutes les corrélations enregistrées. Simulation(Double pas, int nbunitesdetemps, Boolean toutcorreler) On peut alors ajouter des actifs ou des taux à simuler avec les méthodes : void Simulation.AjouterProduitDeriveALaSimulation(ProduitDerive prod) void Simulation.AjouterSousJacentALaSimulation(SousJacent sj) void Simulation.AjouterTauxALaSimulation(Taux taux) Pour ajouter un produit dérivé, il n est pas nécessaire d ajouter son sous-jacent. Celui-ci sera ajouté automatiquement avant de lancer la simulation, mais n apparaîtra pas dans le tableau des résultats. Pour lancer la simulation, il faut simplement appeler la fonction : Resultat Simulation.Simule() Cette méthode retourne un objet Resultat détaillé dans la section suivante. 5 P a g e

Exemple : Le code suivant simule les deux actifs précédents pendant 6 mois avec 10 subdivisions par mois. Simulation sim = new Simulation(0.1, 6, false); SousJacent action = Univers.GetInstance().GetSousJacent("GOOG"); sim.ajoutersousjacentalasimulation(action); ProduitDerive option = Univers.GetInstance().GetProduitDerive("Call_GOOG"); sim.ajouterproduitderivealasimulation(option); Resultat res = sim.simule(); IV. Exploiter les résultats Les résultats d une simulation sont stockés dans un objet Resultat. Les cours des actifs simulés peuvent être récupérés en faisant appel à la fonction : Double Resultat.Prix(String nomactif, Double date) La date doit être cohérente avec la grille de la simulation. On lève systématiquement une erreur si la date passée en paramètre ne correspond pas à une date de la grille (la fonction ne cherche pas à arrondir à la date de simulation la plus proche). Exemple : avec la simulation précédente Resultat res = sim.simule(); res.prix("goog", 0); // correct, prix spot de l'action res.prix("call_goog", 1.10); // correct, prix à un 1.1 mois de l'option res.prix("call_goog", 1.11); // incorrect, le pas de simulation est de 0.1 res.prix("call_goog", 4); // correct, la maturité de l option est dépassée mais on reste dans l'intervalle de simulation (0 à 6 mois), l option vaut 0 res.prix("call_goog", 7); // incorrect, on n'est plus dans l'intervalle de simulation Les résultats peuvent être exportés dans des fichiers au format CSV et XML avec les fonctions : void Output.simToCSV(String nomfichier) void Output.simToXML(String nomfichier) (cf. section VIII pour la structure des fichiers XML) V. Evaluation d actifs Certains actifs comme les swap, les obligations couponnées et les spot Forex ne sont pas simulables. Il est simplement possible d évaluer leur prix à la date de création du produit. Les fonctions permettant d évaluer les actifs sont les suivantes (elle retournent le prix du produit en date d évaluation): double Swap.Evalue() double ObligationCoupon.Evalue() double SpotForex.Evalue() 6 P a g e

Les résultats peuvent être exportés dans des fichiers au format XML avec la fonction : void Output.evalToXML(String nomfichier) (cf. section IX pour la structure des fichiers XML) VI. Erreurs On lève une exception à chaque utilisation incorrecte d une fonction. On vérifie systématiquement la cohérence des paramètres des fonctions de l API : les références ne doivent pas être à null et certaines valeurs ont des contraintes particulières (comme être positives). On vérifie également les erreurs d exécution plus fines comme la cohérence des actifs dans l univers (deux actifs ne peuvent pas avoir le même nom), les relations entre les actifs (le sous-jacent d un call est obligatoirement modélisé par un mouvement brownien géométrique). 5 Exemple : La fonction AjouterSousJacentPoisson(String nom, Double spot, Double lambda) lève les erreurs suivantes : SjNameException("Erreur : un sous-jacent doit contenir un nom.") si le nom est à null ou la chaine vide. UniversArgumentException("Erreur : L'actif " + nom + " existe déjà dans l'univers.") si un autre actif du même nom existe déjà dans l univers. ArgumentException("Paramètre \"spot\" negatif", "spot") si le spot est négatif ou nul. ArgumentException("Paramètre \"lambda\" negatif", "lambda") si le paramètre lambda est négatif ou nul. On utilise les exceptions fournies par le framework (ArgumentException dans l exemple précédent), et on définit des exceptions génériques (SjNameException et UniversArgumentException dans l exemple précédent) pour factoriser le code. VII. XML Sauvegarde / Restauration de l Univers 1) Structure générale La structure générale du fichier de sauvegarde XML est la suivante : <?xml version="1.0"?> <Univers> <ListeTaux> /* détails des taux */ </ListeTaux> <ListeSousJacents> /* détails des sous-jacents */ </ListeSousJacents> <ListeProduitsDerives> /* détails des produits dérivés */ </ListeProduitsDerives> <MatriceCorrelation> 7 P a g e

/* détails des corrélations */ </MatriceCorrelation> </Univers> 2) Détails des taux A l intérieur de la balise <ListeTaux> doivent être décrits tous les taux de l univers. Pour décrire un taux, on doit : ouvrir une balise <Taux > possédant un attribut nomtaux de valeur le nom du taux. Ouvrir une balise <TauxInit>, écrire la valeur du cours initial du taux, puis refermer le taux initial avec la balise </TauxInit>. Selon le type du taux, plusieurs balises sont à remplir : voici les différents actifs que l on peut ajouter : 2-1) Taux cours modèle Vasicek Ouvrir une balise <TypeTaux> possédant un attribut nomtypetaux de valeur TauxCourtVasicek, puis refermer le type de taux avec la balise </TypeTaux> Ouvrir une balise <Modele>, possédant un attribut nommodele de valeur Vasicek. Ouvrir une balise pour chaque paramètre, donner la valeur du paramètre, puis refermer la balise. Les paramètres à renseigner doivent être indiqués dans l ordre suivant : Volatilite, A, B. Refermer le modèle avec la balise </Modele>. Refermer le taux avec la balise </Taux>. Exemple : <Taux nomtaux="taux 2"> <TauxInit>1</TauxInit> <TypeTaux nomtypetaux="tauxcourtvasicek" /> <Modele nommodele="vasicek"> <Volatilite>0,5</Volatilite> <A>0,3</A> <B>0,2</B> </Modele> </Taux> 2-2) Taux zéro-coupon modèle Vasicek Ouvrir une balise <TypeTaux> possédant un attribut nomtypetaux de valeur TauxZCVasicek, puis refermer le type de taux avec la balise </TypeTaux> Ouvrir une balise <Modele>, possédant un attribut nommodele de valeur Vasicek. Ouvrir une balise pour chaque paramètre, donner la valeur du paramètre, puis refermer la balise. Les paramètres à renseigner doivent être indiqués dans l ordre suivant : Volatilite, A, B. Refermer le modèle avec la balise </Modele>. Refermer le taux avec la balise </Taux>. Exemple : <Taux nomtaux="taux 1"> <TauxInit>1</TauxInit> <TypeTaux nomtypetaux="tauxzcvasicek" /> <Maturite>2</Maturite> <Modele nommodele="vasicek"> <Volatilite>0,5</Volatilite> <A>0,3</A> <B>0,2</B> </Modele> </Taux> 8 P a g e

3) Détails des sous-jacents A l intérieur de la balise <ListeSousJacents> doivent être décrits tous les sous-jacents de l univers. Pour décrire un sous-jacent, on doit : ouvrir une balise <SousJacent> possédant un attribut nomsousjacent de valeur le nom du sous-jacent. Selon le type d actif, plusieurs balises sont à remplir : voici les différents actifs que l on peut ajouter : 3-1) Sous-jacents simples Ouvrir une balise <TypeSousJacent > possédant un attribut nomtypesousjacent de valeur SousJacentSimple Ouvrir une balise <Spot>, écrire la valeur du spot du sous-jacent (valeur initiale du cours), puis refermer le spot avec la balise </Spot>. Ouvrir une balise <Modele>, possédant un attribut nommodele de valeur le nom du modèle mathématique du sous-jacent ("MB", "MBD", "MBG", "MBGDividende", "MBGDividendePro", "Merton", "KouWang", "Vasicek", ou "Poisson"). Ouvrir une balise pour chaque paramètre du modèle mathématique choisi, donner la valeur du paramètre, puis refermer la balise. Les paramètres varient selon le modèle choisi, et doivent être indiqués dans l ordre suivant ; o MB : aucun paramètre. o MBD : Tendance, Volatilite. o MBG : Tendance, Volatilite. o MBGDividende : Tendance, Volatilite, Valeur, Intervalle. o MBGDividendePro : Tendance, Volatilite, Proportion, Intervalle. o Merton : Tendance, Volatilite, Lambda, Alpha, M (moyenne des sauts). o KouWang : Tendance, Volatilite, Lambda, P, Lambda1, Lambda2. o Poisson : Lambda. Refermer le modèle avec la balise </Modele>. Refermer le type de sous-jacent avec la balise </TypeSousJacent>. Refermer le sous-jacent avec la balise </SousJacent>. Exemple : sous-jacent simple mouvement brownien géométrique avec dividendes proportionnels <SousJacent nomsousjacent="action avec dividendes proportionnels"> <TypeSousJacent nomtypesousjacent="sousjacentsimple"> <Spot>100</Spot> <Modele nommodele="mbgdividendepro"> <Tendance>0,5</Tendance> <Volatilite>0,2</Volatilite> <Proportion>1000</Proportion> <Intervalle>0,4</Intervalle> </Modele> </TypeSousJacent> </SousJacent> 3-2) Obligations Ouvrir une balise <TypeSousJacent > possédant un attribut nomtypesousjacent de valeur Obligation 9 P a g e

Ouvrir une balise <Maturite >, écrire la valeur de la maturité (en années), puis refermer la maturité avec la balise </Maturite>. Ouvrir une balise <TypeObligation, possédant un attribut type de valeur le nom du type d obligation ("ZeroCoupon", "ObligationCoupon"). Ouvrir une balise pour chaque paramètre du type choisi, donner la valeur du paramètre, puis refermer la balise. Les paramètres varient selon le modèle choisi, et doivent être indiqués dans l ordre suivant ; o ZeroCoupon : Taux. o ObligationCoupon : TauxCoupon, Valeur, Intervalle, DateEmission. Refermer le type d obligation avec la balise </TypeObligation >. Refermer le type de sous-jacent avec la balise </TypeObligation >. Refermer le sous-jacent avec la balise </SousJacent>. Exemple : obligation avec coupons <SousJacent nomsousjacent="obligation avec coupons"> <TypeSousJacent nomtypesousjacent="obligation"> <Maturite>10</Maturite> <TypeObligation nomtypeobligation="obligationcoupon"> <TauxCoupon>0,3</TauxCoupon> <Valeur>100</Valeur> <Intervalle>0,5</Intervalle> <DateEmission>09/06/2012 00:00:00</DateEmission> </TypeObligation> </TypeSousJacent> </SousJacent> Tous les sous-jacents de l univers doivent être décrits selon les schémas ci-dessus, et écrits les uns à la suite des autres dans la balise <ListeSousJacents>. 4) Détails des produits dérivés A l intérieur de la balise <ListeProduitsDerives> doivent être décrits tous les produits dérivés de l univers. Pour décrire un produit dérivé, on doit : Ouvrir une balise <ProduitDerive> possédant un attribut nomproduitderive de valeur le nom du produit dérivé. Ouvrir une balise <TypeProduitDerive> possédant un attribut nomtypeproduitderive de valeur le nom du type du produit dérivé : "Option", "Swap" ou "SpotForex". 4-1) Dans le cas d une option Ouvrir une balise <SousJacent>, écrire le nom du sous-jacent, puis refermer le sous-jacent avec la balise </SousJacent>. Ouvrir une balise pour chaque paramètre, donner la valeur du paramètre, puis refermer la balise. Les paramètres à renseigner doivent être indiqués dans l ordre suivant : Maturite, Strike, Taux. Ouvrir une balise <TypeOption>, possédant un attribut nomtypeoption de valeur le nom du type de l option ("CallSimple", "CallDividende", "CallDividendePro","PutSimple", "PutDividende","PutDividendePro"). Refermer le type d option avec la balise </TypeOption>. Refermer le type de produit dérivé avec la balise </TypeProduitDerive>. Refermer le produit dérivé avec la balise </ProduitDerive>. Exemple : call sur sous-jacents avec dividendes proportionnels <ProduitDerive nomproduitderive="call avec dividendes proportionnels"> 10 P a g e

<TypeProduitDerive nomtypeproduitderive="option"> <SousJacent>action avec dividendes proportionnels</sousjacent> <Maturite>10</Maturite> <Strike>100</Strike> <Taux>0,05</Taux> <TypeOption nomtypeoption="calldividendepro" /> </TypeProduitDerive> </ProduitDerive> Le sous-jacent dont le nom est indiqué dans la balise <SousJacent> doit impérativement avoir été défini précédemment dans la balise <ListeSousJacents>. 4-2) Dans le cas d un swap Ouvrir une balise pour chaque paramètre, donner la valeur du paramètre, puis refermer la balise. Les paramètres à renseigner doivent être indiqués dans l ordre suivant : Nominal, Maturite, DateEmission, Intervalle1, Intervalle2, Convention1, Convention 2, CaracteristiqueSwap. Ouvrir une balise <TypeSwap>, possédant un attribut nomtypeswap de valeur le nom du type du swap ("SwapTaux", "BasisSwap", "SwapDevise"). Ouvrir une balise pour chaque paramètre du type choisi, donner la valeur du paramètre, puis refermer la balise. Les paramètres à renseigner varient selon le type choisi, et doivent être indiqués dans l ordre suivant : o SwapTaux : TauxFixe, TypeTauxVariable, SpreadTauxVariable. o BasisSwap : TypeTauxVariable1, TypeTauxVariableVariable2, SpreadTauxVariable1, SpreadTauxVariable2. o SwapDevise : DeviseDomestique, DeviseEtrangere, TauxFixeDomestique, TauxFixeEtrangere. Refermer le type de swap avec la balise </TypeSwap>. Refermer le type de produit dérivé avec la balise </TypeProduitDerive>. Refermer le produit dérivé avec la balise </ProduitDerive>. Exemple : swap de devise <ProduitDerive nomproduitderive="swap de devises"> <TypeProduitDerive nomtypeproduitderive="swap"> <Nominal>100</Nominal> <Maturite>10</Maturite> <DateEmission>09/06/2012 00:00:00</DateEmission> <Intervalle1>1</Intervalle1> <Intervalle2>1</Intervalle2> <Convention1>0</Convention1> <Convention2>0</Convention2> <CaracteristiqueSwap>True</CaracteristiqueSwap> <TypeSwap nomtypeswap="swapdevise"> <DeviseDomestique>EUR</DeviseDomestique> <DeviseEtrangere>USD</DeviseEtrangere> <TauxFixeDomestique>0,5</TauxFixeDomestique> <TauxFixeEtrangere>0,3</TauxFixeEtrangere> </TypeSwap> </TypeProduitDerive> </ProduitDerive> 4-3) Dans le cas d un spotforex Ouvrir une balise pour chaque paramètre, donner la valeur du paramètre, puis refermer la balise. Les paramètres à renseigner doivent être indiqués dans l ordre suivant : Pip, SoldeCompte, ValeurInvestie, LevierMax, DeviseCompte, DeviseChange1, DeviseChange2. Refermer le type de produit dérivé avec la balise </TypeProduitDerive>. Refermer le produit dérivé avec la balise </ProduitDerive>. 11 P a g e

Exemple : <ProduitDerive nomproduitderive="operation spot sur Forex"> <TypeProduitDerive nomtypeproduitderive="spotforex"> <Pip>0,0001</Pip> <SoldeCompte>1919,76249699109</SoldeCompte> <ValeurInvestie>10000</ValeurInvestie> <LevierMax>200</LevierMax> <DeviseCompte>EUR</DeviseCompte> <DeviseChange1>EUR</DeviseChange1> <DeviseChange2>USD</DeviseChange2> </TypeProduitDerive> </ProduitDerive> 5) Détails des corrélations Les corrélations entre les sous-jacents, taux sont spécifiées dans la balise <MatriceCorrelation>. Par défaut, la matrice de corrélation entre les sous-jacents, taux est la matrice identité (tous les sousjacents et taux sont indépendants, donc de corrélation nulle). Pour modifier la corrélation entre deux actifs, il suffit d ouvrir une balise <Cellule> avec deux paramètres actif1 et actif2 de valeur les noms des deux sous-jacents à corréler, d écrire la valeur de la nouvelle corrélation, puis de fermer la corrélation avec la balise </Cellule>. Exemple : corrélation correcte en XML : <Cellule actif1=" nom de l actif 1" actif2="nom de l actif 2">0,5</Cellule> Les corrélations doivent être mises à la suite dans la balise <MatriceCorrelation>. Si une corrélation entre deux sous-jacents est définie plus d une fois, c est la dernière valeur qui est conservée par l application lors de la restauration d un univers. Remarque : Les flottants doivent être entrés dans le fichier XML avec une virgule et non un point. 6) Exemple complet Nous détaillons ici un exemple de simulation traduit en fichier XML dans lequel on définit un taux Taux1, un sous-jacent simple SJ1, une obligation Obl1 et un produit dérivé P1 vérifiant : Taux 1 est un taux court modèle Vasicek de volatilité 0.5, de coefficient A = 0.3, B = 0.2 et de valeur initial 1. SJ1 est un actif de spot 100 et ayant pour modèle le mouvement brownien géométrique de paramètres une tendance de 0.05 et une volatilité de 0.2. Obl1 est une obligation de nominal 100, de maturité 10 ans, versant des coupons de 5%, et ayant été émise le 15 février 2012. P1 est une option d achat (produit dérivé de type Call européen simple) portant sur le sous-jacent SJ1, de prix d exercice 90 (strike) et de maturité 10 sous un taux d intérêt de 0.04. <?xml version="1.0"?> <Univers> <ListeTaux> <Taux nomtaux="taux1"> <TauxInit>1</TauxInit> <TypeTaux nomtypetaux="tauxcourtvasicek" /> 12 P a g e

<Modele nommodele="vasicek"> <Volatilite>0,5</Volatilite> <A>0,3</A> <B>0,2</B> </Modele> </Taux> </ListeTaux> <ListeSousJacents> <SousJacent nomsousjacent="sj1"> <TypeSousJacent nomtypesousjacent="sousjacentsimple"> <Spot>100</Spot> <Modele nommodele="mbg"> <Tendance>0,05</Tendance> <Volatilite>0,2</Volatilite> </Modele> </TypeSousJacent> </SousJacent> <SousJacent nomsousjacent="obl1"> <TypeSousJacent nomtypesousjacent="obligation"> <Maturite>10</Maturite> <TypeObligation nomtypeobligation="obligationcoupon"> <TauxCoupon>0,05</TauxCoupon> <Valeur>100</Valeur> <Intervalle>1</Intervalle> <DateEmission>15/02/2012 00:00:00</DateEmission> </TypeObligation> </TypeSousJacent> </SousJacent> </ListeSousJacents> <ListeProduitsDerives> <ProduitDerive nomproduitderive="p1"> <TypeProduitDerive nomtypeproduitderive="option"> <SousJacent>SJ1</SousJacent> <Maturite>2</Maturite> <Strike>90</Strike> <Taux>0,04</Taux> <TypeOption nomtypeoption="callsimple" /> </TypeProduitDerive> </ProduitDerive> </ListeProduitsDerives> <MatriceCorrelation> <Cellule actif1="sj1" actif2="sj1">1</cellule> <Cellule actif1="sj1" actif2="taux1">0</cellule> <Cellule actif1="taux1" actif2="sj1">0</cellule> <Cellule actif1="taux1" actif2="taux1">1</cellule> </MatriceCorrelation> </Univers> VIII. XML Exportation des cours simulés 1) Structure générale La structure générale du fichier reprend la précédente (il n y a pas de section pour les corrélations) : <?xml version="1.0"?> <Simulation> <ListeTaux> /* détails des taux */ </ListeTaux> <ListeSousJacents> 13 P a g e

/* détails des sous-jacents */ </ListeSousJacents> <ListeProduitsDerives> /* détails des produits dérivés */ </ListeProduitsDerives> </Simulation> Après chaque ouverture/fermeture de <Taux>, <SousJacent> ou <ProduitDerive> on ajoute les cours. Pour décrire un cours, on doit ouvrir une balise <Valeur> possédant un attribut indice de valeur le cours de l actif à la date indice (l attribut est nommé ainsi car la date coïncide avec l indice du cours dans les structures de données interne). 2) Exemple complet Nous détaillons ici un exemple de simulation traduit en fichier XML dans lequel on définit un sousjacent SJ1 et un produit dérivé P1 vérifiant : SJ1 est un actif de spot 100 et ayant pour modèle le mouvement brownien géométrique de paramètres une tendance de 0.05 et une volatilité de 0.2. P1 est une option d achat (produit dérivé de type Call européen simple) portant sur le sous-jacent SJ1, de prix d exercice 90 (strike) et de maturité 2 sous un taux d intérêt de 0.04. La simulation s effectue sur une durée de 5 unités de temps subdivisées en 2 simulations. <?xml version="1.0"?> <Simulation> <ListeTaux /> <ListeSousJacents> <SousJacent nomsousjacent="sj1"> <TypeSousJacent nomtypesousjacent="sousjacentsimple"> <Spot>100</Spot> <Modele nommodele="mbg"> <Tendance>0,05</Tendance> <Volatilite>0,2</Volatilite> </Modele> </TypeSousJacent> </SousJacent> <Valeur indice="1">100</valeur> <Valeur indice="2">112,35409</valeur> <Valeur indice="3">137,11955</valeur> <Valeur indice="4">139,30552</valeur> <Valeur indice="5">160,54333</valeur> <Valeur indice="6">182,13675</valeur> <Valeur indice="7">184,95295</valeur> <Valeur indice="8">147,8214</valeur> <Valeur indice="9">163,55084</valeur> <Valeur indice="10">203,87873</valeur> <Valeur indice="11">195,21022</valeur> </ListeSousJacents> <ListeProduitsDerives> <ProduitDerive nomproduitderive="p1"> <TypeProduitDerive nomtypeproduitderive="option"> <SousJacent>SJ1</SousJacent> <Maturite>2</Maturite> <Strike>90</Strike> <Taux>0,04</Taux> <TypeOption nomtypeoption="callsimple" /> </TypeProduitDerive> 14 P a g e

</ProduitDerive> <Valeur indice="1">20,86781</valeur> <Valeur indice="2">29,07052</valeur> <Valeur indice="3">50,72671</valeur> <Valeur indice="4">51,09023</valeur> <Valeur indice="5">70,54333</valeur> <Valeur indice="6">0</valeur> <Valeur indice="7">0</valeur> <Valeur indice="8">0</valeur> <Valeur indice="9">0</valeur> <Valeur indice="10">0</valeur> <Valeur indice="11">0</valeur> </ListeProduitsDerives> </Simulation> IX. XML Exportation des évaluations 1) Structure générale La structure générale du fichier reprend la précédente (il n y a pas de section pour les corrélations) : <?xml version="1.0"?> <Simulation> <ListeTaux> /* détails des taux */ </ListeTaux> <ListeSousJacents> /* détails des sous-jacents */ </ListeSousJacents> <ListeProduitsDerives> /* détails des produits dérivés */ </ListeProduitsDerives> </Simulation> Après chaque ouverture/fermeture de <Taux>, <SousJacent> ou <ProduitDerive> on ajoute les évaluations. Pour décrire une évaluation : Ouvrir une balise <DateEvaluation>, écrire la date d évaluation, puis refermer la date d évaluation avec la balise </DateEvaluation>. Ouvrir une balise <ValeurEvaluation>, écrire la valeur d évaluation, puis refermer la valeur d évaluation avec la balise </ValeurEvaluation>. 2) Exemple complet Nous détaillons ici un exemple d évaluations traduites en fichier XML dans lequel on définit une obligation Obl1 et un basis swap Swap1 vérifiant : Obl1 est une obligation de nominal 100, de maturité 2 ans, versant des coupons de 5%, et ayant été émise le 3 avril 2012. Swap1 est un basis swap sur un nominal de 100, de maturité 10 ans, échangeant annuellement de l Euribor 1 mois contre de l Euribor 7 mois + 5 bps créé le 3 avril 2012. <?xml version="1.0"?> <Evaluation> <ListeSousJacents> 15 P a g e

<SousJacent nomsousjacent="obl1"> <TypeSousJacent nomtypesousjacent="obligation"> <Maturite>2</Maturite> <TypeObligation nomtypeobligation="obligationcoupon"> <TauxCoupon>0,05</TauxCoupon> <Valeur>100</Valeur> <Intervalle>0,5</Intervalle> <DateEmission>03/04/2012 00:00:00</DateEmission> </TypeObligation> </TypeSousJacent> </SousJacent> <DateEvaluation>12/06/2012 00:00:00</DateEvaluation> <ValeurEvaluation>119,054595980994</ValeurEvaluation> </ListeSousJacents> <ListeProduitsDerives> <ProduitDerive nomproduitderive="swap1"> <TypeProduitDerive nomtypeproduitderive="swap"> <Nominal>100</Nominal> <Maturite>10</Maturite> <DateEmission>03/04/2012 00:00:00</DateEmission> <Intervalle1>1</Intervalle1> <Intervalle2>1</Intervalle2> <Convention1>0</Convention1> <Convention2>1</Convention2> <CaracteristiqueSwap>True</CaracteristiqueSwap> <TypeSwap nomtypeswap="basisswaptaux"> <TypeTauxVariable1>1</TypeTauxVariable1> <TypeTauxVariable2>7</TypeTauxVariable2> <SpreadTauxVariable1>0</SpreadTauxVariable1> <SpreadTauxVariable2>5</SpreadTauxVariable2> </TypeSwap> </TypeProduitDerive> </ProduitDerive> <DateEvaluation>12/06/2012 00:00:00</DateEvaluation> <ValeurEvaluation>-0,0511965305667843</ValeurEvaluation> </ListeProduitsDerives> </Evaluation> 16 P a g e