Portefeuilles berekenen
We gaan nu portefeuilles genereren om voor elke maand de beste te vinden. numpy's random.random() genereert willekeurige getallen uit een uniforme verdeling; daarna normaliseren we ze zodat ze optellen tot 1 met de /=-operator. We gebruiken deze gewichten om rendement en volatiliteit te berekenen. Rendementen zijn sommen van gewichten maal individuele rendementen. Volatiliteit is complexer en omvat de covarianties van de verschillende aandelen.
Tot slot slaan we de waarden op in dictionaries voor later gebruik, met de maanddatums als sleutels.
In dit geval genereren we slechts 10 portefeuilles per datum zodat de code sneller draait, maar in een realistische toepassing wil je eerder 1000 tot 5000 willekeurig gegenereerde portefeuilles gebruiken voor een paar aandelen.
Deze oefening maakt deel uit van de cursus
Machine Learning voor finance in Python
Oefeninstructies
- Genereer 3 willekeurige getallen voor de gewichten met
np.random.random(). - Bereken
returnsdoor het inwendig product (np.dot(); vermenigvuldigt element-voor-element en telt twee arrays op) te nemen vanweightsmet de maandrendementen voor de huidigedatein de lus. - Gebruik de methode
.setdefault()om een lege lijst ([]) toe te voegen aan de dictionaryportfolio_weightsvoor de huidigedate, en voeg vervolgensweightstoe aan de lijst.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
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])