Calculează portofolii
Vom genera acum portofolii pentru a-l găsi pe cel mai bun din fiecare lună. Funcția random.random() din numpy generează numere aleatoare dintr-o distribuție uniformă, pe care le normalizăm astfel încât suma lor să fie 1, folosind operatorul /=. Aceste ponderi sunt folosite pentru a calcula randamentele și volatilitatea. Randamentele reprezintă suma produselor dintre ponderi și randamentele individuale. Volatilitatea este mai complexă și implică covarianțele diferitelor acțiuni.
La final, vom stoca valorile în dicționare pentru utilizare ulterioară, folosind datele lunilor drept chei.
În acest exercițiu, vom genera doar 10 portofolii pentru fiecare dată, astfel încât codul să ruleze mai rapid. Într-un scenariu real, ai vrea să folosești între 1.000 și 5.000 de portofolii generate aleatoriu pentru câteva acțiuni.
Acest exercițiu face parte din cursul
Machine Learning pentru finanțe în Python
Instrucțiuni pentru exercițiu
- Generează 3 numere aleatoare pentru ponderi folosind
np.random.random(). - Calculează
returnsprin produsul scalar (np.dot(); înmulțește element cu element și sumează două array-uri) dintreweightsși randamentele lunare pentrudate-ul curent din buclă. - Folosește metoda
.setdefault()pentru a adăuga o listă goală ([]) în dicționarulportfolio_weightspentrudate-ul curent, apoi adaugăweightsla această listă.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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])