최적 Sharpe 비율 구하기
각 날짜별로 Machine Learning의 타깃으로 사용할 "이상적인" 포트폴리오를 찾아야 해요. 이를 위해 portfolio_returns의 각 날짜를 순회하고, 이어서 portfolio_returns[date]에 있는 우리가 생성한 포트폴리오들을 순회할 거예요. 그런 다음 무위험 수익률을 0이라고 가정하고, 수익률을 변동성으로 나눈 Sharpe 비율을 계산합니다.
현재 날짜(portfolio_returns[date])의 수익률을 순회할 때 enumerate()를 사용해 인덱스 i도 함께 추적해요. 그런 다음 현재 날짜와 현재 인덱스를 사용해 각 포트폴리오의 변동성을 portfolio_volatility[date][i]로 가져옵니다. 마지막으로 np.argmax()를 사용해 각 날짜에서 Sharpe 비율이 가장 큰 항목의 인덱스를 구해요. 곧 이 인덱스를 사용해 이상적인 포트폴리오 가중치를 가져올 거예요.
이 연습은 강의의 일부입니다
Python으로 배우는 금융 분야 Machine Learning
연습 안내
- 반복문에서 각
date에 대해enumerate()를 사용해portfolio_returns를 나열하세요. - 반복문의 현재
date에 대해, 수익률(ret)을 현재 날짜와 현재i에 해당하는portfolio_volatility로 나눈 값을sharpe_ratio딕셔너리 항목에 추가하세요. - 현재
date의max_sharpe_idxs값을np.argmax()로 최대 Sharpe 비율의 인덱스로 설정하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
# 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]])