\(\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)
mu = c(0.05, 0.01)
sigma = matrix( c(1/4 , 1/10 ,
                  1/10, 4/25), 
                  nrow=2, ncol=2)

Fuer den spaeteren Gebrauch bestimmen wir die Inverse der Kovarianzmatrix.

sigmainv = solve(sigma)
sigmainv
##           [,1]      [,2]
## [1,]  5.333333 -3.333333
## [2,] -3.333333  8.333333
sigmainv_inQ = matrix( c(16/3 , -10/3,
                        -10/3, 25/3), 
                  nrow=2, ncol=2)
sigmainv_inQ
##           [,1]      [,2]
## [1,]  5.333333 -3.333333
## [2,] -3.333333  8.333333

Die Kovarianzmatrix \(\Sigma\) ist also

round(sigma,5)
##      [,1] [,2]
## [1,] 0.25 0.10
## [2,] 0.10 0.16

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

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]
## [1,] 0.286 0.714

Der Anteilsvektor des Portfolio aus riskanten Wertpapieren mit minimaler Varianz ist also 0.286, 0.714.

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

muwgmv = t(wgmv)%*%mu
round(muwgmv,4)
##        [,1]
## [1,] 0.0214
t(wgmv)%*%sigma%*%wgmv
##           [,1]
## [1,] 0.1428571
sdwgmv = sqrt(t(wgmv)%*%sigma%*%wgmv)
round(sdwgmv,4)
##       [,1]
## [1,] 0.378

Die erwartete Rendite ist also 0.0214 und die Standardabweichung betraegt 0.378.

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

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

mustern = 0.04

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)

t(M)%*%sigmainv
##           [,1]        [,2]
## [1,] 0.2333333 -0.08333333
## [2,] 2.0000000  5.00000000
t(M)%*%sigmainv%*%M
##            [,1] [,2]
## [1,] 0.01083333 0.15
## [2,] 0.15000000 7.00
w3 = sigmainv%*%M%*%Binv%*%c(mustern, 1)
t(round(w3,4))
##      [,1] [,2]
## [1,] 0.75 0.25
muw3 = t(w3)%*%mu # Probe
round(muw3,4)
##      [,1]
## [1,] 0.04
t(w3)%*%sigma%*%w3 # Varianz 
##          [,1]
## [1,] 0.188125
sdw3 = sqrt(t(w3)%*%sigma%*%w3)
round(sdw3,4) # Standardabweichung
##        [,1]
## [1,] 0.4337

Der Anteilsvektor des Portfolio aus riskanten Wertpapieren mit einer erwarteten Rendite von 0.04 ist 0.75, 0.25. Die erwartete Rendite wurde mit der entsprechenden Formel (nur zur Probe) nachgerechnet. Die erwartete Rendite wurde vorgeben. Die Standardabweichung betraegt 0.4337.

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 = "steelblue",
       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 schwarzer Stern). Der balue Punkt zeigt die Charakteristika des Grenzportolio mit Zielrendite von 0.04.

Mit risikoloser Anlageform

Fuer die risikolose Anlageform geben wir die sichere Rendite vor:

rf = 0.005

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]
## [1,] 1.942 -0.942

Die erwartete Rendite ist

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

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.04 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]
## [1,] 0.8221 -0.3988
wgs = c(wg,1-sum(wg))
round(t(wgs),4)
##        [,1]    [,2]   [,3]
## [1,] 0.8221 -0.3988 0.5767

Zur Probe berechnen wir die erwartete Rendite.

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

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

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

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]
## [1,] 0.8220859 -0.398773
t(wg)
##           [,1]      [,2]
## [1,] 0.8220859 -0.398773

und verifizieren (nochmal) die erwartete Rendite

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

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.3589
round(alpha*sdwta,4)
##        [,1]
## [1,] 0.3589
round(sqrt(t(wg)%*%sigma%*%wg),4)
##        [,1]
## [1,] 0.3589

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

round(t(wg/c(alpha)),4)
##       [,1]   [,2]
## [1,] 1.942 -0.942
round(t(wta),4)
##       [,1]   [,2]
## [1,] 1.942 -0.942

Grafische Darstellung

Wie oben stellen wir die Ergebnisse grafisch dar:

weite = max(abs(c(muwgmv)-mu),rf)*3
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")