【コピペで動く!】セルインメイ(SELL IN MAY)数十年分をウェブサービスstockchartsとGoogle ColabのPythonとで確認・解析 (Pythonコードあり)Twitterで出てくる知見は本当か自分で調べてみよう

スポンサーリンク
投資

実際の数字を確認しながら、Sell in Mayという言葉が本当なのかを確認・検証します。米国株、日本株、特徴的な値動きはあるのでしょうか。
Sell in Mayは投資を行う人であれば、一度ならず耳にする・したことはあると思いますが、それが本当に起こることなのでしょうか。

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

セルインメイ(SELL IN MAY)数十年分ウェブサービスとPythonとで確認・解析してみました。|TF
ーーーーーーーーーーー2021/08/12 追記ーーーーーーーーーーー 今後こちらに移行します。 セルインメイ(SELL IN MAY)数十年分をウェブサービスstockchartsとPythonとで確認・解析 (Pythonコードあり) - worth2know.comセルインメイ(SELL IN ...

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

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

Sell in May(セルインメイ) とは

2019年の5月の株式市場はかなり大きな下落で、痛い思いをしている人もいるのではないかと思います。5月は「Sell in may(セルインメイ)」と呼ばれ、「株価が暴落しやすい」と警戒すべきという話もよく聞きます。

しかし、それは本当なのでしょうか?実際に簡単に確認できるサイトがあるので、それで20年分のデータを使って確認してみましょう。

使用するサイトは https://stockcharts.com です。

StockCharts.com | Advanced Financial Charts & Technical Analysis Tools
Trusted by millions of investors around the world, StockCharts.com has the award-winning charts, analysis tools and expert commentary you need to invest smarter...

実際の確認方法

このサイトにアクセスしていただいて、$SPXとシンボルを打っていただくと下の図のようにS&P500の大型株指数が表示されます。

そのチャートの一番下、右に[Seasonality Chart]というのがありますので、クリックすると各年の成績を確認することができるのです。

ディフォルトでは5年間の成績が出ているのですが、ここでは、スライダーを左に伸ばして、20年間のデータで確認してみたいと思います。

結果は5月の上昇率は20年間で65%で特別に低いわけでも、高いわけでもないようです。むしろ今月6月の方が悪いくらいです。

---2021/08/12 追記 ---

2021年時点で見ても70%ぐらい月次で上昇するようです。

---2021/08/12 追記 ---

次はどのような値動きをしたのか、各年の年初を基準とした値動きを見てみたいと思います。同じページの左下のボタンの真ん中をクリックしていただくと各年の%での価格推移が表示されます。

このまま20年分のデータがあると見にくいので、各5年ごとに見ていきましょう。表示させないためには上にあるその年の表示の部分をクリックして、グレーアウトしていきます。大変ですが、15個クリックしていただいて、非表示にして、今回は2015年から2019年のデータを表示してみたいと思います。

2019年の落ち方は激しいですが、それ以外の年はそれほどでもないようです。最近セルインメイと言われなくなってきたのはこういう理由があったのかもしれませんね。

この調子で各年を見ていただければと思うのですが、2010年からはデータが線ではなくて、ドットになっていますので、それはご了承ください。

目立つ下落は2010年と、2012年でしょうか。

このあたりの下落が記憶に強く残ってセルインメイという言葉言われるようになったのかもしれませんね。

さらに言うと、今年は5月に下落しましたから、2012年型の値動きをするのでしょうか。それとも2010年型なのでしょうか。

それはわかりませんが、歴史は繰り返すといいますし、注目してもいいかもしれませんね。

2021年8月、9月はSaaSの勢いの減退、コロナの状況、米国経済への不安が出てきています。
5月よりも現在の方が気になる方も多いのではないでしょうか。

このサイトでは今回 $SPX と打ったコードを $NIKK と打つと日経平均でのデータも確認できます。興味ある方は調べてみると面白いかもしれません。リンクをつけておきます。

Seasonality | Free Charts | StockCharts.com
Charts that show the monthly price performance trends for a stock, ETF or other security over an adjustable period of time, showing seasonal trends and statisti...

StockCharts.comを用いた分析など記事を書いてますので、ご紹介します。

同じ結果になりますが、Pythonを使って、また少し違う角度からアプローチ・解析してみたいと思います。

この記事でできること

この記事でできることは以下の通りです。

・セルインメイ(SELL IN MAY)がどのくらい正しいのか、米国株指数の1980年から2019年(約39年間)におけるリターンを考察します。
・そのような解析を行うPythonのコードを習得することができます。
・おまけとして、他の月もどうなのか検証します。

対象者

この記事の対象者は、こんな人です。

1.セルインメイ(SELL IN MAY)がどのくらい正しいのか、どのくらい投資のリターンに影響を及ぼすか興味がある人。
2.プログラムを書くようなめんどくさいことはしたくないが、結果は知りたい人。
3.解析を行うPythonプログラムコードに興味のある人。

プログラムのコードに興味ある方はPythonの基礎程度は知っておいた方が良いと思います。ただ、知らなくてもコードの説明はしてありますので、必要に応じて、学習することもできると思います。

また、記事を読むだけでも結果はわかるようになっています。
解析結果のグラフを張ってあるので、グラフだけ見てもわかるのではないかと思います。

この記事で使用するもの

以下の機能を使います。

Google ColaboratoryのPython

Pythonのコードはすべて書いてあるので、これをコピー&ペーストすれば自分で同じ検証ができます。

Google Colaboratoryのpythonでの利用方法

以下の記事を読んで、Google Colaboratoryを利用できるようにしておいてください。こちらのnoteを見ると、Pythonの環境構築の方法が分かります。

上記の記事と同じ部分も多いですが、改めて、データ取得の部分のコードをのせておきます。

!pip install yfinance --upgrade --no-cache-dir

import datetime
import yfinance as yf
import matplotlib.pyplot as plt
%matplotlib inline
start = datetime.date(1980,1,1)
end = datetime.date.today()
codelist=["^GSPC","^N225"]
data2 = yf.download(codelist, start=start, end=end)["Adj Close"]
display(data2["^GSPC"].dropna().head(1).append(data2["^GSPC"].dropna().tail(1)))
display(data2["^N225"].dropna().head(1).append(data2["^N225"].dropna().tail(1)))
(1+data2.pct_change()).cumprod().plot()
plt.show()

2021/08/12時点でのスクリーンキャプチャ

データ取得期間を1980年1月1日から現在の日付とし、取得する銘柄は
“^GSPC” : S&P 500
“^N225 : Nikkei 225
としています。

コードを入力した後はシフトキーを押しながらエンターを押す(「Shift + Enter」)と、上記の結果が出力されます

もし、

ValueError: zero-size array to reduction operation maximum which has no identity

というようなエラーメッセージがでてしまう場合はYahoo Financeへのアクセスが多くて、一時的にアクセス制限をしていることが考えられます。
10分程度おいて、再度 シフトキーを押しながらエンターを押して実行すると、結果が出てくると思います。

5月の結果

5月を調べるのは、以下のコードとなります。

analyse=100*data2.pct_change()
analyse_SIM=analyse[analyse["^GSPC"].index.month==5].groupby([lambda x: x.year]).sum()
display(analyse_SIM.mean())
analyse_SIM.plot.bar(figsize=(15,4),fontsize=18)
plt.grid(True)
plt.axhline(y=0, linewidth=4, color='r')
plt.show()

実際に行っていること

順にみていきたいと思います。

最初にパーセントでの騰落に変えて、それをanalyseというデータフレームに格納します。

analyse=100*data2.pct_change()

次に、5月だけを取り出すのですが、以下の手順を踏みます。

analyse[analyse["^GSPC"].index.month==5]

でまず、5月だけのデータになります。それを

.groupby([lambda x: x.year]).sum()

で年毎のデータの合計値に変えます。次の行では全期間の平均値を出しています。結果は以下のようになります。

S&P500はプラスです(+0.84)が、日経平均はマイナス(-0.073)のようです。
たしかに2019年は5%以上の下落のようです。

また、S&P500は毎年落ちているようには見えませんが、2010年と2012年に大きな下落をしているようです。これは上の記事で見たとおりですね。
今年も例年に比べると比較的大きな下落ですね。

日本の各月の状況

もうちょっと改変します。

for i in range(1,13):
  analyse_NK=analyse[analyse.index.month==i]["^N225"].groupby([lambda x: x.year]).sum()
  display(i,analyse_NK.mean())
  analyse_NK.plot.bar(figsize=(15,4),fontsize=18)
  plt.grid(True)
  plt.axhline(y=0, linewidth=4, color='r')
  plt.show()

行っているのは日経平均だけで、各月の41年分の動向を調べています。
for というループで、1月から12月まで順次回していきます。

結果は以下の通りです。

1月から3月ですが、1990年までは基本上がっている感じです。
2008年は1月から落ちていたんですね。
2011年の3月といえば、、悲しい時間を思い出します。

4月から6月ですが、2016年の6月Brexitが記憶にありますが、すでに誰も覚えてないでしょう。
日本株は5月落ちやすいのでしょうか。

7月から9月ですが、2015年8月の上海ショック記憶に残っています。
1990年は8月、9月とすさまじい下げですね。改めて、この下げを見たらまだまだ私なんか甘ちゃんか、、と思います。

10月から12月です。2008年のリーマンショックはやはり目立ちますね。2018年の12月も目立つ下げですが、1996年から数年間は12月弱かったのですね。あんまりよい年始が迎えられなさそうな、、そういう時代だったのでしょうか。

昔のデータみて、懐かしく思うようになったというのは私も歳をとったということでしょうか。汗・笑
みなさんも、あの時の。。。という時期があるのではないでしょうか。

株式市場は企業価値が上昇して、新たな価値が創造される場合、ゼロサムではなくプラスサムのゲームのはずなので、ぜひ市場が拡大して、全員の価値が増えるというような展開になってもらいたいものです。



投資に関する記事をご紹介します。

Python高速化! for文は遅いので、”これ”を使うと30倍早いですよ!【Google ColabのPython:コピペで動く!】
【コピペで動く!】Pythonで1.5GBのcsvファイル読み込み高速化:1分5秒⇒4秒程度 DASK , pickle (Pythonコードあり)
【コピペで動く!】日本株、米国株で個別銘柄ベータ値(β値)を簡単に調べる方法 Python 米国株 Webサービス&コード 【Google Colabで違いをみつけろ!】
【コピペで動く!】Google ColabでPython を用いての 効率的フロンティア と ポートフォリオの最適化 Efficient Frontier & Portfolio Optimization with Python [Part 2/2]
【コピペで動く!】20行で資産運用モデル作成 Google ColabのPythonで 米国株の株価を取得し、グラフ・チャートを表示
過去50年間のS&P500の季節性の値動きから負けにくいポジション構築はできるのか考える・大統領選挙のアノマリー対応!【コピペで動く!】Google ColabのPythonで自分で調べてみよう!
曜日による米国株指数(S&P500)のパフォーマンスに違いはあるのか?有利なポジション取りはできるのか?【Google ColabのPython:コピペで動く!】Twitterで出てくる知見は本当か自分で調べてみよう。
【解決】スクレイピングでHTTP Error 403: Forbiddenでアクセスできないときに試すべき方法【コピペで動く!】【Google Colab:Python:pd.read_html,selenium】
【解決】Google ColabのPythonでエクセル(Excel)ファイルやCSVファイルに出力・入力する方法【コピペで動く!】
【コピペで動く!】レイ・ダリオ推奨「オール・ウェザー戦略」をETFで構築するには? ETFの手軽さとそのパフォーマンスの高さとは!【違いをみつけろ!】
【コピペで動く!】IB証券(インタラクティブ・ブローカーズ証券 )へのPythonでのAPI接続 ib_insync [自分が使っているPythonコード]
米国債のゼロクーポン債STRIPSについてのメモ
自動化・効率化でなにができるのか!Google FinanceやYahoo Financeからデータ取得して年初来パフォーマンスや週次騰落率のファクターチェック
米国株のティッカー(Symbol)のスクレイピングによる取得、APIによるヒストリカルデータやファンダメンタルズデータ取得について【コピペで動く!】Python,Quandl,無料枠あり
Google ColabでYouTube動画を開始・終了の時間を指定してPythonでダウンロード(音声・動画両方対応)【コピペで動く!】

コメント