Obter os melhores índices de Sharpe
Precisamos encontrar os portfólios "ideais" para cada data para usá-los como alvos em Machine Learning. Vamos iterar por cada data em portfolio_returns e, em seguida, pelos portfólios que geramos com portfolio_returns[date]. Depois, vamos calcular o índice de Sharpe, que é o retorno dividido pela volatilidade (assumindo retorno livre de risco igual a 0).
Usamos enumerate() para percorrer os retornos da data atual (portfolio_returns[date]) e acompanhar o índice com i. Depois, usamos a data atual e o índice atual para obter a volatilidade de cada portfólio com portfolio_volatility[date][i]. Por fim, obtemos o índice do melhor índice de Sharpe para cada data usando np.argmax(). Em breve, usaremos esse índice para obter os pesos do portfólio ideal.
Este exercicio faz parte do curso
Machine Learning para Finanças em Python
Instruções do exercicio
- Usando
enumerate(), enumere osportfolio_returnspara cadadateno loop. - Para a
dateatual no loop, faça o append na entrada do dicionáriosharpe_ratiocom o retorno (ret) dividido porportfolio_volatilityda data atual e doiatual nos loops. - Defina o valor de
max_sharpe_idxsdadateatual como o índice do maior índice de Sharpe usandonp.argmax().
exercicio interativo prático
Tente este exercicio completando este código de exemplo.
# 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]])