最適なシャープレシオの取得
機械学習のターゲットとして使用するために、各日付の「理想的な」ポートフォリオを見つける必要があります。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()を使って、現在のdateのmax_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]])