Obtén los mejores ratios de Sharpe
Necesitamos encontrar las carteras "ideales" para cada fecha para usarlas como objetivos en Machine Learning. Recorremos cada fecha en portfolio_returns y, para cada una, las carteras que generamos con portfolio_returns[date]. Después calculamos el ratio de Sharpe, que es el retorno dividido por la volatilidad (suponiendo un retorno libre de riesgo de 0).
Usamos enumerate() para iterar por los retornos de la fecha actual (portfolio_returns[date]) y llevar la cuenta del índice con i. Luego usamos la fecha actual y el índice actual para obtener la volatilidad de cada cartera con portfolio_volatility[date][i]. Por último, obtenemos el índice del mejor ratio de Sharpe para cada fecha usando np.argmax(). Usaremos ese índice en breve para obtener los pesos de la cartera ideal.
Este ejercicio forma parte del curso
Machine Learning para finanzas con Python
Instrucciones del ejercicio
- Usando
enumerate(), enumera losportfolio_returnspara cadadateen el bucle. - Para la
dateactual en el bucle, añade a la entrada del diccionariosharpe_ratioel retorno (ret) dividido porportfolio_volatilitypara la fecha actual y eliactual en los bucles. - Establece el valor de
max_sharpe_idxsde ladateactual como el índice del máximo ratio de Sharpe usandonp.argmax().
ejercicio interactivo práctico
Prueba este ejercicio completando este código de ejemplo.
# 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]])