Informatique et gestion – Sujet n° 1 L’objet de l’étude est la constitution d’une base de données sur les contrats FRA (Future Rate Agreement) fondés sur le protocole FpML Financial product Markup Language. Celui-ci est un langage pour l’échange de données sur les produits financiers dérivés tel que les options, swap, floor, cap, etc… Ce langage utilise XML. On souhaite conserver les contrats FRA dans une base de données afin de pouvoir répondre à certains types d’interrogation. La définition des FRA est fournie en annexe1, la structure des documents FpML pour les FRA est fournie en annexe 2 ainsi qu’un exemple en annexe 3. Un schéma de classe permettant de lire un document FRA est fourni en annexe 4. Questions : 1) Présenter une analyse argumentée sur l’opportunité de conserver des documents XML dans une base de données : outils disponibles, avantages et inconvénients des diverses possibilités. 2) On utilise ici une base de données relationnelle. Donnez le schéma conceptuel de la base de données (schéma entité-association) sachant qu’elle doit pouvoir être extensible dans le futur à d’autres produits : SWAP, Option … et que son objectif est de conserver les documents FpML d’origine et de pouvoir répondre aux seules questions suivantes A) Retrouver les documents FpML concernant un participant donné (par exemple la MIDLAND) vendeur ou acheteur pour une période donnée (grâce à la tradeDate : voir annexe 2) cela est valable quel que soit le produit concerné B) Donner le montant global des FRA garanties (notional) à une date donnée sur une contrepartie acheteur ou vendeur soit par devise soit en une seule devise convertie au taux du jour donnée : par exemple le montant global des garanties données au 2 janvier 2003 sur la MIDLAND convertie en EURO ( au 2 janvier 2003).
3) L’ annexe 4 présente une classe permettant de lire (parser) un document FpML XML.. Vous disposez des sources de cette classe. Il s’agit de compléter le diagramme de classes fourni afin de pouvoir calculer la somme à verser (dès que le taux variable est connu) sachant que pour l’instant on se limite au mode ACT/360, mais que d’autres modes pourront dans le futur être pris en compte. Aussi on souhaite une architecture souple et évolutive. Présentez une solution argumentée : schéma UML, schéma de classes, mécanisme objet employé, etc.. 4) Justifier la formule de calcul du solde net à verser selon le code de bonne conduite de l AFTB /AFTE (ou bien retrouver la) en vous fondant sur les principes de mathématiques financières.
Annexe 1 : définition d’un FRA (Forward Rate Agreement) Le contrat FRA est un accord de gré à gré par lequel une banque garantit à une entreprise ou une autre banque un taux d’intérêt qui sera appliqué à un prêt ou un emprunt futur, et ce pour un montant et une période convenus. Ce contrat de garantie de taux n’implique pas la mise en place effective d’un prêt ou d’un emprunt mais uniquement le règlement de la différence d’intérêts qui résulte du différentiel entre le taux garanti et de taux du marché. Exemple : Un client souhaite contracter un emprunt de 10 millions d’euros d’une durée de 3 mois débutant dans 6 mois. Anticipant une hausse des taux dans 6 mois, il souhaite figer dès aujourd’hui son coût d’endettement. Il achète un FRA, aux conditions suivantes. Montant notionnel 10 millions d’euros Date de conclusion de l’opération 1/09/2003 Date de départ 02/03/2004 Durée de la couverture 3 mois Taux variable de référence Euribor 3 mois (ACT/360) Taux fixe de garantie 5,00% (ACT/360) Le fixing de l’Euribor 3 mois (taux variable de référence) intervient 2 jours avant la date de départ du FRA. A cette date L’Euribor 3 mois vaut 5,10%. Le client contracte le 02/02/2004 son emprunt à 5,10% et reçoit donc au titre du contrat FRA un différentiel actualisé entre le taux variable de référence constaté et le taux fixe garanti calculé de la manière suivante
Cette formule de calcul (ACT/360 : nombre de jours exacts sur une année de 360 jours) est conforme au code de bonne conduite de l’AFTB /AFTE (Association du FOREX et des trésoriers de banques/Association Française des Trésoriers d’Entreprise) soit ici 10 000 000*[(5,10%-5,00%)*92/360]/[1+5,10%*92/360] = 2523 euros Pour trouver 92 jours, la règle est d’inclure le premier jour et d’exclure le dernier jour.
Annexe 2 : structure des documents Les documents s’inspirent très librement de la norme FpML (Financial product Markup Language) qui est un protocole XML dans le domaine de l’échange des produits financiers dérivés. Pour une version complète http://www.fpml.org/spec/2003/rec-fpml-2-0-2003-05-05.
I) Comment lire les diagrammes concernant XML
II) Structure générale d’un document FpML :
Le document FpML contient un élément trade (transaction) qui contient au moins 3 éléments enfants (il y a en général plus d’un élément ‘party’)
1) tradeHeader
Les informations de ‘tradeHeader’ sont communes à tous les produits. L’élément ‘tradeHeader’ contient un ou plusieurs éléments :‘partyTradeIdentifier’ pour identifier chaque participant à la transaction, ainsi que la date de la transaction. Pour chaque participant (‘partyTradeIdentifier’) il y a : -L’identifiant des participants dans l’élément ‘partyReference’ avec un pointeur (grâce à l’attribut href) sur un élément ‘party’ défini à l’intérieur du document. -Un ou plusieurs éléments ‘tradeId’ qui indique pour une transaction une référence interne liée au participant, l’attribut tradeIdScheme indique à quel schéma d’identification cela se réfère (par exemple chez #ABNMRO le code interne de la transaction sera AA9876 selon le schéma de codage http://www.abnamro.com/swaps/tradeid et chez#MIDLAND le code interne sera MB87623 )
2) product (produit) Un document FpML contient un et un seul produit parmi les 5 possibles. Dans l’étude ici on ne s’intéresse qu’au produit FRA (Future Rate Agreement) : voir après.
3) party
Un élément party identifie un des participants, l’attribut ‘id’ est une référence interne au document (utilisé par ‘partyReference’) . -partyId est le code de la banque selon le codage SWIFT bank identifier code -partyName un texte libre
III) Structure du produit FRA (Future Rate Agreement) La structure générale d’un FRA est :
buyerPartyReference (un et un seul) l’acheteur du FRA contient un attribut href vers un élément ‘party’
sellerPartyReference (un et un seul): le vendeur du FRA contient un attribut href vers un élément ‘party’
adjustedEffectiveDate (un et un seul): la date de début de la période de garantie ( elle est ajustée c'est-à-dire qu’elle tient compte des jours fériés éventuels) c ‘est aussi la date à laquelle est pris en compte le taux variable : reset date adjustedTerminationDate (un et un seul): la date de fin de la période de garantie ( elle est ajustée c'est-à-dire qu’elle tient compte des jours fériés éventuels) paymentDate (un et un seul): la date de paiement : contient un élément unadjustedDate date de paiement
fixingDateOffset (un et un seul): indique la date à laquelle sera fixée le taux d’intérêt variable pour le calcul de la somme à verser, elle est relative à la ‘reset date’ (ici ‘adjustedEffectiveDate’) periodMultiplier (un et un seul) : le nombre ‘period’ à prendre en compte period (un et un seul) : le type de période dont voici la liste Code signification D Day/jour W Week/semaine M Month/Mois Y Year/année T Term. /jour de fin, commence a partir de adjustedEffectiveDate dateRelativeTo (un et un seul) : la date de référence par rapport à laquelle on se place Dans l’exemple fourni, le taux d’intérêt fixé sera pris 2 jours avant la ‘reset date’ soit le 1991-07-15 dayCountFraction (un et un seul) :le mode de calcul des jours d’intérêt ( en France ACT/360) c'est-à-dire le nombre de jours réels de la période divisés par une année de 360 jours . Mais il existe d’autres cas : une année de 365 jours ou bien des mois de 30 jours, ou bien des mois de 30 jours sauf pour le mois de février, etc… notional (un et un seul):le montant du FRA contient 2 éléments currency (un et un seul) : le code de la devise à prendre en compte selon la norme iso4217 dont on peut facilement avoir la liste avec le pays concerné. amount (un et un seul) : le montant fixedRate (un et un seul):la valeur du taux d’intérêt fixe garanti floatingRateIndex (un et un seul) : le code de la référence du taux variable pris en compte (EURIBOR, PIBOR etc… ce code est fourni par l ISDA (International Swaps and Derivative Association)
annexe 3 : exemple de document FpML
MB87623 AA9876 1991-05-14 1991-07-17 1992-01-17 1991-07-17 -2 D ResetDate ACT/360 CHF 25000000.00 0.04 CHF-LIBOR-BBA 6 M MIDLGB22 ABNANL2A
annexe 4 classe FRA et classe Periode classe FRA{ // contient l’intégralité du document d’origine FpML avec le produit FRA privée chaîne de caractères : document // 2 constructeurs // - l’un avec comme paramètre une chaîne de caractères : celle-ci contient le // document FpML // - l’autre un objet Source qui permet de lire un fichier ou une URL // permettant d’accéder à un document FpML //si le document est invalide ou inaccessible une erreur est déclenchée publique init(chaîne de caractères : document) déclenche FRAErreur() ; publique init(Source : document) déclenche FRAErreur() ; // donne la date de la transaction en format AAAA-MM-JJ publique getTradeDate() : chaîne de caractères // donne le code BIC de l’acheteur publique getAcheteurId() : chaîne de caractères // donne le nom de l’acheteur ( si il existe sinon null) publique getAcheteurName() : chaîne de caractères // donne le code BIC du vendeur publique getVendeurId() : chaîne de caractères // donne le nom du vendeur ( si il existe sinon null) publique getVendeurName() : chaîne de caractères // donne la date de début de la période de l’emprunt en format AAAA-MM-JJ publique getEffectiveDate() : chaîne de caractères // donne la date de fin de la période de l’emprunt en format AAAA-MM-JJ publique getTerminationDate() : chaîne de caractères // donne la date de paiement en format AAAA-MM-JJ publique getPaymentDate() : chaîne de caractères // donne la date relative du fixing du taux d’intéret en format AAAA-MM-JJ publique getDateRelative() : chaîne de caractères // donne la période du fixing : objet Periode publique getPeriode() : Periode // donne méthode de calcul des intérêts publique getCountFraction() : chaîne de caractères // donne la devise du FRA publique getNotionalCurrency() : chaîne de caractères // donne le montant du FRA publique getNotionalAmount() : décimal // donne le taux garanti par le FRA publique getFixedRate() : décimal // donne le code du taux de référence pris en compte publique getFloatingRateIndex() : chaîne de caractères //donne l’échéance du FRA : un tableau de Periode publique getTenors : tableau de Periode
} classe Periode{ ….. // donne la valeur de la période ( D pour jour , M pour mois A pour année etc… publique getPeriod() : chaîne de caractères // donne le nombre de périodes publique getMultiplier() : entier }
Squelette de schéma UML FRA
periode
tenors
Periode