Projet pour le cours de C++

M2 Isifar

Gestion d'un portefeuille d'actifs

Modalité de réalisation

Ce projet est à réaliser en binôme exclusivement (à l'exclusion de problèmes de parité, la règle étant au plus un trinôme ou un singleton, la notation étant plus sévère dans le premier cas et plus clémente dans le second). La liste des binômes doit m'être donné dans les jours qui viennent.

Il est à rendre au plus tard le Dimanche 3 Janvier à 23h59 dans ma boite mail. TOUT RETARD ENTRAINERA AUTOMATIQUEMENT L'ATTRIBUTION DE LA NOTE 0. Vous devez rendre un bref rapport avec votre projet, détaillant chacune de vos classes et leur interaction globale.

Le projet est constitué de 4 étapes. Ne passez pas à l'étape suivante avant d'être sur de votre réalisation précédente. Pensez à sauvegarder à la fin d'une étape, si vous n'êtes pas satisfait du résultat de votre dernière étape, envoyez moi également l'étape précédente, j'en tiendrais compte.

La note du projet compte pour 1/3 de la note finale.

Description globale

Le but de ce projet est de réaliser un simulateur de portefeuille boursier assez rudimentaire, en suivant des stratégies auto-financées.

La simulation s'effectue en deux temps :

Le diagramme de classes final devrait être le suivant :

On le découpe en quatre étapes progressives :

Etape 1

Dans un premier temps on va réaliser le diagramme de classes simplifié suivant :

classe Date

La classe Date doit permettre de gérer une date donnée comme un nombre de jours depuis la date initiale où le simulateur est lancé. On commence donc à la date 0 jours. Votre classe devra permettre de récupérer ce nombre de jours, de renvoyer une nouvelle date décalé d'un certain nombre de jours dans le futur, et de renvoyer le décalage en nombre de jours (positif ou négatif) par rapport à une autre date.

classe Obligation

La classe Obligation modélise une obligation à taux annuel constant et à intérêts composés avec versement journalier. Rappels : si ta est le taux annuel, on rappelle que le taux journalier correspondant est tj = (1+ta)^(1/365)-1, la valeur de la somme S au bout de n est jours est alors S * (1+tj)^n . Pour pouvoir être manipulée comme un actif on considère qu'elle représente une valeur de 1€ engagée dans l'obligation. La classe est composée par la classe Marche mais peut remonter le lien, permettant ainsi de pouvoir manipuler le marché ambiant. La classe a une variable membre nom de type string qui nous permettra d'y faire référence. On réalisera des fonctions d'accès aux différentes variables membres, ainsi qu'une fonction membre renvoyant la valeur de l'obligation à la date courante du marché étant donné une date d'achat antérieure. On fournira également une méthode d'affichage.

classe Marche

La classe Marche maintient une date et une liste d'obligations (on utilisera la classe vector de la STL). Elle fournit, entre autres, une méthode pour ajouter une nouvelle obligation, et une méthode pour avancer le marché d'une journée (qui pour le moment se contentera de mettre à jour la date courante).

programme de test

On réalisera un programme de test qui sera le squelette de notre simulateur. Dans un premier temps, on proposera à l'utilisateur de peupler le marché en ajoutant des obligations, puis, lorsqu'il le désire de lancer la simulation, lui permettant de demander la valeur d'une obligation à la date courante vis-à-vis d'une date d'achat antérieure.

Précisions supplémentaires

A titre indicatif, l'ensemble des fichiers devraient représenter à peu près 200 lignes

Etape 2

On va prolonger le diagramme précédent pour aboutir à :

classe Part

La classe Part représente une certaine quantité d'un actif. Par exemple, une part d'une quantité de 25 d'une obligation, correspondra à avoir placé 25€ dans cette obligation. La Part contient ainsi des variables membres quantité, actif et date d'achat. Elle fournira une méthode d'évaluation ne prenant aucun argument et donnant sa valeur à la date courante (attention elle n'a pas besoin de connaître directement le marché).

classe Portefeuille

La classe portefeuille maintient une liste de parts (classe vector), elle permet d'acheter ou de solder des parts.

Boucle du simulateur

On rajoutera à la fonction d'initialisation la possibilité de définir une somme de départ. On va réorganiser le portefeuille en utilisant une variable temporaire de somme de travail, initialisée pour la première boucle à cette somme de travail.

On définit une boucle de simulation ainsi, tant que l'utilisateur ne veut pas arrêter le simulateur lui proposer :

Précisions supplémentaires

L'agrégation de Obligation dans Part se fait par pointeur à cause de l'utilisation de la classe vector avec des éléments Part. On ne peut pas stocker dans un vector une classe agrégeant une autre classe par référence ! (voir cours) Le code source doit faire moins de 400 lignes à l'issue de cette étape (ceci est juste une indication).

Log exemple

Voici un exemple de log de session avec un programme validant l'étape 2 :

Etape 3

On va maintenant rajouter une classe Actif au-dessus d'Obligation ainsi qu'une classe dérivée Action. On modélisera le cours d'une action au temps t de drift d et de volatilité v par un brownien géométrique (voir TP5, on incluera telles quelles les classes écrites en TP).

Attention, pour pouvoir bénéficier des méthodes virtuelles, votre Marche devra contenir des pointeurs vers des actifs et non plus des actifs directement.

Etape 4

On rajoute une classe Option dérivée de la classe Actif, celle-ci représente une option d'achat, elle est paramétrée par un actif sous-jacent, sa prime, un prix et une date d'exercice, ainsi qu'un actif de transfert dans lequel sera transféré la plu value éventuelle. Typiquement le sous-jacent est une Action et le transfert est une Obligation.

Log exemple pour les étapes 3 et 4

Le log exemple se situe ici.