Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Du 22 au 24 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Mathématiques financières (3ième édition)
  3. Fonctions de manipulation des swaps
Extrait - Mathématiques financières (3ième édition) Construisez votre bibliothèque de fonctions avec VBA Excel
Extraits du livre
Mathématiques financières (3ième édition) Construisez votre bibliothèque de fonctions avec VBA Excel
1 avis
Revenir à la page d'achat du livre

Fonctions de manipulation des swaps

Introduction

Nous examinerons les swaps de taux fixe contre taux variables.

Dans un swap de taux, deux contreparties échangent des flux d’intérêts. L’une reçoit des flux à taux fixe et paie des flux à taux variables, l’autre reçoit les flux à taux variables et paie les flux à taux fixe.

Un swap est donc la somme d’un instrument à taux fixe de nominal N et un instrument à taux variables de nominal -N.

La plupart des fonctions de manipulations des swaps ne sont donc que la somme des fonctions correspondantes d’un instrument à taux fixe et d’un instrument à taux variables, mais dont les nominaux sont opposés. En exemple vous verrez la fonction de calcul du prix sur une courbe de taux. Nous nous arrêterons également sur les fonctions de BPVP par maturité et de flux de l’instrument car elles font intervenir des manipulations de tableaux.

D’autres fonctions sont spécifiques aux swaps comme par exemple le calcul du taux fixe d’un swap ou du spread sur taux variables. Nous examinerons également ces fonctions.

La fonction PrixPleinCbSwp

Objectif

Cette fonction détermine le prix plein coupon d’un swap par actualisation de ses flux sur une courbe de taux.

Arguments

La liste des arguments pour un swap est longue car elle reprend les arguments d’un instrument à taux fixe et celle d’un instrument à taux variables.

Nom de l’argument

Description

Format de l’argument

DateCalcul

Date de calcul

Date

DateMaturite

Date de maturité de l’instrument

Date

dblCpFixe

Coupon de la jambe fixe (%)

Double

iFrequenceJF

Fréquence de la jambe fixe, nombre de coupon par an de la jambe fixe

Entier

BaseJF

Base la jambe fixe

Variant

dblNominal

Valeur de remboursement, si elle est positive alors les flux de la jambe fixe sont reçus et ceux de la jambe variable sont payés. Si la valeur de remboursement est négative, alors les flux de la jambe variable sont reçus et ceux de la jambe fixes sont payés.

Double

iFrequenceJV

Fréquence de la jambe variable. Nombre de coupon par an de la jambe variable

Entier

BaseJV

Base

Variant

TabDateFA

Tableau des maturités des facteurs d’actualisation

Variant

TabFA

Tableau des facteurs d’actualisation

Variant

dblDernierFixing

Dernier fixing s’il est connu (%, optionnel)

Double

iPeriodeTV

Période d’application du taux variable, si elle est différente de la fréquence de paiement. Par exemple un taux 6 mois payé tous les 3 mois, alors iFrequence=12/3=4 et  iPeriodeTV=6 (nombre de mois). Par défaut iPeriodeTV=12/iFrequence (Optionnel)

Entier

bSetInArrears

1 si l’instrument est "Set in arrears" (optionnel, par défaut=0)

Booléen

dblSpread

Spread à ajouter aux coupons de la jambe variable (optionnel)

Double

ModeAjustementJV

Mode d’ajustement de la jambe variable (optionnel)

Variant

ModeAjustementJF

Mode d’ajustement de la jambe fixe (optionnel, par défaut identique à celui de la jambe variable)

Variant

bPremierCouponPlein

Premier Coupon Plein sur la jambe fixe (optionnel)

Booléen

TypeCouponBrise

Type coupon...

La fonction BPVCbSwap

Objectif

La fonction BPVCbSwap détermine les variations de valeur d’un swap, pour des variations de 1 point de base (0.01%) de chaque taux d’actualisation.

Arguments

Les arguments sont identiques à ceux de la fonction PrixPleinCbSwp.

Mode de calcul

Comme pour le calcul du prix, la BPV sur courbe est égale à la somme des BPV de chaque jambe, en utilisant des valeurs de remboursement opposées. L’unique difficulté est qu’ici, vous devez manipuler des tableaux.

Code de la fonction BPVCbSwp

Comme les tableaux renvoyés par les fonctions pour la jambe fixe et la jambe variable ont la même dimension, il suffit d’étirer chaque dimension des tableaux pour les sommer. 


Function BPVCbSwp(DateCalcul As Date, DateMaturite As Date, _ 
dblCpFixe As Double, _ 
          iFreqJF As Integer, BaseJF, dblNominal As Double, _ 
          iFreqJV As Integer, BaseJV, _ 
           TabDateFA, TabFA, Optional dblDernierFixing As Double = 0, _ 
          Optional iPeriodeTV As Integer = 0, _ 
          Optional bSetInArrears As Boolean = False, _ 
          Optional dblSpread As Double = 0, _ 
          Optional ModeAjustementJV As Variant = 0, _ 
          Optional...

La fonction FluxSwp

Objectif

Cette fonction détermine les dates et les flux d’un swap entre la date de calcul et la date de maturité.

Arguments

Les arguments sont identiques à ceux de la fonction PrixPleinCbSwp.

Mode de calcul

Les flux du swap sont égaux à ceux de sa jambe fixe déterminés avec la fonction FluxTF et ceux de sa jambe variable sont déterminés avec la fonction FluxTV.

Pour une meilleure lisibilité, nous distinguerons dans deux colonnes les flux de la jambe fixe et ceux de la jambe variable.

Code de la fonction

Nous allons regrouper dans un seul tableau, FluxSwap, les données provenant de la fonction FluxTF et celles provenant de la fonction FluxTV. Nous trierons ensuite le tableau FluxSwap par ordre croissant des dates. Si deux lignes possèdent la même date, nous sommerons ses éléments. Pour trier le tableau nous utiliserons le tri à bulles.

Le tri à bulles

Le tri à bulles consiste à comparer deux lignes d’un tableau et, dans notre cas, faire remonter les lignes (dates) les plus petites, comme une bulle d’air remonte à la surface. Un exemple d’implémentation pour un tableau à une dimension est :


bEstTrie=False
 


Do while not bEstTrie
 

Boucle à effectuer tant que le tableau n’est pas trié.


EstTrie=True
 

On suppose le tableau trié.


For i=Lbound(UnTableau) _ 
to Ubound(UnTableau)-1
 

Boucle sur l’ensemble des éléments du tableau.


If UnTableau(i)>UnTableau(i+1) Then
 

Compare deux lignes du tableau.


dblTp=UnTableau(i+1) 
UnTableau(i+1)=UnTableau(i) 
UnTableau(i)=dblTp
 

Si les lignes ne sont pas en ordre croissant, échange des lignes.


bEstTrie=False
 

Si on passe sur cette ligne, c’est que le tableau n’est pas trié.


End If 
Next 
Loop
 

Le tri à bulles n’est pas l’algorithme de tri le plus rapide, mais c’est certainement le plus simple à mettre en œuvre.

Code


Function FluxSwp(DateCalcul As Date, DateMaturite As Date, _ 
dblCpFixe As Double, _ 
          iFreqJF As Integer, BaseJF, dblNominal As Double, _ 
          iFreqJV As Integer, BaseJV, _ 
          ...

La fonction TauxFixeSwap

Objectif

Cette fonction détermine le taux fixe d’un swap permettant d’égaliser le prix de la jambe fixe et le prix de la jambe variable.

Arguments

Les arguments sont identiques à ceux de la fonction PrixPleinCbSwp, sauf l’argument dblCpFixe qui n’est pas renseigné.

Mode de calcul

Le prix de la jambe fixe, c’est-à-dire la somme de ses flux actualisés, doit être égal au prix de la jambe variable :

images/EC0801.png

Avec DF(i) le facteur d’actualisation à la date i et PJV le prix de la jambe variable.

Les flux de coupons sont égaux au coupon fixe multiplié par des cœfficients d’ajustement des coupons. Par exemple, pour un coupon fixe payé deux fois par an, sans ajustement pour les jours fériés, les cœfficients seront à 0.5.

images/EC0802.png

Et donc :

images/EC0803.png

Code de la fonction TauxFixeSwp

Les cœfficients d’ajustement sont calculés par la fonction FluxTF, avec un coupon de 100% et un nominal de 1. Le nominal de 1 doit être déduit du dernier flux.

Les facteurs d’actualisation des flux sont obtenus par la fonction interpolation.

Le prix de la jambe variable, PJV, est obtenu en utilisant la fonction PrixPleinSurCourbeInsTV.


Function TauxFixeSwp(DateCalcul As Date, DateMaturite As Date, _ 
          iFreqJF As Integer, BaseJF, dblNominal As Double, _ 
        ...

La fonction SpreadSwp

Objectif

Cette fonction détermine le spread à ajouter aux coupons de la jambe variable d’un swap, pour égaliser le prix de la jambe fixe et de la jambe variable.

Arguments

Les arguments sont identiques à ceux de la fonction PrixPleinCbSwp, sauf l’argument dblSpread qui n’est pas renseigné.

Mode de calcul

Sachant que :

images/EC0804.png

Avec

Fraci = FractionAnnee(datei-1,datei,base)

PrixPleinJF

Le prix plein coupon de la jambe fixe.

Et

FluxJVi

Le flux de la jambe variable à la date i.

Alors le spread est égal à :

images/EC0805.png

Code de la fonction SpreadSwp

Le prix plein de la jambe fixe est donné par la fonction PrixPleinSurCourbeTF et le spread est déterminé par la fonction SpreadSurCourbeInsTV.


Function SpreadSwp(DateCalcul As Date, DateMaturite As Date, _ 
dblCpFixe As Double, _ 
          iFreqJF As Integer, BaseJF, dblNominal As Double, _ 
          iFreqJV As Integer, BaseJV, _ 
           TabDateFA, TabFA, Optional dblDernierFixing As Double = 0, _ 
          Optional iPeriodeTV As Integer = 0, _ 
          Optional bSetInArrears As Boolean = False, _ 
          Optional ModeAjustementJV As Variant = 0, _ 
          Optional ModeAjustementJF As Variant = -1, _ 
      ...