M2 MATHÉMATIQUES ET FINANCE UNIVERSITÉ LILLE 1 GESTION DE PORTEFEUILLE ET MESURE DU RISQUE Joël FOLENS et Fabrice RIVA Date limite de remise : 07 janvier 2015 à 17:00 1. Présentation du projet L objectif de ce projet est d évaluer la performance, mesurée à partir de la significativité de l α, d un portefeuille optimisé en termes de couple rentabilité-risque. Les sections qui suivent vous décrivent le protocole de test qu il vous faudra implémenter en VBA sous Excel. Vous y trouverez également différentes informations destinées à vous guider dans la réalisation de votre programme. 2. Les données Les données qui vous sont fournies couvrent 178 actions présentant des niveaux de disponibilité variables sur la période 1990-2011. Les informations relatives à une action donnée sont stockées dans une feuille propre nommée Actioni où i représente le numéro de l action. Chaque feuille action contient en colonne A un champ Date et en colonne B un champ intitulé Cours ajusté, corrigé des éventuelles opérations sur titres et des détachements de dividendes. Outre les 178 feuilles actions, le classeur sur lequel vous aurez à travailler comporte quatre feuilles intitulées respectivement Calendrier, PF, Optim et Test dont la raison d être vous sera précisée dans les sections qui suivent. 3. Remplacement des cours manquants Les actions dont vous disposez ne cotent pas tous les jours. Cette situation va notamment poser problème au moment du calcul de la matrice de variances-covariances des taux de rentabilité des différents titres à faire figurer dans un portefeuille, certains taux étant manquants. Pour éviter le problème, une étape préalable va consister à procéder, pour chaque action faisant partie de l univers de titres qui vous est alloué (cf section 7.), au remplacement des cours manquants. Pour une action i donnée, seuls les cours strictement compris entre le premier et le dernier cours disponible de i devront faire l objet d un éventuel remplacement. L action i présente un cours manquant à la date t si elle ne présente pas de cours en t alors que t figure dans le champ Date (colonne A) de la feuille intitulée Calendrier. La procédure de remplacement des cours manquants est la suivante. En notant C i pre le dernier cours disponible de l action i avant un (ou plusieurs) cours manquant(s), en notant C i post le premier cours 1
disponible de i après un (ou plusieurs) cours manquant(s), et en notant k le nombre de cours manquants entre C i pre et C i post, la valeur du jème cours manquant sera calculée comme : { ( )} Cj i = exp ln(cpre) i 1 C i + k + 1 j ln post Cpre i La série complète cours originaux + cours remplacés de l action i devra être stockée dans la feuille de l action concernée selon la disposition suivante : Colonne D, à partir de D2 (écrire l intitulé "Date" dans la cellule D1) : la série des dates, incluant celles pour lesquelles un cours manquant a été calculé ; Colonne E, à partir de E2 (écrire l intitulé "Cours complété" dans la cellule E1) : la série des cours ajustés (dont les cours manquants calculés) ; Colonne F, à partir de F2 (écrire l intitulé "Taux de rentabilité" dans la cellule F1) : la série des taux de rentabilité continus quotidiens de l action i. (1) 4. Construction des portefeuilles optimaux et rentabilité out-of-sample Les portefeuilles optimaux seront construits selon le protocole suivant. Le premier portefeuille optimal sera constitué sur la base des taux de rentabilité observés sur la période - période d optimisation - allant du 1/05/1992 au 31/07/1992 (valeurs 1 à 3 de la colonne B de la feuille Calendrier). Seules les actions présentant des taux de rentabilité (potentiellement calculés sur la base de cours remplacés) du 1/05/1992 au 31/08/1992 (soit les 3 mois correspondant à la période d optimisation + 1 mois correspondant à la période de test) devront être prises en compte dans les calculs. Par souci de commodité, il vous est conseillé de stocker les taux de rentabilité de la période d optimisation dans la feuille PF du classeur 1. Partant de ces taux, vous déterminerez le portefeuille de variance minimale présentant une volatilité annuelle de 25% (on considérera qu une année comporte 254 jours de bourse) avec interdiction des ventes à découvert 2. Vous devrez pour ce faire renseigner la feuille Optim du classeur et paramétrer celle-ci de façon à permettre au solveur Excel d effectuer l optimisation demandée. Une fois les poids obtenus, vous calculerez les taux de rentabilité quotidiens du portefeuille optimisé sur la période de test et vous en déduirez le taux de rentabilité mensuel du portefeuille optimisé (par sommation des taux de rentabilité quotidiens). Vous reporterez ce dernier taux en colonne B, ligne 2, de la feuille Test. La procédure précédemment décrite devra être itérée. Un second portefeuille sera ainsi construit avec une période d optimisation allant du 1/06/1992 au 31/08/1992 (période de test du 1/09/1992 au 30/09/1992), un troisième avec une période d optimisation allant du 1/07/1992 au 30/09/1992 (période de test du 1/10/1992 au 31/10/1992), etc. Le dernier portefeuille construit sera optimisé sur la période allant du 1/12/2007 au 28/02/2008 (période de test du 1/03/2008 au 31/03/2008). Le taux de rentabilité mensuel du deuxième portefeuille sur la période de test sera stocké cellule B3 de la feuille Test, celui du troisième portefeuille dans la cellule B4, etc. 1. Ce point n est pas obligatoire et vous ne serez pas pénalisé si vous optez pour une stratégie de programmation différente. 2. La valeur de 25% est indicative. Vous êtes libre de choisir une autre valeur - voiré invités à analyser les niveaux de performance obtenus pour un ensemble de différentes valeurs. 2
5. Test de performance Vous disposez dans la feuille Test des valeurs mensuelles des facteurs Fama-French sur la période août 1992 - mars 2008. Les valeurs respectives des facteurs "marché", "SMB", "HML" et "Momentum" figurent dans les colonnes C à F. La réalisation de la régression Fama-French et le test de significativité du α pourront être réalisés à l aide de la fonction DROITEREG d Excel. Vous n avez pas à programmer la réalisation de cette régression. 6. Conseils et compléments Visual Basic Cette section regroupe quelques conseils de programmation et vous détaille également le fonctionnement de certaines instructions non vues en cours qui pourront vous être utiles. Vous devez impérativement travailler en Option Base 1 pour pouvoir réaliser les opérations matricielles qu impliquent plusieurs calculs. Vous aurez à plusieurs reprises à utiliser l équivalent VBA de la fonction Recherche d Excel. On effectue une recherche en VBA en utilisant la méthode Find avec la syntaxe suivante : <Objet Range correspondant à la zone de recherche>.find(what: =<valeur recherchée>) Veuillez noter que la méthode Find retourne un objet de type Range. Dans le cas où la valeur recherché par Find ne figure pas parmi celles présentes au niveau de la zone de recherche spécifiée, une erreur se produit, ayant pour effet d interrompre l exécution du code VBA. L interruption de l exécution peut toutefois être évitée grâce à l utilisation d un bloc On Error Resume Next. Soit l exemple de code suivant : 1. On Error Resume Next 2. <Instruction> 3. If Err.Number = 0 Then 4. Groupe d instructions 1 5. Else 6. Groupe d instructions 2 7. End If où <Instruction> fait référence à l instruction susceptible de causer une erreur d exécution. En faisant précéder celle-ci de la ligne On Error Resume Next, l exécution du programme se poursuit, quoi qu il arrive, au niveau de la ligne 3 du code. La propriété Number appliquée à l objet Err permet de récupérer le code erreur généré par l exécution de l instruction figurant en ligne 2. Si le code retourné par Err.Number est égal à 0, aucune erreur n est détectée et l exécution du programme est redirigée (dans l exemple) vers le groupe d instructions 1. Dans le cas contraire, c est le groupe d instructions 2 qui sera exécuté. Pour certaines étapes du projet, vous aurez à créer des vecteurs ou des matrices à partir des données contenues dans les cellules d une feuille de calcul. Une plage de données peut être directement affectée à un vecteur ou à une matrice (sous la forme d une variable tableau) à l aide d une instruction du type : 3
<variable> = <plage> Ainsi, l instruction x = Range("A1:A10") permet de générer un vecteur colonne sous la forme d une variable tableau x composée de 10 lignes et 1 colonne, x(1,1) se voyant affecter le contenu de la cellule A1, x(2,1) le contenu de la cellule A2, etc. De même, y = Range("A1:J10") permet de générer un vecteur ligne sous la forme d une variable tableau y composée d 1 ligne et 10 colonnes, y(1,1) se voyant affecter le contenu de la cellule A1, y(1,2) le contenu de la cellule B1, etc. Important : il est fortement recommandé de ne pas effectuer de déclaration préalable des variables destinées à recevoir une plage de données pour que la conversion automatique en variable tableau se fasse sans erreur d exécution 3. Au sein de la feuille Optim, les formules de calcul de la variance du portefeuille, de son espérance, et de la somme de ses poids devront être ré-écrites à chaque nouveau portefeuille construit. Ceci est rendu nécessaire par le fait que le nombre d actions en portefeuille peut varier d un portefeuille à l autre du fait de la présence ou non d une action sur la période en cours de traitement. Souvenezvous qu une formule se code, que l on utilise la propriété Formula ou la propriété FormulR1C1, sous la forme d une chaîne de caractères. Il est donc possible de fabriquer des formules adaptées à un besoin particulier en utilisant l opérateur de concaténation &. Avant de lancer le solveur pour réaliser l optimisation du portefeuille, fixez tous les poids à leur valeur équi-pondérée. Vous interdirez l utilisation des ventes à découvert en positionnant l option AssumeNonNeg de la propriété SolverOptions du solver à True. 7. Groupes Afin de limiter les temps de calculs, chaque groupe devra n utiliser que 50 actions parmi les 178 disponibles dans le classeur initial. La répartition des actions entre les différents groupes est la suivante : Groupe 1 : actions 1 à 50 ; Groupe 2 : actions 27 à 76 ; Groupe 3 : actions 53 à 102 ; Groupe 4 : actions 79 à 128 ; Groupe 5 : actions 105 à 154 ; Groupe 6 : actions 131 à 178. 8. Livrables Il vous est demandé de produire un rapport écrit contenant le code, les résultats obtenus et leur interprétation. Le code devra faire l objet d un commentaire détaillé de façon à permettre au correcteur d en comprendre le fonctionnement. Le rapport format.pdf ainsi que le le fichier.bas de votre code 4 devront être envoyés à Joël Folens (Joel.Folens@polytech-lille.fr) et Fabrice Riva (fabrice.riva@iae.univlille1.fr) avec comme intitulé Projet gestion de portefeuille - Groupe <n>. La date et l heure limite de 3. Si l on souhaite malgré tout effectuer une déclaration préalable, le seul type autorisé est le type Variant, sans indication sur la (les) dimension(s) de la variable tableau, soit par exemple dim x as Variant. 4. Vous ne devez sous aucun prétexte envoyer le fichier Excel en raison de sa taille. 4
remise sont fixées au 07 janvier 2015 à 17:00. Une remise hors-délai entraînera la perte automatique de 2 points auxquels s ajouteront 2 points de pénalité supplémentaire par jour de retard. 9. Soutenance Ce projet fera l objet d une soutenance dans la semaine du 12 janvier 2015 (la date exacte vous sera communiquée ultérieurement). Chaque groupe sera auditionné pendant 20 minutes. Les questions posées lors de l audition porteront sur des aspects de programmation mais également sur des éléments de finance vus en cours. L heure exacte de passage des différents groupes ainsi que la salle vous seront précisés ultérieurement. 5