始める無料で始める

最適なシャープレシオの取得

機械学習のターゲットとして使用するために、各日付の「理想的な」ポートフォリオを見つける必要があります。portfolio_returns 内の各日付についてループし、さらに portfolio_returns[date] で生成したポートフォリオについてもループします。次に、リターンをボラティリティで割ったシャープレシオを計算します(無リスクリターンは0と仮定します)。

enumerate() を使って現在の日付のリターン(portfolio_returns[date])をループし、インデックスを i で追跡します。そして、現在の日付と現在のインデックスを使って portfolio_volatility[date][i] で各ポートフォリオのボラティリティを取得します。最後に、np.argmax() を使って各日付における最大シャープレシオのインデックスを求めます。このインデックスは、後ほど理想的なポートフォリオの重みを取得する際に使用します。

この演習はコースの一部です

Python による金融のための Machine Learning

コースを見る

演習の手順

  • enumerate() を使って、ループ内の各 date に対応する portfolio_returns を列挙します。
  • ループ内の現在の date について、リターン(ret)を現在の日付と現在の i に対応する portfolio_volatility で割った値を sharpe_ratio 辞書のエントリに追加します。
  • np.argmax() を使って、現在の datemax_sharpe_idxs に最大シャープレシオのインデックスを設定します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# 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]])
コードを編集して実行