---
title: "Mu Sig Optimale Portfolio 2D und mit Werten in Q"
author: "(Manfred Jaeger-Ambrozewicz, mathfred.de)"
date: "20260705 (5. Juli 2026)"
output:
  html_document: default
  pdf_document: default
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

## $\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}$. 

```{r}
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.  

```{r}
sigmainv = solve(sigma)
sigmainv

sigmainv_inQ = matrix( c(16/3 , -10/3,
                        -10/3, 25/3), 
                  nrow=2, ncol=2)
sigmainv_inQ

```

Die Kovarianzmatrix $\Sigma$ ist also  

```{r}
round(sigma,5)
```

und die erwarteten Renditen $\boldsymbol{\mu}$ der Basiswertepapiere betragen `r t(mu)`. 

## 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} }$$ 

```{r}
aux1 = 1/as.numeric(t(ones)%*%sigmainv%*%ones)
wgmv = aux1*sigmainv%*%ones 
round(t(wgmv),3)
```

Der Anteilsvektor des Portfolio aus riskanten Wertpapieren mit minimaler Varianz ist also `r t(round(wgmv,3))`.

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

```{r}
muwgmv = t(wgmv)%*%mu
round(muwgmv,4)
t(wgmv)%*%sigma%*%wgmv
sdwgmv = sqrt(t(wgmv)%*%sigma%*%wgmv)
round(sdwgmv,4)
```

Die erwartete Rendite ist also `r round(muwgmv,4)` und die Standardabweichung betraegt `r round(sdwgmv,4)`.  

## Das optimale Portfolio $\mathbf{w}^*$ mit vorgegebener Zielrendite. 

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

```{r}
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: 

```{r}

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

t(M)%*%sigmainv
t(M)%*%sigmainv%*%M

w3 = sigmainv%*%M%*%Binv%*%c(mustern, 1)
t(round(w3,4))

muw3 = t(w3)%*%mu # Probe
round(muw3,4)
t(w3)%*%sigma%*%w3 # Varianz 
sdw3 = sqrt(t(w3)%*%sigma%*%w3)
round(sdw3,4) # Standardabweichung
```

Der *Anteilsvektor* des Portfolio aus riskanten Wertpapieren mit einer erwarteten Rendite von `r mustern` ist `r t(round(w3,3))`. Die erwartete Rendite wurde mit der entsprechenden Formel (nur zur Probe) nachgerechnet. Die erwartete Rendite wurde vorgeben. Die *Standardabweichung* betraegt `r round(sdw3,4)`.    

## 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}$$  
```{r}
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: 

```{r}
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: 

```{r}
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 `r mustern`.    

## Mit risikoloser Anlageform 

Fuer die risikolose Anlageform geben wir die sichere Rendite vor:

```{r}
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} )$$ 


```{r}
aux2 = as.numeric(1/(t(ones)%*%sigmainv%*%(mu-rf*ones)))
wta = aux2*sigmainv%*%(mu-rf*ones)
round(t(wta),3)
```

Die erwartete Rendite ist  

```{r}
muwta = t(wta)%*%mu
round(muwta,4)
```

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
```{r}
sdwta = sqrt(t(wta)%*%sigma%*%wta)
```

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

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



### Grenzportfolio mit der vorgegebenen Zielrendite

Das Grenzportfolio mit der vorgegebener Zielrendite `r mustern` 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})$$. 


```{r}
aux3 = as.numeric( (mustern-rf)/( t(mu-rf*ones)%*%sigmainv%*%(mu-rf*ones) ) )
wg = aux3*sigmainv%*%(mu-rf*ones)
round(t(wg),4)
```


```{r}
wgs = c(wg,1-sum(wg))
round(t(wgs),4)
```

Zur Probe berechnen wir die erwartete Rendite. 

```{r}
mus = c(mu, rf)
round(sum(wgs*mus) ,4)
```

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

```{r}
sum(wg)
alpha = (mustern-rf)/(muwta-rf)
round(alpha,4)
```

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

```{r}
wgalternativ = as.numeric(alpha)*wta
t(wgalternativ)
t(wg)
```

und verifizieren (nochmal) die erwartete Rendite 

```{r}
rwg = alpha*muwta + (1-alpha)*rf
rwg
```
Auch fuer die Bestimmung der Standardabweichung des Grenzportfolio mit vorgegebener Rendite haben wir alternative Rechenwege 

```{r}
sdwg = sqrt(alpha^2*sdwta^2)
round(sdwg,4)

round(alpha*sdwta,4)

round(sqrt(t(wg)%*%sigma%*%wg),4)
```

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

```{r}
round(t(wg/c(alpha)),4)
round(t(wta),4)
```

## Grafische Darstellung

Wie oben stellen wir die Ergebnisse grafisch dar: 

```{r}
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")
```



