見出し画像

Pythonでやってみた2:株価取得/可視化(pandas-datareader)

概要

Pythonを使用した株価分析をします。具体的には下記の通りです。

●株価データの取得:APIを利用してデータを取得
●データ加工:移動平均値を作成したり、Dateのソート
●可視化:箱ひげ図の作成

あくまで練習用のため、実際にトレードする場合は証券会社のツールを使用する方がよいです。

1.株価データ取得:pandas_datareader

株価データの取得はpandas_datareaderを使用します。pandasとは異なるため事前に下記でライブラリのインストールが必要です。

pip install pandas-datareader

pandas_datareaderでは下記複数のサイトのAPIでデータ取得できます。

画像2

今回はサイトへの登録が不要なStooqを使用してデータ取得します。

画像1

参考銘柄として直近の買収騒動で株価が乱高下している東京機械製作所(6335)を使用します。コードは下記の通りであり、出力はPandasのDf形式DataFrame型です。

[In]
import pandas_datareader as pdr

def getstockprice(stockcode):
   return pdr.data.DataReader(stockcode, 'stooq')
   
df = getstockprice('6335.jp')
df
[Out]
        	Open	High	Low	    Close	Volume
Date					
2021-10-21	1731.00	1767.00	1650.00	1675.00	144100
2021-10-20	1720.00	1842.00	1706.00	1752.00	323200
2021-10-19	1770.00	1859.00	1652.00	1717.00	296100
2021-10-18	1747.00	1926.00	1747.00	1762.00	238700
2021-10-15	2001.00	2050.00	1736.00	1795.00	461300
...	...	...	...	...	...
2016-10-31	728.69	747.87	728.69	738.28	97935
2016-10-28	747.87	757.45	728.69	738.28	124009
2016-10-27	738.28	747.87	738.28	738.28	68002
2016-10-26	738.28	747.87	728.69	738.28	145703
2016-10-25	767.04	776.63	728.69	738.28	412077
1218 rows × 5 columns

2.データプロット・移動平均

データを取得したら次はデータ加工、可視化です。データは終値(Close)を使用します。
DataFrame型はMatplotlibの機能を含むためdf.plot()でグラフ化できます。

[In]
df = getstockprice('6335.jp')
df['Close'].plot()

[Out->下図参照]

dfのrollingを使用して移動平均の計算も可能です(見映え用で体裁追加)。

[In]
import japanize_matplotlib
import matplotlib.pyplot as plt

df = getstockprice('6335.jp')
plt.figure(figsize=(13,8))
df['Close'].plot(label='東京機械製作所')
df['Close'].rolling(5).mean().plot(label='5日移動平均', linestyle='dashed')
df['Close'].rolling(25).mean().plot(label='25日移動平均', linestyle='dashed')
df['Close'].rolling(75).mean().plot(label='75日移動平均', linestyle='dashed')
plt.legend()
plt.grid()
画像4

このデータより2021年に入ってから恐ろしい動きをしていることがわかります。データを2021年以降に絞って再プロットします。

[In]
import datetime
#pandasの条件抽出で2021/1/1移行のデータを取得
df_2021 = df[df.index>datetime.datetime(2021,1,1)]

#同様にプロット
plt.figure(figsize=(13,8))
df_2021['Close'].plot(label='東京機械製作所')
df_2021['Close'].rolling(5).mean().plot(label='5日移動平均', linestyle='dashed', lw=0.5)
df_2021['Close'].rolling(25).mean().plot(label='25日移動平均', linestyle='dashed', lw=0.5)
df_2021['Close'].rolling(75).mean().plot(label='75日移動平均', linestyle='dashed', lw=0.5)
plt.legend()
plt.grid()
画像5

3.箱ひげ図の作成:mplfinance

箱ひげ図の作成はmplfinanceを使用することで簡単に記載できます。サクッと記載するなら下記の通りです。

[In]
import mplfinance as mpf

df_2021 = df_2021.sort_index() #Dateが降順のため昇順に修正
mpf.plot(df_2021 ,type='candle', figratio=(10,5), mav=(5, 25, 75), #mav:移動平均線の表示
volume=True, style='yahoo') #Volume=TrueはVolumeカラムが必須
画像6

 見たいポイントに線も追加できます。

[In]
mpf.plot(df_2021 ,type='candle', figratio=(10,5), volume=True, style='yahoo', 
vlines=dict(vlines=['2021-08-16', '2021-09-21'],colors=['r', 'g'],
                    linewidths=[1, 1], linestyle='-.'))  
画像7

4.テクニカル指標:MACD追加

 最後にテクニカル指標のMACDを追加してみます。

[In]
import mplfinance as mpf

_df_2021 = df_2021.sort_index()
MACD = talib.MACD(_df_2021['Close'],fastperiod=12,slowperiod=26,signalperiod=9)
df_MACD = pd.DataFrame(MACD, index=["MACD(12,26)","MACDsignal", "MACDhist"]).T 

plt.figure(figsize=(13,15))

ymin, ymax = df_MACD['MACD(12,26)'].min(), df_MACD['MACD(12,26)'].max()
plots = [
    mpf.make_addplot((df_MACD['MACD(12,26)']),panel=2, ylabel='MACD(12,26)', color='r', ylim=(ymin,ymax)), 
    mpf.make_addplot((df_MACD['MACDsignal']),panel=2, ylabel='MACDsignal', color='g', ylim=(ymin,ymax)),
]

mpf.plot(df_2021, addplot= plots, type='candle', figratio=(12,7), mav=(5, 25, 75), volume=True, style='yahoo') #Volume=TrueはVolumeカラムが必須

参考資料

あとがき

普通に株を買うだけならいろいろな指標やツールがある証券会社の方が絶対よいですが、自作の自動売買システムを作成するのであれば見える化の技術は必須だと思います。
時間あるときにMACDとか追加できるTa-Libも追加したい。
ちなみにビットコインの自動売買システムを自分用で作成したけど価格予想モデルが全然で資産-20%で負けました。難しい!!

この記事が気に入ったらサポートをしてみませんか?