Pythonでやってみた2:株価取得/可視化
見出し画像

Pythonでやってみた2:株価取得/可視化

KIYO

概要

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->下図参照]
画像3

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を使用することで簡単に記載できます(昔Matplotlibでトライしましたが私は無理でした)。

サクッと記載するなら下記の通りです。

[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

下記は線を追加します。(MACDやRSIのようなテクニカル分析指標も表示可能ですが、まずはその値をdfに準備しておく必要があるため省略します)

[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

あとがき

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

この記事が気に入ったら、サポートをしてみませんか?
気軽にクリエイターの支援と、記事のオススメができます!
KIYO
普段は製造業で環境系の設計をしています。Python・プログラミング・機械学習関係の記事をメインで作成します。 内容は学術的な説明より実装・アウトプット(ほしくなるもの)を重視して作成しています。 記事は早出しして後で追記すること多いです。