Installation des packages nécessaire

library(quadprog)

Introduction : Lecture des données

Les données mensuelles correspondant aux prix de 9 actifs sont en ligne ici,

base=read.csv2("http://freakonometrics.free.fr/base_portefeuille_2005_2016.csv",sep=";")
base[,1]=as.Date(as.character(base[,1]),"%Y-%m-%d")
for(i in 2:10) base[,i]=as.numeric(as.character(base[,i]))
str(base)
## 'data.frame':    118 obs. of  10 variables:
##  $ date  : Date, format: "2007-03-01" "2007-04-01" ...
##  $ price1: num  16.4 16 16.4 17 18.2 ...
##  $ price2: num  103 101 101 102 105 ...
##  $ price3: num  192 181 193 200 213 ...
##  $ price4: num  26.5 26 26.4 28 29.1 ...
##  $ price5: num  43.4 42.6 44 43.8 45.5 ...
##  $ price6: num  16835 15882 16269 16712 17167 ...
##  $ price7: num  1027 988 1063 1057 1123 ...
##  $ price8: num  2091 2015 2156 2224 2341 ...
##  $ price9: num  3075 2959 3154 3243 3455 ...
head(base)
##         date price1  price2  price3 price4 price5   price6   price7
## 1 2007-03-01 16.358 103.049 191.873 26.503 43.395 16834.74 1027.401
## 2 2007-04-01 15.977 101.382 181.019 26.014 42.582 15882.49  987.533
## 3 2007-05-01 16.441 100.506 192.721 26.422 43.954 16268.68 1062.855
## 4 2007-06-01 17.010 101.946 200.119 27.998 43.844 16712.19 1057.068
## 5 2007-07-01 18.195 105.001 213.283 29.086 45.521 17167.49 1122.781
## 6 2007-08-01 18.455 109.029 209.010 27.563 45.095 17909.04 1105.956
##     price8   price9
## 1 2090.545 3075.045
## 2 2014.854 2959.129
## 3 2156.422 3154.142
## 4 2224.254 3242.990
## 5 2341.354 3455.277
## 6 2313.807 3415.107
tail(base)
##           date price1  price2  price3 price4 price5   price6   price7
## 113 2016-06-30 30.304 129.578 349.314 12.368 71.034 22536.01 2245.618
## 114 2016-07-31 31.469 129.812 366.184 12.504 73.837 22252.98 2353.793
## 115 2016-08-31 28.911 124.772 343.533 13.836 72.480 23333.46 2309.146
## 116 2016-09-30 29.556 124.441 366.184 13.972 74.187 23680.05 2379.730
## 117 2016-10-31 29.230 124.519 366.592 13.945 76.225 25189.24 2462.411
## 118 2016-11-30 27.740 118.389 375.797 12.287 75.614 25176.14 2433.848
##       price8   price9
## 113 3098.075 6652.093
## 114 3196.500 6696.421
## 115 3226.962 6699.342
## 116 3095.841 6595.093
## 117 3212.352 7057.526
## 118 3135.174 6933.571

I. Modélisation à partir des données historiques (10 points)

1. Série des Rendements Mensuels

Ecrire un code permettant d’obtenir les rendements mensuels

## base_rdmt = ...

Tracer les courbes des rendements mensuels

## plot(...)

2. Moyennes et Variances

Ecrire un code permettant d’obtenir les moyennes et la matrice de variance-covariance des rendements mensuels

## vect_mu = ...
## mat_sigma = ...

3. Porfeuille de variance minimale

Ecrire un code permettant d’obtenir la composition du portefeuille de variance minimale

## 

Ecrire un code permettant d’obtenir la composition du portefeuille de variance minimale sans vente à découvert

## 

4. Porfeuille de rendement maximal

Ecrire un code permettant d’obtenir la composition du portefeuille de rendement maximal, dont la variance serait au plus 0.005.

## 

Ecire un code permettant d’obtenir la composition du portefeuille de rendement maximal, dont la variance serait au plus 0.005, sans vente à découvert

## 

Ecrire un code permettant d’obtenir la composition du portefeuille de rendement maximal, dont la variance serait au plus 0.005, sachant que la moitié de l’argent investi doit l’être dans l’actif 8

## 

6. Porfeuille de rendement maximal avec un actif sans risque

On suppose qu’il existait en plus un actif sans risque, proposant un rendement (mensuel) de 0.15%.

Représentez tous les actifs sur un graphique {écart-type,moyenne}.

## plot()

Ecrire un code permettant d’obtenir la composition du portefeuille de rendement maximal, de variance au plus 0.005.

## 

II. Constitution d’un portfeuille optimal pour 2017 (10 points)

Au 1er décembre 2016, vous avez 1000 à investir. La vente à découvert est interdite, et vous ne pouvez pas investir dans un actif sans risque.

Pour n’avez pas le droit de constituer un portefeuille ayant une variance (mensuelle) excédant 0.004.

Combien de chacun des titres achetez vous, le 1er décembre 2016, afin de maximiser votre rendement pour l’année 2017 ?

La dernière ligne du code attendu sera de la forme

# quantite = c(4,1,.3,8,1.5,.005,.05,.03,.015)
# names(quantite) = paste("actif",1:9,sep="")

Vous n’avez pas accès aux données de 2017 (mais moi oui)

base2017=read.csv2("base_portefeuille_2017.csv",sep=";")
base2017[,1]=as.Date(as.character(base2017[,1]),"%Y-%m-%d")
for(i in 2:10) base2017[,i]=as.numeric(as.character(base2017[,i]))

Par exemple, le code suivant sera utilisé pour vérifier que le portefeuille est bien admissible

 quantite = c(4,1,.3,8,1.5,.005,.05,.03,.015)
 names(quantite) = paste("actif",1:9,sep="")
 quantite
## actif1 actif2 actif3 actif4 actif5 actif6 actif7 actif8 actif9 
##  4.000  1.000  0.300  8.000  1.500  0.005  0.050  0.030  0.015
 prix = base[118,2:10]
 montants = quantite*prix
 montants
##     price1  price2   price3 price4  price5   price6   price7   price8
## 118 110.96 118.389 112.7391 98.296 113.421 125.8807 121.6924 94.05522
##       price9
## 118 104.0036
 sum(montants) <= 1000
## [1] TRUE

et que la variance mensuelle observée n’a pas excédée 0.004

 valeur_118 = sum(quantite*prix)
 valeur_119_130 = as.matrix(base2017[,2:10]) %*% (quantite)
 valeur = c(valeur_118,valeur_119_130)
 rdmt = (valeur[2:13]-valeur[1:12])/valeur[1:12]
 var(rdmt) <= 0.007
## [1] TRUE

Ce portefeuille est donc acceptable, sa valeur au bout d’un an est de

  valeur[13]
## [1] 1018.181

soit un rendement annuel (en %) de

  100*(valeur[13]-sum(montants))/sum(montants)
## [1] 1.875446

Une fois l’exercice fini, veuillez bien remplir la ligne 3 du fichier markdown, puis envoyer les fichiers examen.Rmd et examen.html à arthur.charpentier@univ-rennes1.fr avant 12:00.