開始使用免費開始

取得最佳 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 字典的該日期項目。
  • 將目前 datemax_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]])
編輯並執行程式碼