Нахождение наилучших коэффициентов Шарпа
Нам нужно найти «идеальные» портфели для каждой даты, чтобы использовать их в качестве целевых значений для машинного обучения. Мы будем перебирать каждую дату в portfolio_returns, а затем перебирать портфели, сгенерированные с помощью portfolio_returns[date]. Для каждого портфеля рассчитаем коэффициент Шарпа — отношение доходности к волатильности (при условии нулевой безрисковой доходности).
Мы используем enumerate() для перебора доходностей по текущей дате (portfolio_returns[date]) и отслеживания индекса с помощью i. Затем по текущей дате и текущему индексу получаем волатильность каждого портфеля с помощью portfolio_volatility[date][i]. Наконец, находим индекс наилучшего коэффициента Шарпа для каждой даты с помощью np.argmax(). Этот индекс мы используем для получения оптимальных весов портфеля.
Это упражнение является частью курса
Машинное обучение для финансов на Python
Инструкции к упражнению
- С помощью
enumerate()перечислите значенияportfolio_returnsдля каждойdateв цикле. - Для текущей
dateв цикле добавьте в словарьsharpe_ratioзначение, равное доходности (ret), делённой наportfolio_volatilityдля текущей даты и текущегоiв циклах. - Установите значение
max_sharpe_idxsдля текущейdateравным индексу максимального коэффициента Шарпа с помощьюnp.argmax().
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# 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]])