Lấy Sharpe ratio tốt nhất
Chúng ta cần tìm các danh mục "lý tưởng" cho từng ngày để dùng làm mục tiêu cho Machine Learning. Bạn sẽ lặp qua từng ngày trong portfolio_returns, rồi lặp qua các danh mục đã tạo với portfolio_returns[date]. Sau đó, bạn tính Sharpe ratio, tức là lợi nhuận chia cho độ biến động (giả định lãi suất phi rủi ro bằng 0).
Ta dùng enumerate() để lặp qua các mức lợi nhuận cho ngày hiện tại (portfolio_returns[date]) và theo dõi chỉ số bằng i. Tiếp đó, dùng ngày hiện tại và chỉ số hiện tại để lấy độ biến động của từng danh mục với portfolio_volatility[date][i]. Cuối cùng, lấy chỉ số của Sharpe ratio tốt nhất cho mỗi ngày bằng np.argmax(). Chúng ta sẽ sớm dùng chỉ số này để lấy các trọng số danh mục lý tưởng.
Bài tập này là một phần của khóa học
Machine Learning cho Tài chính bằng Python
Hướng dẫn bài tập
- Dùng
enumerate()để liệt kêportfolio_returnscho mỗidatetrong vòng lặp. - Với
datehiện tại trong vòng lặp, thêm vào mục từ điểnsharpe_ratiogiá trị bằng lợi nhuận (ret) chia choportfolio_volatilitycủa ngày hiện tại vàihiện tại trong các vòng lặp. - Gán giá trị cho
max_sharpe_idxscủadatehiện tại là chỉ số của Sharpe ratio lớn nhất bằng cách dùngnp.argmax().
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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]])