【コピペで動く!】20行で資産運用モデル作成 長期、中期、短期の3区分の期間チャートをGoogle ColabのPythonで作成 【違いをみつけろ!】

スポンサーリンク
投資

米国株分析に興味があるけれども何から始めていいかわからない人向けに、株価データの取得や期間を分割しての動向調査などできるようにします。実際のPythonコードを提示して、簡単・無料で分析できる環境をご紹介します。

2022/08/01 Webアプリ化しました。
常にS&P500のチャートは表示され、残りの3つの表示したい銘柄を選択してください。
表示期間は2020/3/24以降の全期間、2022年以降、2022/6/16以降の3期間となります。

横幅広めの画面で表示することをお勧めします。

元記事は 2021/05/03 noteに書いた記事になります。

20行で資産運用モデル作成 [期間チャート Python 米国株の株価]|TF|note
ーーーーーーーーーーー2021/07/27 追記ーーーーーーーーーーー Pythonの一部仕様変更などでうまく動いていなかった部分を新しいサイトでは修正しました。 今後適宜修正や改修を行おうとは思いますが、すべてを改修できるわけではないことはご承知おきください。 2021/07/27時点では動いていることは確認して...

以前のコードでは動かくなっているようですので、こちらのサイトで修正したものをリライトして、載せていきます。

2022/07/14時点で以下のコードはエラーなく動いていることを確認しています。

以前、以下のような記事を書かせていただきました。

米国株による資産運用に注目が集まるようになってきたこともあり、
・再現性のある、データに基づいた意思決定をしたい
・無料での株価データ取得して分析を行いたい
・難しいことはしたくないけど、コピペぐらいならできる
という方向けに、20行程度で簡単に米国株のチャート表示などできるプログラムコードのある記事でした。

プログラムや分析に興味を持っていただければということで、簡単であることを優先した記事だったのですが、その記事に新たな独自にアレンジを加えられた優良な記事をお見かけしました。

【Python】3ステップで米国株チャート|Hippen(米国株,python)|note
記事は無料で読めます。 Pythonを使えば、下記の3ステップで下のチャートが取得できます。  1.Googleコラボ(リンク)にアクセス。  2.コードコピペ。  3.実行ボタンクリック。 実質、5分もかからないんじゃないかな? では、やっていきましょう。 1.Googleコラボにアクセス。 Goog...

Twitterでも拝見させていただいてますが、知的好奇心を刺激されるような記事を数多く書かれたり、着目点の独自性など非常に参考になると思っています。

そんな記事にインスパイアされる形で、”期間ごとの主役”が何であるか・セクターローテーションがどうなっているかを見やすくするチャートの表記プログラムをご紹介したいと思います。

目次

  1. 目標とすること
  2. 使用するツール
  3. 実際のコードとやっていること
  4. 何が分かるのか

目標とすること

目標とするのはプログラム言語Pythonを使って米国株の指数ETFデータデータを取得し、グラフ・チャートを表示し、分析することです。初心者の方にも簡単にできるように使い方、コードを書いてありますので、入門編としても最適だと思います。

使用するツール

使用するツールはGoogle Colaboratoryのpythonを使いますので、無料で、簡単に行うことができます。Google Colaboratoryについては以前書いた記事をご参照いただければと思います。また、今回は上記「Hippen(米国株)さんの記事」に追記するような形でのチャート表示を想定しています。

実際のコードとやっていること

Open In Colab

Google Colabの共有ファイルは上記になります。Googleのアカウントがあればログインして、そのままShift+Enterで再現できると思います。

コードは以下の通りです。「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)     
画像2
画像3

defの部分で横に3つのチャートを並べる関数を定義します。
そののち、区間を区切る転換点となる日付を指定し、
そういったパラメータを使ってチャートを表示させていきます。

実際に実行させると以下のような3枚の区間区切りのチャートが表示されると思います。

defの部分で横に3つのチャートを並べる関数を定義します。
そののち、区間を区切る転換点となる日付を指定し、
そういったパラメータを使ってチャートを表示させていきます。

実際に実行させると以下のような3枚の区間区切りのチャートが表示されると思います。

画像1

2022/07/14時点での年初来で区切ったチャートは以下の通りです。

一番右のチャートは2022年年初来のパフォーマンス

何が分かるのか

「Hippen(米国株)さんの記事」でも
・グロース優位な時期
・スモール優位な時期
・バリュー優位な時期
など記述があったと思います。その通りだと思うのですが、
次に何が来るのか?という予測は正直難しいかなと思っています。

ただ、「予測」はできなくても「観測」や「投資主体の懐の痛み具合」などから選択の幅を狭めることは可能かもしれません。

そういったものに興味ある場合は、また別の研究などしてみるとよいかもしれませんね。

この記事ではチャートの表記について、記しました。
ご参考になれば幸いです。

---

投資関係・Python関係の記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
デコピコミンが全国(47都道府県)で、どの施設に出てくるか地図(Google Maps)で確認!!【ピクミン ブルーム(Pikmin Bloom)】
【コピペで動く!】レイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築するには? ETFの手軽さとそのパフォーマンスの高さとは!【違いをみつけろ!】
Windows10で機械学習環境チェック CPU/GPUでTensorflowの作業時間はどのくらい違うのか、Google Colabとも比較してみた。(CUDA Toolkit,cuDNN)
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
米国債のゼロクーポン債STRIPSについてのメモ
株価時系列データを分析する上で正規化を行う事の重要性について紹介する【違いをみつけろ!】
ConoHa WINGレンタルサーバーでPython! Webアプリcgiを動かす手順を紹介!3つの例あり【コピペで動く!】
Google Analytics にPython APIで接続してみた話【コピペで動く!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
Google Data Portalを使ってWeb上のオープンデータを使って簡単に情報を可視化しようという話

コメント

タイトルとURLをコピーしました