ÎncepețiÎncepe gratuit

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

Vezi cursul

Instrucțiuni pentru exercițiu

  • Generează 3 numere aleatoare pentru ponderi folosind np.random.random().
  • Calculează returns prin produsul scalar (np.dot(); înmulțește element cu element și sumează două array-uri) dintre weights și randamentele lunare pentru date-ul curent din buclă.
  • Folosește metoda .setdefault() pentru a adăuga o listă goală ([]) în dicționarul portfolio_weights pentru date-ul curent, apoi adaugă weights la 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])
Editează și rulează codul