LoslegenKostenlos starten

Portfolios berechnen

Wir generieren jetzt Portfolios, um für jeden Monat das beste zu finden. numpy's random.random() erzeugt Zufallszahlen aus einer Gleichverteilung; anschließend normalisieren wir sie mit dem /=-Operator, sodass ihre Summe 1 ergibt. Diese Gewichte verwenden wir, um Renditen und Volatilität zu berechnen. Die Renditen sind Summen aus Gewichten mal einzelnen Renditen. Die Volatilität ist komplexer und beinhaltet die Kovarianzen der verschiedenen Aktien.

Zum Schluss speichern wir die Werte in Dictionaries zur späteren Verwendung, wobei die Monatsdaten als Schlüssel dienen.

In diesem Fall erzeugen wir nur 10 Portfolios pro Datum, damit der Code schneller läuft. In einem echten Anwendungsfall würdest du eher 1000 bis 5000 zufällig generierte Portfolios für einige Aktien verwenden.

Diese Übung ist Teil des Kurses

<Kurs>Maschinelles Lernen für Finanzen in Python</Kurs>
Kurs ansehen

Übungsanweisungen

  • Erzeuge 3 Zufallszahlen für die Gewichte mit np.random.random().
  • Berechne returns, indem du das Skalarprodukt (np.dot(); multipliziert elementweise und summiert zwei Arrays) von weights mit den monatlichen Renditen für das aktuelle date in der Schleife bildest.
  • Verwende die Methode .setdefault(), um dem Dictionary portfolio_weights für das aktuelle date eine leere Liste ([]) hinzuzufügen, und hänge anschließend weights an diese Liste an.

Interaktive praktische Übung

Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.

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 bearbeiten und ausführen