はじめに
データの準備と分析
効率的フロンティアの視覚化
ポートフォリオとACWIの比較
結論と次のステップ
参考文献
皆さん、こんにちは!今回は、私たちの最適ポートフォリオ を探す旅をさらに進め、全世界株式(俗に言うオルカン )が果たして最適な資産配分をしているのかを見てみましょう。MSCI のAll Country World Index(ACWI)など全世界の株式の指数に連動するETF や投資信託 を皆様もお持ちだったり、検討されたことがあるのではないでしょうか。ここでもPython と現代ポートフォリオ 理論の力を借りてデータを分析してみました!コードへのリンクは最下部にあるので皆さまも是非試してください。また現代ポートフォリオ 理論については詳しくこちらのエントリー で説明しています。
MSCI ACWI 組み入れ比率
データの準備と分析
早速yfinanceライブラリを使い、VTI(米国株式)、VEA(先進国株式除く米国)、VWO(新興国 株式)の3つのETF から成るポートフォリオ の過去10年間のデータを分析しました。
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
symbols = [ 'VTI' , 'VEA' , 'VWO' ] # ここに好きな銘柄を足してみてくださいね!
# 過去10年分の日足データをダウンロード
data = {symbol: yf.download(symbol, period= '10y' , interval= '1d' )[ 'Adj Close' ] for symbol in symbols}
# 各ETF の終値 データをDataFrameに結合
close_prices = pd.DataFrame(data)
# 日次リターンを計算
daily_returns = close_prices.pct_change().dropna()
効率的フロンティアの視覚化
効率的フロンティアは、与えられたリスクレベルで最大のリターンを得られるポートフォリオ の組み合わせを示します。この概念を視覚化するために、ランダムに生成した10,000のポートフォリオ を分析し、それぞれのリターン、ボラティリティ 、そしてシャープ比率を計算しました。
num_assets = len (symbols)
num_portfolios = 10000
return_arr = np.zeros(num_portfolios)
volatility_arr = np.zeros(num_portfolios)
sharpe _arr = np.zeros(num_portfolios)
# 年間リスクフリーレートを仮定(例:2%)
risk_free_rate = 0.02
np.random.seed( 100 )
for i in range (num_portfolios):
# ランダムな重みを生成
weights = np.random.random(num_assets)
weights /= np. sum (weights)
all_weights[i, :] = weights
# 期待リターン
return_arr[i] = np.dot(weights, daily_returns.mean()) * 252
volatility_arr[i] = np.sqrt(np.dot(weights.T, np.dot(daily_returns.cov () * 252 , weights)))
# シャープ比率
sharpe _arr[i] = (return_arr[i] - risk_free_rate) / volatility_arr[i]
# 効率的フロンティアのプロット
plt.scatter(volatility_arr, return_arr, c=sharpe _arr, cmap= 'viridis' )
plt.colorbar(label= 'Sharpe Ratio' )
plt.xlabel( 'Volatility(Risk)' )
plt.ylabel( 'Expected Return' )
plt.scatter(max_sharpe _volatility, max_sharpe _return, color= 'red' , s= 50 , edgecolors= 'black' )
plt.title( 'Efficient Frontier' )
plt.show()
3銘柄の効率的フロンティア
最適な配分[VTI, VEA, VWO]
やはり米国株が強く、安定しているため米国株にかなり偏ったポートフォリオ を最適な配分として出してきますね。ではこのポートフォリオ とオルカン の対象指数として採用されることも多いMSCI ACWIのリターンを比較した結果、どうなるのでしょうか?
# ACWIのデータをダウンロード
acwi_data = yf.download( 'ACWI' , period= '10y' , interval= '1d' )
acwi_close = acwi_data[ 'Adj Close' ]
# ACWIのトータルリターンを計算
acwi_total_return = (acwi_close.iloc[ -1 ] / acwi_close.iloc[ 0 ]) - 1
optimal_weights = all_weights[max_sharpe _idx, :]
optimal_portfolio_return = (daily_returns * optimal_weights). sum (axis= 1 ) + 1
optimal_portfolio_total_return = optimal_portfolio_return.cumprod().iloc[ -1 ] - 1
print ( f "ACWIのトータルリターン: {acwi_total_return :.2% } " )
print ( f "最適ポートフォリオ のトータルリターン: {optimal_portfolio_total_return :.2% } " )
結果
結論と次のステップ
過去いろいろな記事でオルカン とその他の比較を行ってきましたが、またもやオルカン 以外に軍配が上がってしまいました。これは米国株に偏重したポートフォリオ 配分になっているため当たり前ですよね。ただ気をつけないければならないのは今回国は違えど同じ資産クラス(株式)でポートフォリオ を組んでいますね?ということは相関係数 もかなり1に近い(暴落するときは株式全部暴落する)ので本当の意味での分散投資 にはなっていないんです。例えば逆相関になることが多いといわれる債権関係や不動産なども混ぜることで一つの資産クラスが暴落しても耐えることできる盤石な「最適ポートフォリオ 」が完成します。