Blog ENI : Toute la veille numérique !
🐠 -25€ dès 75€ 
+ 7 jours d'accès à la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Mathématiques financières (3ième édition)
  3. Réalisation d'un programme de couverture d'un portefeuille de swap
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

Réalisation d'un programme de couverture d'un portefeuille de swap

Principe de la couverture

Pour avancer un peu plus loin dans l’utilisation de Visual Basic, vous allez supposer que vous possédez un portefeuille d’engagement sur des swaps, que vous souhaitez immuniser contre des variations de la courbe des taux. Pour vous couvrir, vous utiliserez les swaps du marché.

La fonction BPVCbSwap vous permet de déterminer les variations de valeurs d’un swap, pour des variations de 1 point de base de chaque point de la courbe des taux. Si la courbe des taux possède M plots de maturité et que le portefeuille Np swaps, alors la sensibilité au plot i du portefeuille, SP(i), est égale à la somme de la sensibilité des swaps au plot i :

images/EC1001.png

Où i=1 à M.

Par conséquent, le vecteur de sensibilités du portefeuille est égal à la somme des vecteurs de sensibilité de chaque instrument.

Vous devez trouver le portefeuille d’instrument de couverture, dont la sensibilité, SC(i), sera de sens inverse à la sensibilité du portefeuille à couvrir.

SC(i)=-SP(i)

Si vous disposez de Nc instruments de couverture, vous pouvez déterminer le vecteur de sensibité de chaque instrument avec la fonction BPVCbSwap pour un euro de nominal. Vous cherchez donc les quantités Qk telles que :

images/EC1002.png

SICk(i) est la sensibilité au plot i de l’instrument de couverture k et

images/EC1003.png est un terme d’erreur...

Déroulement du programme

Le programme va se dérouler en 5 étapes. La première sera la saisie des données grâce à un formulaire. Vous verrez comment le créer et le manipuler. La seconde étape concernera le calcul des sensibiltés du portefeuille. Dans la troisième étape, vous déterminerez les sensibiltés de chaque instrument de couverture. Ensuite vous utiliserez les fonctions de calcul matriciel pour déterminer le portefeuille de couverture et enfin vous sortirez ce portefeuille sur une feuille.

Construction d’un formulaire

Un formulaire permet les interactions entre un programme et l’utilisateur. Dans le cas présent, vous souhaitez que l’utilisateur indique quatre zones et une donnée :

  • La plage de cellules contenant le portefeuille à couvrir,

  • la plage de cellules contenant les instruments de couverture,

  • la plage de cellules contenant la courbe de taux,

  • la date de calcul,

  • la cellule à partir de laquelle vous allez sortir les résultats.

Comme dans tous les formulaires, vous ajouterez un bouton permettant de valider les données et un bouton pour annuler la saisie.

 Pour commencer, dans VBE, ajoutez un formulaire par le menu Insertion - UserForm

Sur votre écran s’affiche un formulaire vierge et une boîte à outils.

IMAGES/P220_1.PNG

Si la boîte à outils ne s’affiche pas, vous pouvez y accéder par le menu Affichage - Boîte à outils.

Propriété : Name

 Vous pouvez attribuer un nom au UserForm. Pour cela, affichez si ce n’est déjà fait, la fenêtre Propriétés à l’aide du menu Affichage - Fenêtre Propriétés (ou F4). La fenêtre des propriétés de l’objet actif, ici le formulaire, apparaît dans le coin inférieur gauche de l’écran. Dans la liste des propriétés se trouve "(Name)". Saisissez dans le champ...

Code de gestion du formulaire

 En utilisant le menu Affichage - Code, vous accédez au module lié au formulaire.

Dans le menu déroulant en haut à gauche apparaissent le formulaire et l’ensemble de ses contrôles.

IMAGES/P225_2.PNG

En sélectionnant "UserForm", les événements associés au formulaire apparaissent dans la liste déroulante de droite. Par exemple, l’évènement "Click" permet d’exécuter du code chaque fois que l’utilisateur clique sur le formulaire.

 Sélectionnez l’évènement "Initialize" afin d’effectuer des actions lors du chargement du formulaire, avant que ce dernier ne soit visible.

IMAGES/P226.PNG

L’affichage d’un formulaire se fait en deux temps. Le premier correspond à l’initialisation, ou chargement en mémoire du formulaire. Le formulaire n’est pas encore visible, mais ses éléments sont déjà accessibles. Pour charger le formulaire vous utilisez la commande "Load" :


Load NomDuFormulaire
 

Le déchargement du formulaire se fait par la commande "UnLoad" :


UnLoad NomDuFormulaire
 

Pour rendre visible le formulaire par l’utilisateur, il faut utiliser la méthode "Show" du formulaire :


NomDuFormulaire.Show
 

À l’inverse, pour cacher le formulaire, vous devez utiliser la méthode "Hide" :


NomDuFormulaire.Hide
 

À partir du moment où le formulaire est visible, la macro qui l’a appellée est en pause. Seul le code lié aux évènements du formulaire s’exécute. Une fois le formulaire caché, la macro reprend.

En utilisant l’évènement "Initialize" du formulaire, vous initialiserez le contrôle "tbDateDeCalcul" avec la date du jour.

Dans le module de code lié à "FormDeSaisie", il est possible d’accéder à l’objet formulaire de deux manières. Soit par son nom, soit par l’alias "Me". Rappelez vous que les appels des objets, méthodes ou propriété d’un objet se font en utilisant le point comme séparateur. Ainsi pour accéder à la valeur de l’objet "tbDateDeCalcul" du formulaire "FormDeSaisie", vous pouvez faire :


FormDeSaisie.tbDateDeCalcul.Value...

La macro de calcul de la couverture

Pour écrire la macro vous utiliserez de nouvelles propriétés et méthodes des objets de type range.

La boucle For sur une collection d’objets

Le vecteur de sensibilités du portefeuille est égal à la somme des sensibilités de chacun des swaps du portefeuille. En supposant que notre portefeuille est rangé en ligne, nous allons devoir effectuer une boucle sur toutes les lignes de la zone renvoyée par le contrôle. Affectons la valeur renvoyée par le formulaire rePortefeuille à un objet de type range.


Dim rgPortefeuille As Range             'Plage du portefeuille 
Set rgPortefeuille = Range(FormDeSaisie.rePortefeuille.Value)
 

Un objet range est une plage de cellules. Il est composé de ligne représentée par l’objet Row et de colonne représentée par l’objet Column.

Comme rgPortefeuille peut avoir plusieurs lignes et colonnes, il existe des collections d’objet. La collection Rows contient l’ensemble des lignes d’une plage de cellules. On distingue une collection d’un objet par le s marquant le pluriel. La collection des colonnes est Columns.

Pour balayer l’ensemble des éléments d’une collection il existe un dérivé de la boucle For ... Next.


Dim rgRow As Range               'Variable pour boucle sur  
                                 'les lignes du portefeuille 
Dim rgPortefeuille As Range      'Plage du portefeuille 
 
Set rgPortefeuille = Range(FormDeSaisie.rePortefeuille.Value) 
 
For Each rgRow In rgPortefeuille.Rows 
    ... 
    'Calcul de la BPVP du swap  
    ... 
Next
 

La variable rgRow est affectée successivement à chaque ligne composant la plage de cellules du portefeuille.

Une alternative consiste à compter le nombre de lignes de la plage de cellulles grâce à la propriété Count et de balayer la collection avec une boucle For ... Next classique.

La propriété Count permet de compter le nombre d’éléments présent dans une collection.


rgPortefeuille.Rows.Count...