Pythonで投資のチャート分析をしよう【S&P500vsマネーサプライ】
2023-03-02 by 内田裕之
- 「Pythonで投資のチャート分析をしたい」
- 「プログラミングを使って効率よく稼ぎたい」
この記事はそんな方へ向けて書いています。
こんにちは。
Pythonで投資のチャート分析をしているうっちゃんです。
私は最低限の投資で最大の利益を目指して投資分析をしています。
今回はS&P500とマネーサプライの関係を分析したので紹介します。
投資とプログラミング学習に役立つと嬉しいです。
この記事は内容に広告・プロモーションを含みます。
チャート分析ならPythonがおすすめ
よい投資先を見つけるためにエクセルを編集してグラフ作成するのは大変ですよね。
プログラミングを活用して簡単に分析できればいいなあと思ったのは私だけではないと思います。
書店で見かけた一冊の本をきっかけにこの悩みは解消されました。
これはプログラミング言語Pythonを使ってデータ系列の扱い、グラフ作成、自動売買、ポートフォリオ分析まで多岐にわたる分析を可能とする本です。
今回はS&P500とマネーサプライの関係を分析するのに活躍しました。
S&P500とマネーサプライの関係
S&P500は米国の代表的な株価指数の1つです。
米国株式市場全体に対し約80%の時価総額比率を占めており、米国市場全体の動きを概ね反映していると言えます。
市場規模、流動性、業種等を勘案して選ばれたニューヨーク証券取引所やNASDAQに上場および登録されている約500銘柄を時価総額で加重平均し指数化したものです。
(参考:S&P500(S&P500種指数)とは?)
また、マネーサプライとは世の中に出回っているお金の供給量を指します。
各国の中央銀行はマネーサプライを調整することで景気をコントロールしています。
例えば景気が過熱すればマネーサプライを減らして景気を下げようとします。
逆に不景気になればマネーサプライを増やして景気を下支えします。
以前はゴールドとマネーサプライの関係を整理しました。
(参考:金(ゴールド)投資の魅力を新発見!非常識な資産形成)
そのときにゴールドはマネーサプライに対してかなり割安だとわかりましたが、株価はどうなのか気になりませんか?
そこで今回はPythonでチャート分析を行いました。
S&P500をマネーサプライM2で割った指数はこちら。
緑色はS&P500をマネーサプライM2で割った指数です。
青色は500日移動平均線、赤色は200日移動平均線です。
2000年を頂点にして、上値が抑えられていることがわかります。
また、S&P500のチャートをこちらに示します。
S&P500単体で見ると一貫して大きく値上がりしているように見えます。
これに対して、マネーラプサイとの関係は上値は抑えられていることから、S&P500の値上がりはお金の価値が下がったことによるかさ増しとも言えます。
お金の価値が下がっているので株式など「もの」に変えるのが最適だと解釈できます。
また、いまのS&P500とマネーサプライの関係は50日移動平均線と200日移動平均線にタッチしたとことです。
ここから上にブレイクアウトしてさらに値上がりするのか、上値を抑えられて下落するのか。
どちらに進むのか楽しみですね!
分析に使用したコード
チャート分析に使用したPythonコードをまとめます。
なお、開発環境はJupyter Notebookを使用しています。
データについては、S&P500はYahoo!Fianance、マネーサプライM2はFREDから取得しました。
#ライブラリーのインポート
from pandas_datareader import data
import pandas as pd
from pylab import mpl, plt
import numpy as np
import datetime
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline
#データの期間
start = '1980-01-01'
end = datetime.date.today()
#Yahoo!Financeからデータ取得
yf.pdr_override()
#S&P500のデータ
stock_df = data.get_data_yahoo('^GSPC', start, end)
#M2のデータ、Billions USD単位
m2_df = data.FredReader('WM2NS', start, end)
#データを整理する
merge_df = pd.DataFrame()
merge_df['stock'] = stock_df['Close']
merge_df['m2'] = m2_df.read()
merge_df.dropna(inplace=True)
#比率のデータを作成
merge_df['ratio'] = merge_df['stock'] / merge_df['m2']
merge_df.dropna(inplace=True)
#移動平均を計算
merge_df['SMA1'] = merge_df['ratio'].rolling(window=50).mean()
merge_df['SMA2'] = merge_df['ratio'].rolling(window=200).mean()
#グラフに使用するデータ
date = merge_df.index
ratio = merge_df['ratio']
ratio_sma1 = merge_df['SMA1']
ratio_sma2 = merge_df['SMA2']
#グラフの作成
plt.figure(figsize=(20, 10))
plt.plot(date, ratio, lw=2,label = 'S&P500 to M2', color='g')
plt.plot(date, ratio_sma1, lw=2, label = 'SMA50', color='b')
plt.plot(date, ratio_sma2, lw=2, label = 'SMA200', color='r')
plt.legend(loc=2, fontsize=18)
plt.xlabel('year', fontsize=18)
plt.ylabel('S&P500/M2(Billions USD)', fontsize=18)
plt.tick_params(labelsize=18)
plt.savefig("sp500m2_ratio.png")
読み込むシンボルを変えれば色んな種類のチャート分析ができます。
引き続きいろんなチャート分析を紹介したいと思います。
まとめ
今回はPythonで投資のチャート分析をする方法を紹介しました。
コーディングは以下の本を参考にしています。
この記事が面白いと思ったらTwitterやブログで紹介していただけますと嬉しいです。
おすすめ記事
ロバートキヨサキが「2023年に金(ゴールド)は2倍に値上がりする」と予想した理由とは?