Znajdź najlepsze wskaźniki Sharpe'a
Musimy znaleźć „idealne" portfele dla każdej daty, aby móc wykorzystać je jako wartości docelowe w uczeniu maszynowym. Przechodzimy pętlą przez każdą datę w portfolio_returns, a następnie przez portfele wygenerowane za pomocą portfolio_returns[date]. Obliczamy wskaźnik Sharpe'a, czyli stopę zwrotu podzieloną przez zmienność (zakładając, że stopa zwrotu wolna od ryzyka wynosi 0).
Używamy enumerate(), aby iterować po stopach zwrotu dla bieżącej daty (portfolio_returns[date]) i śledzić indeks za pomocą i. Następnie używamy bieżącej daty i bieżącego indeksu, aby uzyskać zmienność każdego portfela za pomocą portfolio_volatility[date][i]. Na koniec wyznaczamy indeks najlepszego wskaźnika Sharpe'a dla każdej daty, korzystając z np.argmax(). Ten indeks posłuży nam wkrótce do pobrania optymalnych wag portfela.
To ćwiczenie jest częścią kursu
Uczenie maszynowe w finansach z Pythonem
Instrukcje do ćwiczenia
- Używając
enumerate(), wypisz za pomocą enumeracji wartościportfolio_returnsdla każdejdatew pętli. - Dla bieżącej
datew pętli dołącz do wpisu słownikasharpe_ratiowartość zwrotu (ret) podzieloną przezportfolio_volatilitydla bieżącej daty i bieżącegoiw pętlach. - Ustaw wartość
max_sharpe_idxsdla bieżącejdatejako indeks maksymalnego wskaźnika Sharpe'a, używającnp.argmax().
Interaktywne ćwiczenie praktyczne
Spróbuj tego ćwiczenia, uzupełniając ten przykładowy kod.
# 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]])