Ottieni i migliori rapporti di Sharpe
Dobbiamo trovare i portafogli "ideali" per ciascuna data così da usarli come target per il Machine Learning. Cicleremo su ogni data in portfolio_returns, poi sui portafogli generati con portfolio_returns[date]. Calcoleremo quindi il rapporto di Sharpe, ossia il rendimento diviso per la volatilità (assumendo un tasso privo di rischio pari a 0).
Usiamo enumerate() per scorrere i rendimenti della data corrente (portfolio_returns[date]) e tenere traccia dell'indice con i. Poi usiamo la data corrente e l'indice corrente per ottenere la volatilità di ciascun portafoglio con portfolio_volatility[date][i]. Infine, otteniamo l'indice del miglior rapporto di Sharpe per ogni data usando np.argmax(). Presto useremo questo indice per ricavare i pesi del portafoglio ideale.
Questo esercizio fa parte del corso
Machine Learning per la finanza in Python
Istruzioni dell'esercizio
- Usando
enumerate(), enumera iportfolio_returnsper ognidatenel ciclo. - Per la
datecorrente nel ciclo, aggiungi alla voce del dizionariosharpe_ratioil rendimento (ret) diviso perportfolio_volatilitydella data corrente e dell'attualeinei cicli. - Imposta il valore di
max_sharpe_idxsper ladatecorrente al indice del rapporto di Sharpe massimo usandonp.argmax().
esercizio interattivo pratico
Prova questo esercizio completando questo codice di esempio.
# Empty dictionaries for sharpe ratios and best sharpe indexes by date
sharpe_ratio, max_sharpe_idxs = {}, {}
# Loop through dates and get sharpe ratio for each portfolio
for date in portfolio_returns.keys():
for i, ret in enumerate(portfolio_returns[____]):
# Divide returns by the volatility for the date and index, i
sharpe_ratio.setdefault(date, []).append(____ / portfolio_volatility[date][____])
# Get the index of the best sharpe ratio for each date
max_sharpe_idxs[date] = np.argmax(sharpe_ratio[____])
print(portfolio_returns[date][max_sharpe_idxs[date]])