20行で資産運用モデル作成 [期間チャート Python 米国株の株価]
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー
Pythonの一部仕様変更などでうまく動いていなかった部分を新しいサイトでは修正しました。
今後適宜修正や改修を行おうとは思いますが、すべてを改修できるわけではないことはご承知おきください。
2021/07/27時点では動いていることは確認しております。
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー
以前、以下のような記事を書かせていただきました。
米国株による資産運用に注目が集まるようになってきたこともあり、
・再現性のある、データに基づいた意思決定をしたい
・無料での株価データ取得して分析を行いたい
・難しいことはしたくないけど、コピペぐらいならできる
という方向けに、20行程度で簡単に米国株のチャート表示などできるプログラムコードのある記事でした。
プログラムや分析に興味を持っていただければということで、簡単であることを優先した記事だったのですが、その記事に新たな独自にアレンジを加えられた優良な記事をお見かけしました。
Twitterでも拝見させていただいてますが、知的好奇心を刺激されるような記事を数多く書かれたり、着目点の独自性など非常に参考になると思っています。
そんな記事にインスパイアされる形で、”期間ごとの主役”が何であるか・セクターローテーションがどうなっているかを見やすくするチャートの表記プログラムをご紹介したいと思います。
目標とすること
目標とするのはプログラム言語Pythonを使って米国株の指数ETFデータデータを取得し、グラフ・チャートを表示し、分析することです。初心者の方にも簡単にできるように使い方、コードを書いてありますので、入門編としても最適だと思います。
使用するツール
使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。また、今回は上記「Hippen(米国株)さんの記事」に追記するような形でのチャート表示を想定しています。
実際のコードとやっていること
コードは以下の通りです。「Hippen(米国株)さんの記事」のコードのあとに追記いただく形になります。
!pip install yfinance --upgrade --no-cache-dir
import datetime
import yfinance as yf
import matplotlib.pyplot as plt
%matplotlib inline
start_D = datetime.date(2020,3,23)#コロナ底
end_D = datetime.date.today()
codelist = ["VUG","VTV","VBK","VBR"]
data2 = yf.download(codelist, start=start_D, end=end_D)["Adj Close"]
df_all=(1+data2.pct_change()).cumprod()
df_all.rename(columns={'VBR':'Small Value','VTV':'Large Value','VBK':'Small Growth','VUG':'Large Growth'},inplace=True)
df_all.plot(figsize=(16,9),fontsize=30,linewidth=5,alpha=0.5)
plt.legend(fontsize=18)
x1 = "2020-10-29" #転換点1
plt.axvline(x1,color='gray',linewidth=2 )
x1 = "2021-02-13" #転換点2
plt.axvline(x1,color='gray',linewidth=2 )
x1 = "2021-03-29" #転換点3
plt.axvline(x1,color='gray',linewidth=2 )
plt.title("Growth vs Value , Small vs Large",color='gray', fontsize=50)
plt.show()
###上記が「Hippen(米国株)さんの記事」になります。
def SidePlot3(df_all,zone1_start,zone2_start):
import matplotlib.dates as mdates
import numpy as np
dateformat=mdates.DateFormatter('%y/%m/%d')
plt.rcParams["font.size"] = 18
fig, axs = plt.subplots(1,3, figsize=(20, 8),sharey=False)
for code in df_all.columns :
axs[0].plot(df_all[code].index,(1+df_all[code]).cumprod(),linewidth = 3.0)
axs[0].axvline(x=zone1_start,linewidth=2,color="b")
axs[0].axvline(x=zone2_start,linewidth=2,color="r")
axs[0].axhline(y=1,linewidth=2,color="r")
axs[0].grid(True)
axs[0].xaxis.set_major_formatter(dateformat)
for code in df_all.columns :
axs[1].plot(df_all[code][zone1_start:].index,(1+df_all[code][zone1_start:]).cumprod(),linewidth = 3.0,label=code)
axs[1].axhline(y=1,linewidth=2,color="r")
axs[1].grid(True)
axs[1].axvline(x=zone2_start,linewidth=2,color="r")
axs[1].xaxis.set_major_formatter(dateformat)
for code in df_all.columns :
axs[2].plot(df_all[code][zone2_start:].index,(1+df_all[code][zone2_start:]).cumprod(),linewidth = 3.0,label=code)
axs[2].legend(loc='center left', bbox_to_anchor=(1, 0.5), fontsize=18)
axs[2].axhline(y=1,linewidth=2,color="r")
axs[2].grid(True)
axs[2].xaxis.set_major_formatter(dateformat)
fig.autofmt_xdate()
###ここまでが3枚のチャートを表示する関数です。
import numpy as np
t1 = np.datetime64("2020-10-29")
t2 = np.datetime64("2021-02-13")
df_pct=data2.pct_change()
df_pct.rename(columns={'VBR':'Small Value','VTV':'Large Value','VBK':'Small Growth','VUG':'Large Growth'},inplace=True)
SidePlot3(df_pct,t1,t2)
defの部分で横に3つのチャートを並べる関数を定義します。
そののち、区間を区切る転換点となる日付を指定し、
そういったパラメータを使ってチャートを表示させていきます。
実際に実行させると以下のような3枚の区間区切りのチャートが表示されると思います。
何が分かるのか
「Hippen(米国株)さんの記事」でも
・グロース優位な時期
・スモール優位な時期
・バリュー優位な時期
など記述があったと思います。その通りだと思うのですが、
次に何が来るのか?という予測は正直難しいかなと思っています。
ただ、「予測」はできなくても「観測」や「投資主体の懐の痛み具合」などから選択の幅を狭めることは可能かもしれません。
そういったものに興味ある場合は、また別の研究などしてみるとよいかもしれませんね。
この記事ではチャートの表記について、記しました。
ご参考になれば幸いです。
------------------------------------告知枠------------------------------------------
Pythonで米国株を中心とした資産運用モデルについての記事を集めました。
Pythonで資産運用モデル作成|TF|note
よろしければ読んでみてください。
ここから先は
¥ 500
サポートしていただき大変ありがとうございます。 励みになります。