Pythonコード集 マーケット分析の記事

【S&P500指数】Pythonで4月のパフォーマンスを確認してみよう!

ーこの記事は3分で読めますー

アメリカの株式市場に参戦している機関投資家(プロの投資家集団)が、必ずチェックする株価指数がー

株価指数

S&P500指数

です。

 

S&P500指数とは

・米国の主要500社で構成する時価総額加重平均型の株価指数

・時価総額の大きさが指数の採用基準となっている

・S&Pダウ・ジョーンズ・インデックスが算出、公表している

・ニューヨーク証券取引所、NYSE American、NASDAQに上場している銘柄から選ばれる

・1941年から1943年の平均を10としている

 

この指数は、機関投資家のパフォーマンスを測定するベンチマークとなります。

ゆえに、彼らはS&P500指数の動きを常にチェックしているというわけです。

 

そこで今回は、4月の相場が本格的に始まることをふまえて、4月のS&P500 指数にはどのようなパフォーマンスのパターンがあるのか?この点について分析してみます。

もちろん、当ブログのメインテーマのひとつであるプログラミング言語の『Python』を使って。

今回のテーマ

Pythonで4月のS&P500指数のパフォーマンスパターンをチェック

 

ぜひ、最後までご覧ください!


この記事はこんな方におすすめ

こんな方におすすめ

  • 米国株投資に興味がある人
  • S&P500指数のトレンドを知りたい人
  • Pythonで株価の分析がしたい人
  • Pythonを学んでみたいけどためらっている人

 

この記事で何がわかるの?

わかること

  • S&P500指数のパフォーマンスパターン(4月)
  • PythonでYahoo!finance USからデータを取得する方法
  • Pandasでデータを処理する方法
  • Matplotlibでバーチャート(棒グラフ)を作成する方法

本題

さて、ここからが本題です。

まずは、今回の主役であるS&P500指数のトレンドを日足のチャートで確認してみましょう。

S&P500指数のチャートチェック

出所:TradingView 日足(2021年12月以降)

2022年に入り下落トレンドが続いていたS&P500指数ですが、3月14日にトレンドが転換していることがわかります。

4月のポイントは、3つあります。

3つのポイント

  • 4,600ポイントを完全に突破できるか
  • 4,600ポイントを突破した後、この水準がサポートとなるか
  • 下落する場合は200日線がサポートラインとなるか

今のS&P500指数で注目すべきことはー

今回のテーマ

4,600ポイントの攻防

です。

今年に入りこのポイントは、株価を下支えする『サポートポイント』としても、株価の上昇をおさえる『レジスタンスポイント』としても意識されるパターンが見られます。

この状況は、多くの投資家がこの水準を意識している、というわけです。

 

一方、200日の移動平均線(200日線)は、テクニカル分析の面で重要な指標です。

なぜなら、この移動平均線も多くの投資家が注目するからです。

実際に、今年に入ってからのS&P500指数は、このラインで反発したり反転したりするパターンが見られます。

これらの動きも、多くの投資家が200日線を意識していることを示唆しています。

 

毎年4月のS&P500指数はどんなパフォーマンスなのか?

明日から、4月相場が本格的に始まります。

S&P500指数は今月、4,600ポイントの水準を突破して反発トレンドを維持するのか?

それとも、200日線を下に抜けてしまうのか?

この点について、毎年4月のS&P500指数のパフォーマンスパターンをプログラミング言語『Python』を使って分析してみましょう。

分析の概要

  • 分析の対象:S&P500指数
  • データの期間:1985年以降
  • やりたいこと:毎年4月のパフォーマンスパターンを知ること

 

Pythonコード:データの取得

では、Pythonのコードを書いていきます。

今回は2つに分けて解説します。

コードの解説

  • 解説1:データの取得&処理
  • 解説2:データの可視化

まずは、データを取得し処理するコードからです。

なお、コード画面は左右にスクロール(スワイプ)できます。

・ライブラリのインポート

import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
import datetime as dt

いつも通り、必要なライブラリからインポートします。

 

・S&P500指数のデータを取得

df = yf.download(tickers='^GSPC', 
                 start='1923-01-01', 
                 end=dt.datetime.now(), 
                 interval='1mo')

S&P500指数の元となる指標は、1923年にスタートしています。なので、引数の『start』を1923年に設定しました。

Yahoo!finance USが提供しているデータは、1985年以降からとなります。

 

・データのチェック

df.head()
df.tail()

ちゃんとデータが取得できていることを確認するために、最低でも最初の5つ(head)と、最後の5つ(tail)をチェックしておきましょう。

 

・パフォーマンスの計算

df_performance = df.pct_change(1)*100
df_performance

『pct_change(1)』で、ひとつ前のデータとのパフォーマンスが簡単に計算できます。

 

・インデックスを一度リセット

df_performance.reset_index(inplace=True)

今後、データの処理を進めていく上で、一度インデックスをなくします。

具体的には、インデックスとして取得されていた『Date』をカラムにします。

 

・新たなカラム『Month』を作成

df_performance['Month'] = df_performance['Date'].dt.month
df_performance

ここで新しいカラム『Month』を作ります。

なぜか?

毎年4月のみのデータをピックアップするためです。

 

・『4月』のみをピックアップ

df_apr = df_performance[df_performance['Month'] == 4]
df_apr

ここで4月のみのデータをピックアップします。

[df_performance['Month'] == 4]が、Monthが4月となっているデータのみをピックアップして!というコードになります。

 

ここまでのコードを実行すると、以下のデータフレームが表示されます。

実行結果

一番左のカラム『Date』と、一番右のカラム『Month』を確認すると、ちゃんと毎年4月のデータのみがピックアップされていることがわかります。

 

・Dateと終値(Adj Close)のカラムのみをピックアップ

df_apr_performance = df_apr[['Date', 'Adj Close']]

#カラム名の変更
df_apr_performance.columns = ('Date', 'SPX')
df_apr_performance

ここで、必要なカラム名(データ)だけに絞りましょう。

その後、Adj Closeを分かりやすいカラム名に変更しましょう。

今回は、S&P500指数を示す『SPX』にしました。

 

・あらためて『Date』をインデックスにする

df_apr_performance.set_index('Date', inplace=True)

ここで、あらためて『Date』を再びインデックスにします。

set_index』とし、引数にDateを設定すればOK。

inplace=True』とすると、最新の情報が自動的に上書きされます。

 

・データフレームの確認

df_apr_performance.head()
df_apr_performance.tail()

最終的に使うデータが作成できました。

念のため、head( )とtail( )で確認すると、以下の実行結果が表示されます。

実行結果

どんなに時間がなくても、最低限、最初の5つと最後の5つのデータを確認するクセをつけてください。

今回は、ちゃんとデータフレームが作成できていることが確認できました。

 

Pythonコード:データの可視化

ここから、データを可視化するPythonコードの解説となります。

今回のチャートは、パフォーマンス分析でよく用いられる『バーチャート(棒グラフ)』です。

・データの可視化

df_apr_performance.plot(kind = 'bar', figsize = (15,10))
plt.xticks(rotation = 25);

S&P500指数 1985年以降のパフォーマンスチャート(4月)

たった2行のコードで、バーチャートを描画できました。

しかし、時間軸(x軸)が重なり合って見にくいです。

なので、次はこの点を改善してみます。

 

・データの可視化:x軸の編集

#時間軸の表記を変更する
df_apr_performance.index = df_apr_performance.index.strftime('%Y-%m')

#あらためてチャートを可視化
df_apr_performance.plot(kind = 'bar', figsize = (15,10))
plt.xticks(rotation = 50);

ポイントは1行目のー

ポイント

strftimeの使い方

です。

これを使うことで、時間軸の表記が自在に編集できます。

引数の『%Y-%m』は、年(Y)と月(m)のみを表記して!という意味です。

それをハイフン(-)でつなげているだけです。

%』は、アルファベットの前に付けるのがルールです。

 

コードを実行してみましょう。

S&P500指数 1985年以降のパフォーマンスチャート(4月)

あらためてチャートのx軸を描画すると、前よりも見やすくなったことがわかりますね。

 

分析コメント

1985年からのパフォーマンスを確認すると、4月のS&P500指数は上昇する傾向が見て取れます。

2008年のリーマンショック以降のパフォーマンスを確認すると、2012年以外はすべて上昇しています。

2012年前半は、ギリシャの債務問題に端を発した『欧州リスク』が意識されているタイミングでした。

偶然ですが、2022年もロシアーウクライナ紛争による『欧州リスク』が意識されています。

しかし、今年4月のS&P500指数は調整の反落を挟みながらも、4,600ポイントを挟んで底堅く推移すると、現時点でジェイは予想しています。

その理由はー

理由

・欧州リスクをこなしながら反発基調を維持する強さがあること
・米利上げペースの加速が意識されても大型グロース株に強さが見られること
・3月の米雇用統計が良好な内容となったこと
・VXV vs VIX レシオが『1.3』の水準に到達していないこと

なお、一番最後の理由(VXV / VIXレシオ)については、以下の記事をご参照ください。

関連記事
【S&P500】ボラティリティ指数が示す次に相場が下落するタイミングとは

続きを見る

 

おまけ

最後におまけのPythonコードです。

上のバーチャート(棒グラフ)を色分けして、さらに見やすくしてみます。

色分け

・プラスの年:緑色
・マイナスの年:赤色

 

Pythonコード:チャートの色分け

・まずは色分けする条件を設定

color = [('green' if x >= 0 else 'red') for x in df_apr_performance.SPX]

色分けの方法はいくつかありますが、一番簡単なのは『if文』を使うことです。

if文の意味 前半

・('green' if x >= 0 else 'red')
 xの値が0以上なら緑、それ以外は赤にして

if文の意味 後半

・for x in df_apr_performance.SPX
 読み込むデータはSPXのパフォーマンス
これをひとつひとつxに入れて読みんで

上のように、リスト形式([  ]形式)を用いてif文をひとつのコードでまとめる方法をー

方法

内包表記

といいます。

 

・色分けされたチャートを描画

#チャートの描画
fig, ax = plt.subplots(figsize = (15,10))
ax.bar(x = df_apr_performance.index, height = df_apr_performance.SPX, color = color)

#1985年以降の4月パフォーマンスの平均を描画
plt.axhline(y = df_apr_performance.SPX.mean(), color = 'black', ls = '--')
plt.xticks(rotation = 75);

最後に、色分けされたチャートを描画してみましょう。

最初のコード『fig, ax = plt.subplots( )』は、チャートの外枠を設定するお決まりのコードです。

ax.bar』とすることで、バーチャート(棒グラフ)が簡単に描画できます。

ax.barの引数

  • x:x軸のデータを設定
  • height:グラフ化したいデータを設定

さらに、引数の『color』に、先ほどif文で設定した色分けコード(変数color)を設定すれば、『プラスは緑 / マイナスは赤』のバーチャート(棒グラフ)が描画できます。

また今回は、1985年以降の平均パフォーマンスも同時に描画してみました(黒の点線)。

実行結果

プラスの年とマイナスの年を色分けすることで、より簡単にパフォーマンスのトレンドパターンを確認することができますね。

このようにPythonを使えば、基本的なコードを書くだけでも、色々な分析ができます。

今回の記事を読んでPythonに興味を持った方は、ぜひ下の『Pythonを学ぶなら』をご覧ください。

実際にジェイが受講した経験をもとに、学ぶ方のタイプに合わせて講座やサービスをピックアップしています。


Pythonを学ぶなら

 

・独学でガンガンやれる人は『Udemy』へ
 初心者の方におすすめのコースがこちら おすすめ度
現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル
Pythonに興味がある人、学ぶことをためらっている人には、このコースをおすすめします。
タイトルにあるとおり、現役のエンジニアの方がPythonの基礎から応用までを丁寧に教えてくれるコースです。
このコースを学習しながら、同時にアウトプットの練習もしていけば、効率よくプログラミングのスキルをアップさせることができます。

 

・独学が苦手な人は『テックアカデミー』へ
 まずは無料カウンセリングで適正を確かめよう おすすめ度
無料キャリアカウンセリング
独学が苦手な人は、迷わずプログラミングスクールに行くことをおすすめします。
メンターが的確に指導してくれるからです。
しかしスクールは、人によって合う合わないがあります。
まずは、無料カウンセリングのあるテックアカデミーで『プログラミングの学習ってこんな感じか』ということを体感してください。

Pythonコース
テックアカデミーのスタイルが自分に合うと思った方は、Pythonコースを受講してください。
このコースでは、Pythonに関するすべての基本が学べます。
学ぶ期間は、学生 / 社会人を問わず4週間(1ヶ月)がおすすめです。
それ以上だと間伸びして、学習するモチベーションが下がる可能性があるからです。

 

・機械学習まで視野に入れているならオンラインPython学習サービス『PyQ』へ
 基本から機械学習まで体系的に学ぼう おすすめ度
オンラインPython学習サービス「PyQ™(パイキュー)」
Udemyと同じく独学でOK!という人は、PyQをおすすめします。
PyQはPythonの基本から統計学、さらには機械学習まで学べる豊富なコースを提供しています。
問題を解く形式で勉強するスタイルなので、インプットとアウトプットのバランスが絶妙なカリキュラムとなっています。

【PyQ】いよいよ、誰でも機械学習を学べる時代へ
Pythonの基本→統計学の順で学んだあと、機会学習にチャレンジすると効率的に『データ分析の何たるか』を学ぶことができます。


今回のまとめ

まとめ

・4月のS&P500指数は4,600ポイントの攻防が焦点に
・Pythonなら過去の4月のパフォーマンスを簡単にチェックできる
・1985年以降、4月のS&P500指数はプラス圏で終えるパターンが見られる
・今年4月のS&P500指数は、主に4つの理由から4,600ポイント前後で底堅く推移する可能性あり

今回は以上です。

最後までお読みいただき、ありがとうございました。


注記事項

ジェイの米国株投資ブログ(以下当サイト)に掲載されている記事は、投資の助言を目的としたものではありません。当サイトに掲載されたコンテンツの正確性については、可能な限り注意を払っています。しかし、意図せず誤情報が紛れ込む可能性や情報そのものが古くなっている可能性があり、その正確性を完全に保証するものではありません。
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください

 

-Pythonコード集, マーケット分析の記事