Inizia subitoInizia gratis

Calcola i portafogli

Ora genereremo dei portafogli per trovare il migliore di ogni mese. random.random() di numpy genera numeri casuali da una distribuzione uniforme; poi li normalizziamo in modo che sommino a 1 usando l'operatore /=. Usiamo questi pesi per calcolare rendimenti e volatilità. I rendimenti sono somme di pesi per i singoli rendimenti. La volatilità è più complessa e coinvolge le covarianze dei diversi titoli.

Infine salveremo i valori in dizionari per usarli in seguito, con le date dei mesi come chiavi.

In questo caso genereremo solo 10 portafogli per ciascuna data così il codice sarà più rapido, ma in uno scenario reale vorresti usare da 1000 a 5000 portafogli generati casualmente per un numero ridotto di titoli.

Questo esercizio fa parte del corso

Machine Learning per la finanza in Python

Visualizza corso

Istruzioni dell'esercizio

  • Genera 3 numeri casuali per i pesi usando np.random.random().
  • Calcola returns facendo il prodotto scalare (np.dot(); moltiplica elemento per elemento e somma due array) tra weights e i rendimenti mensili per la date corrente nel loop.
  • Usa il metodo .setdefault() per aggiungere una lista vuota ([]) al dizionario portfolio_weights per la date corrente, quindi aggiungi weights alla lista.

esercizio interattivo pratico

Prova questo esercizio completando questo codice di esempio.

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])
Modifica ed esegui il codice