Aan de slagBegin gratis

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

Bekijk cursus

Oefeninstructies

  • Genereer 3 willekeurige getallen voor de gewichten met np.random.random().
  • Bereken returns door het inwendig product (np.dot(); vermenigvuldigt element-voor-element en telt twee arrays op) te nemen van weights met de maandrendementen voor de huidige date in de lus.
  • Gebruik de methode .setdefault() om een lege lijst ([]) toe te voegen aan de dictionary portfolio_weights voor de huidige date, en voeg vervolgens weights toe 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])
Code bewerken en uitvoeren