Adalah teori tentang bagaimana untuk memaksimalkan return dengan tingkat risiko pasar tertentu. Markowitz menekankan bahwa risiko adalah bagian yang melekat dari hadiah yang lebih tinggi.
Berikut contoh perhitungan Teori Markowitz dalam excel. Sumbu Y menunjukan return, sumbu X menunjukan risiko. Kita tidak akan membahas perhitungan dalam excel, kita akan lakukan dalam python. (lihat comment untuk penjelasan program)

#import library yang diperlukan
import numpy as np
import pandas as pd
from pandas_datareader import data as wb
import matplotlib.pyplot as plt
%matplotlib inline
#definisikan isi dari portfolio
assets = ['ADRO.JK', '^JKLQ45']
#mengambil data Adj Close dari yahoo
pf_data = pd.DataFrame()
for a in assets:
pf_data[a] = wb.DataReader(a, data_source='yahoo', start='2015-1-1')['Adj Close']
#hitung return menggunakan logaritma
log_ret = np.log(pf_data / pf_data.shift(1))
#inisialisasi variable
num_assets = len(assets)
pfolio_ret = []
pfolio_volt = []
#lakukan loop 1000 untuk menghitung variasi dari returns dan volatility dengan mengubah weights.
for x in range(1000):
weights = np.random.random(num_assets)
weights /= np.sum(weights)
pfolio_ret.append(np.sum(weights * log_ret.mean()) *250)
pfolio_volt.append(np.sqrt(np.dot(weights.T, np.dot(log_ret.cov() * 250, weights))))
#ubah menjadi np.array
pfolio_ret = np.array(pfolio_ret)
pfolio_volt = np.array(pfolio_volt)
#buat dataframe dari portofilo
pfoliodf = pd.DataFrame({'Return': pfolio_ret, 'Voltality' : pfolio_volt})
#tampilkan dalam graphic scatter.
pfoliodf.plot(x='Voltality', y='Return', kind='scatter', figsize=(10,6));
plt.xlabel('Expected Voltality')
plt.ylabel('Expected Return')

Mulai dari modul ini, code bisa langsung dicoba di google colab. Jadi Anda tidak perlu install Python dan semua library pendukung. Semoga bermanfaat.