高機能チャート表示WebサービスのTradingViewを用いての日本株のポートフォリオ運用について紹介します。TradingViewでは複数銘柄を合成した株価チャートを表示できことをご存知ですか?この機能を使うと自分のポートフォリオや気になるポートフォリオの過去推移など、簡易的に確認することができます。また、配当分のデータも表示・検討することで高(好)配当銘柄に投資したいという方にとっても役に立つ記事なると思います。単元100株への修正や、下落時の買い増し等、複雑になる部分は割愛させていただいています。
もともと、TradingViewを使ってポートフォリオ運用(複数銘柄運用) 米国株 2019/10/01に10万ドル(約1000万円)投資していたらどうなった?TradingViewのミニチャートウィジェットで簡単確認!という記事を以前書いていましたが、それの日本株向けの記事になります。
2019/10/01から2023/02/17まで等金額投資を行っていた場合の配当込みでの結果を確認できるWebアプリを作成したので、紹介しておきます。
Plot!ボタンを押すとチャート表示されます。期間は初期値では2019/10/01ですが、それ以降2023/02/17以前の任意の日付からとうがく投資をスタートした場合のシミュレーションができます。
Your browser does not support iframes.
記事で紹介している9銘柄以外でも使えますので、興味ある方はいろいろ使用してみてください。
2019/10/01で9銘柄合計で1000万円を均等金額を投資したとすると以下のようになります。
(TradingViewのアカウントを持っている方は見れると思います。埋め込みチャートはTradingViewの機能制限のために表示できません。)
目標とすること
・Pythonで日本株のデータ、特に配当込みのデータを取得します。
・2020年1月年初の段階でほぼ同額のポートフォリオを構築したと仮定し、2020年3月のコロナ下落時にどのくらいのドローダウンが発生したのかを確認します。
・狼狽売りなどを行わない、下値で買い増しを行わなかったと仮定した場合の現状でのべた持ちした時の資産額などを表示します。
使用するツールや対象とする銘柄群
以下のようなツイートを拝見しました。
日本企業の時価総額上位であるだけでなく、配当利回り上位、企業成長の見込める銘柄群という認識かと思いましたので、上記9銘柄でのポートフォリオを考えたいと思います。
NTT:9432
KDDI:9433
三菱商事:8058
三井物産:8031
伊藤忠:8001
MUFG:8306
SMBC:8316
東京海上:8766
オリックス:8591
各銘柄とその証券コードは以上のようになります。
準備
使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。
実際のコードとやっていること
今回使ったコードはGoogle Colabのファイルとして以下にシェアしてあります。
実際のコード
!pip install yfinance
配当込みデータを読み込むためのPythonパッケージをまずはインストールします。
import datetime
import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
start = datetime.date(2020,1,1)
end = datetime.date.today()
Tokyo=["9432.T","9433.T","8058.T","8031.T","8001.T","8306.T","8316.T","8766.T","8591.T",]
codelist =Tokyo
data2_yf = yf.download(codelist, start=start, end=end)["Adj Close"]
print(data2_yf.head().append(data2_yf.tail()))
上記9銘柄の2020年1月1日以降の配当込みデータを読み込みます。
YahooのAPIを利用してデータを取得しますので、証券コードの後に「.T」という認識コードを入れることで、日本株のデータ取得ができます。
配当分のデータを取得したいので、[“Adj Close”]という配当調整済みのデータを取得します。
データチェックとして、8001:伊藤忠の価格を調べてみます。
2022/08/12の引け値は3815であっているようです。
2020/01/06は株価自体は右上に表示されている2516だったようですが、配当分の修正を行う必要があります。
TradingViewでは右下の「adj」という部分をクリックすると配当分を考慮した価格チャートに切り替わります。配当分を考慮すると2020/01/06の引け値は2333であると右上に出ています。
先ほどのPythonで取得したデータも2332.79となっていますので問題はないという事で以下話を進めていきます。
2020/01/06時点での各銘柄約110万円相当買ったと仮定した場合の概略の枚数や、買い付け時の価格などを計算し、それらをべた持ちした場合の推移を表示します。
display(round(1100000/data2_yf.head(1)))
display(round(1100000/data2_yf.head(1)).values*data2_yf.head(1))
display(round(1100000/data2_yf.head(1)).values*data2_yf.tail(1))
display((round(1100000/data2_yf.head(1)).values*data2_yf).sum(axis=1))
今回の例では単元100株などの補正は行っていませんので、ご注意ください。
2020/01/06に9900095.63(990万円)で買い付けたものがコロナ後の上昇もあり、現在は14600368.05(1400万円)相当になっているようです。
また、ポートフォリオの価格の推移と、最大値、最小値などの情報は以下のようになります。
(round(1100000/data2_yf.head(1)).values*data2_yf).sum(axis=1).plot()
plt.grid()
plt.show()
display((round(1100000/data2_yf.head(1)).values*data2_yf).sum(axis=1).describe())
約1000万円だったものが2020/03月のコロナ下落で約750万円までさがり、そののちの上昇で現在1400万円というのが資産推移のグラフで確認できます。
PythonでのデータをTradingViewで利用できるように以下、TradingViewの入力コードを作成します。
display(data2_yf.columns)
Tradingview_list=[s.replace('.T', '') for s in data2_yf]
display(Tradingview_list)
Tradingview_list=list(map(lambda s: 'TSE:' + s, Tradingview_list))
display(Tradingview_list)
display(type(Tradingview_list))
unit=(round(1100000/data2_yf.head(1)).astype(int).astype(str)).values.tolist()
display(unit[0])
display(type(unit))
input1=[a +"*"+ b for a, b in zip(unit[0], Tradingview_list)]
display(input1)
input2='+'.join(map(str, input1))
display(input2)
YahooのAPIで使用した証券コードをTradingView用に「TSE:」という形での証券コードに修正します。
証券コードのリストと、2020/01/06での各銘柄の買い付け枚数のリストを組み合わせることでTradingView用の入力値を作成します。
input1=[a +”*”+ b for a, b in zip(unit[0], Tradingview_list)]
や
input2=’+’.join(map(str, input1))
あたりのコードは実務系のデータの前処理をいろいろされる方は、「ああ、これ便利、、」というコーディングではないでしょうか。
今回は
472*TSE:8001+622*TSE:8031+426*TSE:8058+2121*TSE:8306+318*TSE:8316+685*TSE:8591+198*TSE:8766+438*TSE:9432+371*TSE:9433
という入力値を得ましたので、これを使ってTradingViewに表示させていきます。
TradingViewによる複数銘柄パフォーマンス表示
左上のシンボルコード入力枠をクリックするとシンボル検索のウィンドが空きますので、その枠内に今回の入力コードを入力(コピペ)します。
枠内に入植した状態
現在の値は14600368となっていますが、これはPythonで計算した時と同じ値になっていることが分かると思います。
2020/01/06のデータですが、右下の調整(日本語表示の場合)を押してない場合は値がずれています。
調整を押した場合の値と形状はPythonで計算したものと同じになることが確認できると思います。
結論
複数銘柄のポートフォリオ運用での資産推移が確認できますし、コロナといった大きめの下落時にどのくらいのドローダウンが発生したのか、より直感的にわかるのではないでしょうか。
—
投資に関する記事をご紹介します。
コメント