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>Ü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) vonweightsmit den monatlichen Renditen für das aktuelledatein der Schleife bildest. - Verwende die Methode
.setdefault(), um dem Dictionaryportfolio_weightsfür das aktuelledateeine leere Liste ([]) hinzuzufügen, und hänge anschließendweightsan 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])