メインコンテンツへスキップ
見出し画像

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%で負けました。難しい!!

     
     

    KIYO

     
     
    普段は製造業で企画/開発/設計しております。記事はプログラミング・機械学習、IoT関係の記事をメインで作成し、なるべく1つの記事で知りたいことを網羅していきます。内容は学術的より実装・アウトプット(ほしくなるもの)を重視して作成しています。 面白そうな仕事があればやりたいです!

    あなたへのおすすめ