\(\mu\)-\(\sigma\) optimale Portfolio

In diesem Dokument (das mit R Markdown erstellt wurde) werden die in der Vorlesung Finanzmathematik 2 besprochenen Formeln in R umgesetzt.

Zunaechst definieren wir den Vektor \(\boldsymbol{\mu}\) der erwarteten Renditen und die Kovarianzmatrix \(\boldsymbol{\Sigma}\).

ones = c(1,1,1)
mu = c(0.05, 0.01, 0.025)
sigma = matrix( c(0.0120059140, 0.001916566, 0.0009217767,
                  0.0019165655, 0.009998083, 0.0024276497,
                  0.0009217767, 0.002427650, 0.0202152029) , 
                  nrow=3, ncol=3)

Fuer den spaeteren Gebrauch bestimmen wir die Inverse der Kovarianzmatrix.

sigmainv = solve(sigma)

Die Kovarianzmatrix \(\Sigma\) ist also

round(sigma,5)
##         [,1]    [,2]    [,3]
## [1,] 0.01201 0.00192 0.00092
## [2,] 0.00192 0.01000 0.00243
## [3,] 0.00092 0.00243 0.02022

und die erwarteten Renditen \(\boldsymbol{\mu}\) der Basiswertepapiere betragen 0.05, 0.01, 0.025.

Das Portfolio \(\mathbf{w}^{\text{gmv}}\)

Das Portfolio aus riskanten Wertpapieren mit minimaler Varianz ermitteln wir mit der entsprechenden Formel \[\mathbf{w}^{\text{gmv}} = \frac{\boldsymbol{\Sigma}^{-1} \mathbf{1}}{ \mathbf{1}^T \boldsymbol{\Sigma}^{-1} \mathbf{1} }\]

aux1 = 1/as.numeric(t(ones)%*%sigmainv%*%ones)
wgmv = aux1*sigmainv%*%ones 
round(t(wgmv),3)
##       [,1]  [,2]  [,3]
## [1,] 0.372 0.426 0.202

Der Anteilsvektor des Portfolio aus riskanten Wertpapieren mit minimaler Varianz ist also 0.372, 0.426, 0.202.

Leicht kann man dann auch die erwartete Rendite und die Standardabweichung/Varianz bestimmen:

muwgmv = t(wgmv)%*%mu
round(muwgmv,4)
##        [,1]
## [1,] 0.0279
sdwgmv = sqrt(t(wgmv)%*%sigma%*%wgmv)
round(sdwgmv,4)
##        [,1]
## [1,] 0.0739

Die erwartete Rendite ist also 0.0279 und die Standardabweichung betraegt 0.0739.

Das optimale Portfolio \(\mathbf{w}^*\) mit vorgegebener Zielrendite.

Das Grenzportfolio aus riskanten Wertpapieren mit einer vorgegebenen Zielrendite \(\mu^*\) von

mustern = 0.0427

kann man ebenfalls leicht mit den entsprechenden Formel \(\mathbf{w}^* = \boldsymbol{\Sigma^{-1}} \mathbf{M} \mathbf{B}^{-1} \tilde{\boldsymbol{\mu}}^*\)

\[ \mathbf{M} = ( \boldsymbol{\mu} \, \vdots \, \mathbf{1} ) \in M(N,2,\mathbb{R}), \\ \tilde{\boldsymbol{\mu}}^* = (\mu^*, \,\, 1)^T \in M(2,1,\mathbb{R}), \\ \mathbf{B} = \boldsymbol{M}^T \boldsymbol{\Sigma^{-1}} \boldsymbol{M} \in M(2,2,\mathbb{R}) \] bestimmen:

M = matrix(c(t(mu), t(ones)), ncol = 2 )
B = t(M)%*%sigmainv%*%M
Binv = solve(B)

w3 = sigmainv%*%M%*%Binv%*%c(mustern, 1)
t(round(w3,4))
##        [,1]   [,2]  [,3]
## [1,] 0.7402 0.0537 0.206
muw3 = t(w3)%*%mu 
round(muw3,4)
##        [,1]
## [1,] 0.0427
sdw3 = sqrt(t(w3)%*%sigma%*%w3)
round(sdw3,4)
##        [,1]
## [1,] 0.0892

Der Anteilsvektor des Portfolio aus riskanten Wertpapieren mit einer erwarteten Rendite von 0.0427 ist 0.74, 0.054, 0.206. Die erwartete Rendite wurde mit der entsprechenden Formel (nur zur Probe) nachgerechnet. Die Standardabweichung betraegt 0.0892.

Grafische Darstellung

Die Analyse kann durch die folgende Abbildung komplettiert werden. Wir definieren zunaechst mit den entsprechenden Parametern \(A = \boldsymbol{\mu}^T \boldsymbol{\Sigma}^{-1} \boldsymbol{\mu}, B = \boldsymbol{\mu}^T \boldsymbol{\Sigma}^{-1} \boldsymbol{1}, C = \boldsymbol{1}^T \boldsymbol{\Sigma}^{-1} \boldsymbol{1}\)
die Grenzhyperbel

\[\sigma^2_{R^\mathbf{w}} = \frac{A - 2 B \mu_{R^\mathbf{w}} + C \mu_{R^\mathbf{w}}^2}{AC - B^2}\]

A = as.numeric(t(mu)%*%sigmainv%*%mu)
B = as.numeric(t(mu)%*%sigmainv%*%ones)
C = as.numeric(t(ones)%*%sigmainv%*%ones)

hyperbel = function(x){
  out = sqrt((A-2*B*x+C*x^2)/(A*C-B^2))
}

Das folgende Code Fragment dient lediglich der Gestaltung der Abbildung. Fuer die geeignete Wahl der Achsenbereiche definieren wir die folgenden Paramter. Ferner wird die Schrittweite definiert:

weite = max(abs(c(muwgmv)-mu))*2
schritte = 2*weite/100
Rendite1 = seq(from = c(muwgmv) - weite, to = muwgmv, by = schritte )
Standardabweichungen1 = hyperbel(Rendite1)
Rendite2 = seq(from = c(muwgmv), to = muwgmv + weite, by = schritte )
Standardabweichungen2 = hyperbel(Rendite2)
weite2 = 1.3*max(Standardabweichungen1,Standardabweichungen2)

Schliesslich koennen die Abbildung leicht erstellen:

par(mai = c(1.2,1.2,0.5,1.2))
plot(Standardabweichungen1,Rendite1,
     xlim = c(0,weite2),
     ylim = c(muwgmv-weite, muwgmv + weite),
     bty = "L",
     type = "l",
     xlab = "Standardabweichung",
     ylab = "erw. Rendite",
     cex.lab = 1.3,
     col = "red",
     lwd = 3)
points(Standardabweichungen2,Rendite2,
       type = "l",
       col  = "green",
       lwd = 3)
points(sdwgmv,muwgmv,
       col = "black",
       cex = 2,
       pch = 8)
points(sqrt(diag(sigma)),mu,
       col = "orange",
       cex = 2,
       pch = 16)
points(sdw3,muw3,
       col = "black",
       cex = 2,
       pch = 16)
abline(0,0,col="grey")

Die Abbildung zeigt die Charakteristika (also \(\mu\) und \(\sigma\)) der Grenzportfolio; in gruen die effizienten und in rot die ineffizienten. Ferner sind in orange die Characteristika der Basiswertpapiere sowie die Charakteristika des Portfolio riskanter Wertpapiere mit minimaler Varianz (ein blauer Stern). Der schwarze Punkt zeigt die Charakteristika des Grenzportolio mit Zielrendite von 0.0427.

Mit risikoloser Anlageform

Fuer die risikolose Anlageform geben wir die sichere Rendite vor:

rf = 0.015

Tangentialportfolio

Das Tangentialportfolio bestimmen wir mit der ensprechenden Formel \[\mathbf{w}^{\text{ta}} = \frac{1}{\boldsymbol{1}^T \boldsymbol{\Sigma}^{-1} ( \boldsymbol{\mu} - R^f\boldsymbol{1} ) } \boldsymbol{\Sigma}^{-1} ( \boldsymbol{\mu} - R^f\boldsymbol{1} )\]

aux2 = as.numeric(1/(t(ones)%*%sigmainv%*%(mu-rf*ones)))
wta = aux2*sigmainv%*%(mu-rf*ones)
round(t(wta),3)
##       [,1]   [,2]  [,3]
## [1,] 1.301 -0.513 0.212

Die erwartete Rendite ist

muwta = t(wta)%*%mu
round(muwta,4)
##        [,1]
## [1,] 0.0652

Man kann die erwarete Rendite nur deshalb mit der von oben uebernommenen Formel ausrechnen, weil \(\sum_{i=1}^n w_i^{ta} =1\) ist. Das gilt, da das Tangentialportfolio nur aus Engagements in riskanten Wertpapieren besteht.

Die Standardabweichung ist

sdwta = sqrt(t(wta)%*%sigma%*%wta)

Fuer den spaeteren Gebrauch definieren wir noch eine Indikatorvariable, die erfasst, ob das Tangentialportfolio effizient ist.

effwta = as.numeric(ifelse(muwta - rf > 0, 1, -1))  
srwta = (muwta-rf)/sdwta

Grenzportfolio mit der vorgegebenen Zielrendite

Das Grenzportfolio mit der vorgegebener Zielrendite 0.0427 bestimmen wir mit der Formel \[\mathbf{w}^* = \frac{\mu^* - R^f}{ (\boldsymbol{\mu} - R^f\mathbf{1})^T \boldsymbol{\Sigma}^{-1} (\boldsymbol{\mu} - R^f\mathbf{1}) } \boldsymbol{\Sigma}^{-1} (\boldsymbol{\mu} - R^f\mathbf{1})\].

aux3 = as.numeric( (mustern-rf)/( t(mu-rf*ones)%*%sigmainv%*%(mu-rf*ones) ) )
wg = aux3*sigmainv%*%(mu-rf*ones)
round(t(wg),4)
##        [,1]    [,2]   [,3]
## [1,] 0.7176 -0.2828 0.1169
wgs = c(wg,1-sum(wg))
round(t(wgs),4)
##        [,1]    [,2]   [,3]   [,4]
## [1,] 0.7176 -0.2828 0.1169 0.4483

Zur Probe berechnen wir die erwartete Rendite.

mus = c(mu, rf)
round(sum(wgs*mus) ,4)
## [1] 0.0427

Zur Illustration moeglicher Varianten bestimmen wir \(\alpha\) auf zwei Wegen:

sum(wg)
## [1] 0.5516624
alpha = (mustern-rf)/(muwta-rf)
round(alpha,4)
##        [,1]
## [1,] 0.5517

Wenn \(\alpha\) gegeben ist, dann koennen wir zwischen dem Tangentialportfolio und Grenzportfolio einen direkten Zusammenhang erstellen.

wgalternativ = as.numeric(alpha)*wta
t(wgalternativ)
##           [,1]       [,2]      [,3]
## [1,] 0.7176287 -0.2828439 0.1168776
t(wg)
##           [,1]       [,2]      [,3]
## [1,] 0.7176287 -0.2828439 0.1168776

und verifizieren (nochmal) die erwartete Rendite

rwg = alpha*muwta + (1-alpha)*rf
rwg
##        [,1]
## [1,] 0.0427

Auch fuer die Bestimmung der Standardabweichung des Grenzportfolio mit vorgegebener Rendite haben wir alternative Rechenwege

sdwg = sqrt(alpha^2*sdwta^2)
round(sdwg,4)
##        [,1]
## [1,] 0.0805
round(alpha*sdwta,4)
##        [,1]
## [1,] 0.0805
round(sqrt(t(wg)%*%sigma%*%wg),4)
##        [,1]
## [1,] 0.0805

Schliesslich beobachten wir noch, dass wir aus dem Grenzportfolio das Tangentialportfolio zurueckgewinnen koennen:

round(t(wg/c(alpha)),4)
##        [,1]    [,2]   [,3]
## [1,] 1.3008 -0.5127 0.2119
round(t(wta),4)
##        [,1]    [,2]   [,3]
## [1,] 1.3008 -0.5127 0.2119

Grafische Darstellung

Wie oben stellen wir die Ergebnisse grafisch dar:

weite = max(abs(c(muwgmv)-mu),rf)*2
schritte = 2*weite/100
Rendite1 = seq(from = c(muwgmv) - weite, to = muwgmv, by = schritte )
Standardabweichungen1 = hyperbel(Rendite1)
Rendite2 = seq(from = c(muwgmv), to = muwgmv + weite, by = schritte )
Standardabweichungen2 = hyperbel(Rendite2)
weite2 = 1.3*max(Standardabweichungen1,Standardabweichungen2)

par(mai = c(1.2,1.2,0.5,1.2))
plot(Standardabweichungen1,Rendite1,
     xlim = c(0,weite2),
     ylim = c(muwgmv-weite,muwgmv+weite),
     bty = "L",
     type = "l",
     xlab = "Standardabweichung",
     ylab = "erw. Rendite",
     cex.lab = 1.3,
     col = "red",
     lwd = 3)

points(Standardabweichungen2,Rendite2,
       type = "l",
       col  = "green",
       lwd = 3)
points(sdwgmv,muwgmv,
       col = "black",
       cex = 2,
       pch = 8)
points(sqrt(diag(sigma)),mu,
       col = "orange",
       cex = 2,
       pch = 16)
points(sdwta,muwta,
       col = "black",
       cex = 2,
       pch = 8)
points(sdw3,muw3,
       col = "black",
       cex = 2,
       pch = 16)
points(0,rf,
       col = "blue",
       cex = 2,
       pch = 16)
lines(c(0,Standardabweichungen1),
      c(rf,rf+effwta*c(srwta)*Standardabweichungen1),lwd=2,lty=1,
      col = "green")
lines(c(0,Standardabweichungen1),
      c(rf,rf-effwta*c(srwta)*Standardabweichungen1),lwd=2,lty=2,
      col = "red")
points(sdwg,rwg,
       col = "red",
       cex = 2,
       pch = 16)
abline(0,0,col="grey")