# Packages


```python
import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import yfinance as yf
import yahoofinancials
import seaborn as sn
from scipy.stats import anderson,kstest,shapiro, probplot
```

# Masalah.  
Misalkan portofolio saham dengan komposisi saham TLKM, BBNI, dan ASII. Akan dicari nilai return dengan variansi minimal dan juga dicari komposisi dari masing-masing saham.  


```python
stock = ['TLKM.JK', 'BBNI.JK','ASII.JK', 'ANTM.JK', 'INDF.JK']
df = pd.DataFrame(columns=stock)
for i in stock :
    temp = yf.Ticker(i).history(period = '2y', interval = '1mo',actions=False)
    temp.dropna(inplace = True)
    temp['log_return'] = np.log(temp['Close']) - np.log(temp['Close'].shift(1))
    temp['log_return'].dropna(inplace = True)
    df[i] =temp['log_return'].dropna()
```


```python
mu = df.mean().values
C = df.cov().values
e = np.ones(len(mu))
print(f'Vektor return {mu} dan \n matriks kovariansi \n {C} \n dan vektor e {e}')

```

    Vektor return [0.0173399  0.03236004 0.01910487 0.06699543 0.00259145] dan 
     matriks kovariansi 
     [[ 0.00587657  0.00456284 -0.0007402   0.00245725  0.00064832]
     [ 0.00456284  0.01116214  0.00167183  0.00427448  0.00392362]
     [-0.0007402   0.00167183  0.00748455  0.00698968 -0.00113314]
     [ 0.00245725  0.00427448  0.00698968  0.03106407 -0.00126756]
     [ 0.00064832  0.00392362 -0.00113314 -0.00126756  0.00482781]] 
     dan vektor e [1. 1. 1. 1. 1.]



```python
# mu = np.array([1.1, 1.2, 1.3])
# C = np.array([[0.01, 0, 0], [0, 0.05, 0], [0, 0, 0.07]])
# e = np.ones(len(mu))
# print(f'Vektor return {mu} dan \n matriks kovariansi \n {C} \n dan vektor e {e}')

```

Dari masalah 
\begin{equation}
\min\left\{ -t \mu^T \mathbf{x} +  \frac{1}{2}\mathbf{x}^T C  \mathbf{x} | \mathbf{e}^T \mathbf{x} = 1 \right\}
\end{equation}
dengan $t$ adalah suatu parameter tak negatif.  
dapat diperoleh bahwa persamaan untuk efficient frontiernya adalah : 
\begin{equation}
\sigma^2_P - \beta_0 = \frac{(\mu_P - \alpha_0)^2}{\alpha_1}
\end{equation}
dengan :
\begin{align}
\alpha_0 = \mu^T h_0 \\
\alpha_1 = \mu^T h_1 \\
\beta_0 = h_0^TCh_0
\end{align}
dan 
\begin{align}
h_0 &= \frac{C^{-1}e}{e^TC^{-1}e} \\  
h_1 &= C^{-1}\mu - \frac{e^TC^{-1}\mu}{e^TC^{-1}e} C^{-1}e
\end{align}


```python
h_0 = (np.linalg.inv(C).dot(e))/(e.dot(np.linalg.inv(C)).dot(e))
h_1 = np.linalg.inv(C).dot(mu) -((e.dot(np.linalg.inv(C)).dot(mu))/(e.dot(np.linalg.inv(C)).dot(e)))*(np.linalg.inv(C).dot(e))
print(f'Diperoleh \n h_0 {h_0}\n dan \n h_1 {h_1}')
```

    Diperoleh 
     h_0 [ 0.4332845  -0.29924553  0.36359046 -0.01483422  0.51720478]
     dan 
     h_1 [-1.1251155   3.44389107 -1.07559641  1.72769534 -2.97087449]



```python
alpha_0 = mu.dot(h_0)
alpha_1 = mu.dot(h_1)
beta_0 = h_0.dot(C).dot(h_0)
beta_2 = h_1.dot(C).dot(h_1)
print(f'Diperoleh \n alpha_0 : {alpha_0}, \n alpha_1 : {alpha_1}, \n beta_0 : {beta_0}\n beta_2 : {beta_2}')
```

    Diperoleh 
     alpha_0 : 0.005122348163682106, 
     alpha_1 : 0.1794347481375964, 
     beta_0 : 0.0012105522636421777
     beta_2 : 0.17943474813759647


Sehingga persamaan Efficient Frontier - nya menjadi :  
\begin{equation}
\sigma^2_P - 0.00875 = \frac{(\mu_P - 1.125)^2}{0.035}
\end{equation}


```python
t = np.linspace(0,0.5, 1000)
sigma_P = beta_0 + t**2 *beta_2
mu_p = alpha_0 + t*alpha_1
mu_p_bawah = alpha_0 - t*alpha_1
plt.plot(sigma_P, mu_p)
plt.plot(sigma_P, mu_p_bawah, '--')
plt.xlabel('sigma^2_P')
plt.ylabel('mu_P')
plt.grid(True)
plt.title('Kurva Efficient Frontier')
plt.show()
print(f'Nilai return dari variansi yang minimum adalah : {np.min(mu_p)}')
print(f'Dengan masing-masing proporsi saham TLKM, BBNI dan ASII adalah sebagai berikut : {h_0}')
```

Misalkan ditambahkan sebuah asset \textit{risk-free} dengan \textit{rate of return} $r = 1.02$. Maka diperoleh capital market linenya sebagai berikut : 

56ff52a476256f86636eadb9f5cc77bd8b1d90a4
ipynb
Jupyter Notebook
efficient frontier.ipynb
leonv1602/ak4261-optimisasi-matematika-keuangan
8dc7fd54b6ceaefc80c220359be7c77d6997939d
MIT
efficient frontier.ipynb
leonv1602/ak4261-optimisasi-matematika-keuangan
8dc7fd54b6ceaefc80c220359be7c77d6997939d
MIT
efficient frontier.ipynb
leonv1602/ak4261-optimisasi-matematika-keuangan
8dc7fd54b6ceaefc80c220359be7c77d6997939d
MIT
Qwen/Qwen-72B
1. YES
2. YES