最終更新日:2020年11月8日

Nadeca

pythonによる株価分析

Python

こんにちは。Nadecaです。

インデックス投資しかしていない私ですが、株価を分析するのは結構好きです。分析と言っても利益に直結するような崇高なものではなく、pythonというプログラミング言語を活用したお勉強のようなものです。

私は文系学部出身で仕事でもパソコンと言えばMicrosoft Officeを使う程度で、専門的な知識は一切ありません。ですが、そんな私でもpythonでそこそこの分析が出来てしまうのですから世の中便利になったものですね。

今後、備忘録を兼ねてこちらに不定期ながら記事をアップして行く予定です。何かありましたらコメント欄よりお気軽にどうぞ。

Pythonとは?

pythonとは1991年頃に登場したオブジェクト指向のプログラミング言語です。 近年では機械学習やディープラーニング(深層学習)、その他Webアプリケーションなどに利用されており、最も勢いのあるプログラミング言語です。 pythonのWebアプリケーション用のフレームワーク「Django」はPinterestやInstagram、Spotify、Redditと有名なサービスでも使われています。フレームワークとは、Webアプリケーションを効率的に作成するために開発されたものです。 割と有名どころでは、日本人により作られたプログラミング言語「Ruby」の「Ruby on Rails」、ワードプレスで有名な「PHP」の「Laravel」などがあります。 私はこれらWebフレームワークについて詳しい訳ではありませんが、それぞれの設計哲学を見てみると面白いので、参考までに載せておきます。

Ruby on Rails Django Laravel
言語 Ruby Python PHP
哲学 設定より規約(CoC)、繰り返しを避けろ(DRY) 暗黙より明示、疎結合と高凝集性 幸せな開発者が最高のコードを作る、表現力、エレガント

分析(入門編)

プログラミングの世界ではライブラリという便利なものが存在します。例えば株価を分析するにあたり、全てを一から実装していては結果にたどり着くまでのハードルも高くなり、私のような素人は挫けてしまう事でしょう。

ライブラリという偉大な先人達の開発したパーツのお陰でコードの量を大幅に節約出来てしまうのですから、もう感謝しかありません。

ちなみに、私が株価分析をするに辺り頻繁に利用するライブラリは以下になります。

①pandas datareader 主に株価取得に利用します。株価の他経済指標等も取得出来ますが、日本株の取得は出来ません。②NumPy 行列計算などの数値計算を行うライブラリです。

③Matplotlib グラフ表示をするためのライブラリです。

④Pandas pandas datareaderで取得した株価はpandasを使いDataFrameというエクセルの様な表に格納します。流れとしては、NumPy等を活用し、そこで様々な加工を行い、Matplotlibでグラフとして出力します。 では早速簡単な分析をしていきましょう。

まずは必要なライブラリをインポートします。

import pandas as pd
import pandas_datareader.data as web
import matplotlib.pyplot as plt
from datetime import datetime

続いてデータ取得期間を設定します。この時に先ほどimportoしたdatetimeが必要になります。

start = datetime(2019, 1, 1)
end = datetime(2020, 10, 1)

まずはアップルの株価を取得してグラフ化してみます。

aapl = web.DataReader('AAPL', 'yahoo', start, end)['Adj Close']
aapl.plot(legend=True,figsize=(10,6))

image

はぁ、AAPLに集中投資をしておけば良かったと後悔。いずれにせよ、たった2行で株価取得からグラフのプロットまで出来てしまいました。 python恐るべしですね。次はちょっと分析っぽい事をしてみます。では、ちょっと発展させて銘柄同士の相関係数を求めてみましょう。 相関係数とは簡単に言えば、どれだけ似た様な値動きをしているかを表す指標になります。相関係数は「-1から+1」までの数値で、+1に近い程、生の相関(同じ値動き)、一方-1に近づく程、負の相関(逆の値動き)を表します。私はインデックス投資のみなので、これらに関しあまり深く追及する必要はありませんが、現代ポートフォリオ理論において、異なる相関性の銘柄を組み合わせる事により、ポートフォリオのシャープレシオを改善出来るという事が分かっています。

ちなみに、現代ポートフォリオ理論とシャープレシオについての詳しい説明はまたの機会とします。 但し、異なる値動きのする銘柄とありますが、この考え方には注意が必要です。何故なら、銘柄の相関性は時と場合によって異なり、例えば暴落時のヘッジとしてに債券や金に投資をしたからと言って、必ずしも株式と逆の値動きをしてくれるとは限りません。

確かに有事の金という言葉がある様に、金は株式市場暴落時に買われる傾向はありますが、その傾向が必ずしも続くとは断定しない方が良いでしょう。

これは債券に関しても同じ事が言えます。相関関係は常に変化する。これだけは頭に入れておきましょう。

まずはS&P500のETFであるSPYと金のETFであるGLDを比較してみます(測定期間:2018年1月2日〜2020年10月1日)。

df1 = web.DataReader('SPY', 'yahoo', start, end)['Adj Close']
df2 = web.DataReader('GLD', 'yahoo', start, end)['Adj Close']
df1_df2 = pd.concat([df1, df2], axis=1).dropna()
df1_var = df1_df2.iloc[:,0].pct_change().dropna()
df2_var = df1_df2.iloc[:,1].pct_change().dropna()
plt.figure(figsize=(18, 11), dpi=50)
plt.plot(df1_var.rolling(window=25).corr(df2_var))
plt.title('SPY GLD')
plt.show()

image

グラフを見ればわかる様に株式と逆相関のイメージがある金ですが、という訳でもなく、概ね+0.6〜-0.6の間で推移しています。これだけだと分かりづらいので、まずはGLDトS&P500の値動きを比較してみます。

spy = web.DataReader('SPY', 'yahoo', start, end)['Adj Close']
gld = web.DataReader('GLD', 'yahoo', start, end)['Adj Close']
fig, ax1 = plt.subplots(figsize=(18, 11))
ax2 = ax1.twinx()
ax1.plot(spy, color='blue', label='SPY')
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

image

続いて相関係数とSPYを比較してみましょう。

fig, ax1 = plt.subplots(figsize=(18, 11))
ax2 = ax1.twinx()
ax1.plot(spy, color='blue', label='SPY')
ax2.plot(df1_var.rolling(window=25).corr(df2_var))
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1 + h2, l1 + l2)

image

上記グラフを見てみると、面白い事にコロナショック後から一定期間、株式と金の相関係数が高まっている事がわかります。

もちろん、その後を見れば金は株式よりも反転が早く、回復も早いと言えるのかもしれませんが、瞬間的な暴落時はゴールドも株式と共に暴落するという事が現実には起こり得ます。 確かに、株式オンリーよりはゴールドや債券を組み込んだ方が値動き自体はマイルドになるでしょう。

しかし、株式市場下落時のヘッジとしては機能する時もあればしない時もあると言えます。少なくともその点は意識する必要があるでしょう。

記事を書く事自体にまだ慣れていないので説明足らずな箇所や間違い等もあるかもしれませんが、その点はご了承下さい。随時加筆、修正等行っていきます。何か質問あればコメント欄よりお願い致します。


Nadeca

アラサー会社員。定期でVTを買うだけの退屈な投資。

お知らせ

おすすめ記事