どうも、しゅん@Trade Techです。
今回はPythonで日本株の株価データを入手し、データを加工してローソク足チャートを表示するまでの手順について、サンプルコードを交えて解説していきます。
具体的には、以下のような手順で進めていきます。
(1) pandas-datareaderで「1321(日経225ETF)」の株価データを取得
(2) matplotlibで終値チャートを表示
(3) 取得したデータを扱いやすいように加工
(4) 移動平均線(5日/25日/75日)を計算
(5) mplfinanceでローソク足チャートを表示
サンプルコードもそれぞれ用意していますので、コピペするか手入力しながら実行して進めてみてください。
今回はGoogle Colaboratory上でPythonコードを実行していきます。まだ触ったことのない方は、以下の記事を参考にGoogle Colaboratory環境を用意してから進めてみてください。
A. 株価データの入手と終値チャートの表示
まずは株価データを取得し、終値チャートを表示するまでをやってみましょう。
1. 株価データのダウンロードと表示
今回はpandas_readerを利用して、無料で取得可能なstooqというWebサービスから株価データをダウンロードします。以下がサンプルコードです。
# 株価データのダウンロードと表示
import sys
import pandas_datareader.data as pdr
import pandas as pd
import datetime as dt
start = dt.date(2013, 1, 1)
end = dt.date.today()
ticker = '1321'
ticker_jp = ticker + '.JP'
df = pdr.DataReader(ticker_jp, 'stooq', start, end)
display(df)
最後から2行目の「pdr.DataReader」という関数で、stooqからデータを取得しています。これにより、PandasのDataFrameとして株価データ(日付/始値/高値/安値/終値/出来高)が取得できます。
関数には4つのパラメータがありますが、1つ目のticker_jpが取得したい銘柄コードです。stooqで日本株を取得したい場合は銘柄コードの後ろに「.JP」とつける必要があります。例えばこれが「トヨタ自動車」であれば「7203.JP」という感じになります。
パラメータの2つ目は’stooq’固定、3つ目と4つ目が取得したいデータの期間になります。今回は2013年1月1日からプログラム実行日までのデータを取得するようにしています。
start, end, tickerの各変数値を変えれば、他の銘柄や期間の株価データが取得可能ですので試してみてください。
2. データの加工
stooqのデータは、日付が降順(新しい日付が先頭)になっています。この後チャートを表示する際には日付が昇順である必要があるので、データのソート(並び替え)をしてみましょう。
# 日付が古いデータから順にソート
df.sort_index(axis=0, inplace=True)
display(df)
データが日付(Date)の昇順で並び替えられました。
3. 終値チャートの表示
次は、株価をチャート表示してみましょう。ローソク足チャートの表示は少し難易度が高いので後に回し、ここでは単純に終値チャートを表示してみたいと思います。
Pythonでチャートなどのグラフを描画したい場合は、matplotlibライブラリの利用が便利です。サンプルコードは以下の通り。
# 終値チャートの表示
%matplotlib inline
import matplotlib.pyplot as plt
plt.figure()
df['Close'].plot()
plt.grid(True)
plt.show()
df[‘Close’].plot() の部分で、実際に終値をつないだチャートが描画されています。
4. 指定期間のみのチャートを表示
今度はもう少し最近のデータのみでチャート表示してみましょう。ここでは株価データの範囲「2022年1月1日以降」に絞り込んでみます。サンプルコードは以下の通り。
# 指定期間のみのチャートを表示
df_2022 = df[df.index >= '2022-01-01'].copy()
display(df_2022)
plt.figure()
df_2022['Close'].plot()
plt.grid(True)
plt.legend()
plt.show()
df[df.index >= ‘2022-01-01’] と書くことで、2022年1月1日以降のデータのみに絞り込んでいます。ここの日付を変えることで他の期間を指定することが可能です。
B. 移動平均線の計算
続いて、株価データを元に移動平均線を計算し、グラフ表示させてみましょう。
1. 移動平均線の計算
移動平均線の計算は、rolling関数と呼ばれるものを使うことで簡単に計算できます。以下は5日/25日/75日の移動平均線をそれぞれ計算するサンプルコードです。
# 移動平均線の計算とグラフ表示
df_ta = df[df.index >= '2020-01-01'].copy()
# 5日/25日/75日の移動平均線を計算
df_ta['sma5'] = df_ta['Close'].rolling(5).mean()
df_ta['sma25'] = df_ta['Close'].rolling(25).mean()
df_ta['sma75'] = df_ta['Close'].rolling(75).mean()
# NaNデータを削除
df_ta = df_ta.dropna()
display(df_ta)
ご覧のように、株価データの右側にsma5/sma25/sma75の列が新しく追加され、それぞれ移動平均線が計算されて格納されます。
df_ta[‘Close’].rolling(5).mean() と書くことで、「Close列の直近5データの平均(mean)を計算せよ」という意味になります。数値部分を変えれば他の日数で計算できますし、’Close’の部分を’Volume’に変えれば「出来高の移動平均線」が計算できたりします。
また、最後の方にdropna関数を使っていますが、上のrolling関数で計算をした場合にデータが足りない部分はNaN(値無し)になりますので、NaNが1つでも入っているデータ行を削除しています。
今回は75日移動平均線を計算しているので、株価データの先頭から74行は移動平均線が計算できずNaNとなります。なので株価データは2020年1月1日からにしていますが、出力結果は2020年4月23日からとなっているわけです。
2. 終値と移動平均線のチャートを表示
さて、では計算した移動平均線をチャートに表示してみましょう。終値チャートを表示した時と同じようなコードになります。
# 移動平均線とグラフを表示
plt.figure()
df_ta['Close'].plot(label='1321 ETF')
df_ta['sma5'].plot(label='SMA(5)')
df_ta['sma25'].plot(label='SMA(25)')
df_ta['sma75'].plot(label='SMA(75)')
plt.grid(True)
plt.legend()
plt.show()
グラフ表示したい列を、それぞれplotで表示させています。labelパラメータを使うとどの色がどのグラフなのか分かりやすいです。
C. ローソク足チャートの表示
さて、株価データを取り扱う場合は、終値チャートよりローソク足チャートを表示したい場合の方が多いかと思います。
ここではmplfinanceというPythonライブラリを使ってローソク足チャートを表示させてみましょう。
1. mplfinanceをインストール
Google Colaboratoryを利用している場合でも、mplfinanceは初期インストールされていないので自分でインストールする必要があります。セルに以下のコード1行を入力して実行してみてください。(先頭に!がついているのがポイント)
!pip install mplfinance
実行すると、しばらく待った後にものすごい量の英語が表示されてびっくりするかもしれませんが(笑)、一番最後の行に「Successfully installed mplfinance~」と表示されていればインストールが完了しています。次に進みましょう。
2. ローソク足チャートと移動平均線を表示
では、ローソク足チャートを表示してみます。mplfinanceさえ利用可能になっていれば、コードは意外と簡単です。今回は見やすいように2023年7月1日以降の期間のみ表示してみました。
# ローソク足チャートを表示
import mplfinance as mpf
df_1y = df[df.index >= '2023-07-01'].copy()
mpf.plot(df_1y, type='candle', mav=(5, 25, 75), volume=True, style='yahoo')
ご覧のように、ローソク足チャートと出来高、そして3本の移動平均線が表示されています。
一番最後の行にあるmpf.plot関数で各グラフが描画されています。mavパラメータには表示させたい移動平均線の期間(日数)をカンマ区切りで指定すれば、元のデータで計算していなくても移動平均線を描画してくれます。また出来高グラフが不要な場合はvolume=Falseとしてみてください。
おわりに
以上、Pythonで株価データを取得しローソク足チャートを表示するまでを解説しました。
細かい命令などの解説は省きましたが、サンプルコードを1つずつ実行していただければ同じような結果が確認できますので、Google Colaboratoryなどで是非やってみてください。
また今回の内容を動画で観ながら学習したい方は、以下の動画チュートリアル講座にもご登録ください。(講座登録いただくと、Pythonをはじめとした株式投資に役立つプログラミングやWebサービスなどの情報を不定期にメールでもお送りさせていただきます)
コメント