Obține cele mai bune rapoarte Sharpe
Trebuie să identificăm portofoliile „ideale" pentru fiecare dată, astfel încât să le putem folosi ca ținte pentru învățarea automată. Vom parcurge fiecare dată din portfolio_returns, apoi vom itera prin portofoliile generate cu portfolio_returns[date]. Vom calcula raportul Sharpe, care este randamentul împărțit la volatilitate (presupunând un randament fără risc egal cu 0).
Folosim enumerate() pentru a parcurge randamentele pentru data curentă (portfolio_returns[date]) și pentru a urmări indexul cu i. Apoi folosim data curentă și indexul curent pentru a obține volatilitatea fiecărui portofoliu cu portfolio_volatility[date][i]. În final, obținem indexul celui mai bun raport Sharpe pentru fiecare dată folosind np.argmax(). Vom folosi acest index pentru a extrage ponderile portofoliului ideal în pasul următor.
Acest exercițiu face parte din cursul
Machine Learning pentru finanțe în Python
Instrucțiuni pentru exercițiu
- Folosind
enumerate(), enumerăportfolio_returnspentru fiecaredatedin buclă. - Pentru
date-ul curent din buclă, adaugă în dicționarulsharpe_ratiorandamentul (ret) împărțit laportfolio_volatilitypentru data curentă și valoarea curentă a luiidin buclă. - Setează valoarea din
max_sharpe_idxspentrudate-ul curent ca indexul raportului Sharpe maxim, folosindnp.argmax().
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
# 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]])