Installation des packages nécessaire
library(quadprog)
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
Ecrire un code permettant d’obtenir les rendements mensuels
## base_rdmt = ...
Tracer les courbes des rendements mensuels
## plot(...)
Ecrire un code permettant d’obtenir les moyennes et la matrice de variance-covariance des rendements mensuels
## vect_mu = ...
## mat_sigma = ...
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
##
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
##
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.
##
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.