取得最佳 Sharpe 比率
我們需要為每個日期找出「理想」的投資組合,之後才能把它們作為機器學習的目標。你會先對 portfolio_returns 中的每個日期進行迴圈,接著對該日期下以 portfolio_returns[date] 產生的每個投資組合再次迴圈。然後計算 Sharpe 比率,也就是報酬除以波動度(假設無風險利率為 0)。
我們使用 enumerate() 來走訪當前日期(portfolio_returns[date])的報酬,同時用 i 記錄索引。接著,利用目前的日期與索引,取得每個投資組合的波動度:portfolio_volatility[date][i]。最後,使用 np.argmax() 取得每個日期 Sharpe 比率的最佳索引。我們很快會用這個索引來取得理想投資組合的權重。
本練習屬於課程
Python 金融 Machine Learning
練習說明
- 使用
enumerate(),針對迴圈中的每個date列舉對應的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]])