資産運用基本方針を決める with Python
資産運用の方法には色々とあるとおもいますが、敗者のゲームという本には、運用基本方針を作成して、それに忠実に資産運用せよとのことだったので、運用基本方針を明文化してみました。これを参考に皆様も自分の基本運用方針を作ってみてください。
第一段階 ゴール決定とアセットアロケーション
まずは、投資のゴールを決めます。
ゴールは「老後資産構築と直近の収入増加による生活の充実化」です。
直近の収入増加と資産構築をゴールとするため、目的はリターンの最大化です。
つぎに、アセットアロケーションを決めます。資産全体を株式、債権、不動産、現金、現物、ETF、REITなど様々な金融商品に割り当てる作業です。目的はリターンの最大化であるため、投資途中の途中の値下がりリスク(ポートフォリオ価値の分散)は許容して、資産の利用を開始する時点のリターンの期待値を最大化するようなポートフォリオを作る。資産利用のタイミングは24年後〜27年後の間です。このタイミングで現金化するか、高配当のポートフォリオに切り替えて資産を利用します。
長期投資かつ成長重視のポートフォリオにするため、ETFに含まれている債権を除き、すべてを株式とETFに投入します。これらにリターン期待値の高いものが多い傾向にあるからです。
第二段階 株式配分の決定
次に株式やETFをすこし詳しく決めます。例えば、投資先は米国か日本か、分野をどこにするか、それぞれのカテゴリに何%投資するかといったことです。例えば、1000万円ほど資産がある場合、これを手堅く運用して老後の資金とし、今後の収入は現在の生活を良くするために、更にリターンレートと分散が高いものに投資することができます。
具体的には、長期投資分
米国IT安定株60%(VGT)
米国全体インデックス25%(VTI)
米国高配当株15%(VYM)
このポートフォリオの期待23年後期待リターンは4800万円となり、企業年金、国民年金、厚生年金、退職金と組み合わせて十分な生活のできる資産が得られます。(これはシミュレーションや年利による計算により求めます。)
今後の投資分に関しては、毎月9万円投資することとして、次の3つのカテゴリに投資します。
IT安定株はMicrosoftやAppleなど古参の手堅いIT企業などを指しており、米国IT成長株は主にスタートアップです。
米国IT安定株: 25% 2.5万
米国IT成長株 60% 6万
仮想通貨: 15% 1.5万
これらに関して、これらの3つのカテゴリの相関性が最近非常に高いという現象が起こっており、リスク分散にならない恐れがあります。それに関して計算してみました。
下記のグラフはBlock.Incという決済系の会社の株価とBTCの相関図ですが、確かに弱い相関があるようです。ピアソンの相関係数は0.65でした。
これは値としては大きいのですが、全期間で相関係数を求めた場合、やく0.3と低かったため、問題ないと判断します。
第三段階 アクティブパッシブ比率
次に、アクティブ投資、パッシブ投資の比率を決めます。
基本的には、すべてパッシブ運用とします。理由は基本的に長期投資であること、経済予測のためのツールや情報源が整っていないため、アクティブ運用は現時点では避けたいからです。ただし、80%以上の確率で暴落が起こると予測できる場合、資産の10%を一度売却して、更に10%落ちた時点で書い直しすることをOKとします。
ファンド、銘柄の選択、売買実行
下記の銘柄を次の比率で購入します。
IT安定株:VGT 2.5万円
米国IT成長株:SQ 3万円、U 3万円
仮想通貨:イーサリアム:1.5万円
タイミングは、毎月給与振込後の市場オープン日に規定量の購入を実施します。
ただし、間近3年の価格最大値よりも20%以上下落している場合、月間購入量を月間の規定量の0%から200%の範囲で変動して決定して良いとします。
ということで運用計画ができたので、後はこれに従って売買をやっていくだけです。
これは、自分の知識が増えたりするに従って改定しますが、必ずこれを改定してから売買に反映するようにしましょう。
相関計算
import dataclasses
import pandas_datareader.data as web
import datetime as dt
import pandas as pd
start = dt.date(1988,1,1)
end = dt.datetime.now()
btc_df = web.DataReader('BTC-USD',"yahoo", start, end)
sq_df = web.DataReader('SQ',"yahoo", start, end)
series1 = btc_df.loc['2022-03-20':'2022-6-19'].diff(periods=1)
series2 = sq_df.loc['2022-03-20':'2022-6-19'].diff(periods=1)
dataframe = pd.merge(series1["Adj Close"], series2["Adj Close"], left_index=True, right_index=True)
dataframe.plot.scatter(x='Adj Close_x', y='Adj Close_y')
print(series1.corrwith(series2)["Adj Close"])
Discussion