Výpočet portfolií
Teď vygenerujeme portfolia, abychom pro každý měsíc našli to nejlepší. Funkce random.random() z knihovny numpy generuje náhodná čísla z rovnoměrného rozdělení. Následně je normalizujeme tak, aby jejich součet byl 1 – pomocí operátoru /=. Tato váhy pak použijeme k výpočtu výnosů a volatility. Výnosy jsou součtem součinů vah a jednotlivých výnosů. Volatilita je složitější a zahrnuje kovariance různých akcií.
Nakonec uložíme hodnoty do slovníků pro pozdější použití – jako klíče budou sloužit data jednotlivých měsíců.
V tomto příkladu generujeme pro každé datum jen 10 portfolií, aby kód běžel rychleji. V praxi by sis pro několik málo akcií chtěl/a vygenerovat spíše 1 000 až 5 000 náhodných portfolií.
Toto cvičení je součástí kurzu
Machine Learning for Finance in Python
Pokyny k cvičení
- Vygeneruj 3 náhodná čísla pro váhy pomocí
np.random.random(). - Vypočítej
returnsjako skalární součin (np.dot(); vynásobí prvky po složkách a výsledky sečte) vektoruweightsa měsíčních výnosů pro aktuálnídatev cyklu. - Pomocí metody
.setdefault()přidej do slovníkuportfolio_weightsprázdný seznam ([]) pro aktuálnídatea poté do tohoto seznamu přidejweightsmetodouappend.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
portfolio_returns, portfolio_volatility, portfolio_weights = {}, {}, {}
# Get portfolio performances at each month
for date in sorted(covariances.keys()):
cov = covariances[date]
for portfolio in range(10):
weights = np.random.random(____)
weights /= np.sum(weights) # /= divides weights by their sum to normalize
returns = np.dot(____, returns_monthly.loc[____])
volatility = np.sqrt(np.dot(weights.T, np.dot(cov, weights)))
portfolio_returns.setdefault(date, []).append(returns)
portfolio_volatility.setdefault(date, []).append(volatility)
portfolio_weights.setdefault(date, ____).append(____)
print(portfolio_weights[date][0])