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

Pythonライブラリ(株価の可視化):mlpfinance

    1.概要・前提

     株価や仮想通貨の価格を可視化するするためのライブラリとしてmlpfianceを紹介します。

     前提として自作取引ツールを作る時に可視化したいためmlpfinanceを使用しており、ローソクチャートや計算されたテクニカル指標から自分で売買判断する場合は証券会社の取引ツールを使うほうが圧倒的に便利です。

    2.サンプルデータの準備

    2-1.株価データ

     pandas_datareaderにより商船三井の株価を使用します。取得データの都合上、前処理を2つ加えておきます。

    前処理1:別のライブラリTA-Lib使用のためにデータを昇順にします。
    前処理2:データが500個以上あると見えにくくなるため1年分に絞ります。
    ※今回処理は不要ですが、カラムは「Open, High, Low, Close」の順である必要があります。

    [In]
    import pandas_datareader as pdr
    import pandas as pd
    
    df = pdr.data.DataReader('9104.jp', 'stooq') #商船三井:9104.jp
    
    df_sorted = df.sort_index(ascending=True) #処理前に昇順ソート
    df_sorted = df_sorted.iloc[-365:, :] #見にくいためデータを365に絞る
    df_sorted
    
    [Out]
    下記参照(※左図:df、右図:df_sorted)
    画像

    2-2.MACD(テクニカル指標)のデータ

     テクニカル指標用ライブラリtalibを使用してMACDも計算しておきます。

    [In]
    import talib
    
    df_MACD = pd.DataFrame(talib.MACD(df_sorted['Close'], fastperiod=12, slowperiod=26, signalperiod=9), index=["MACD(12,26)","MACDsignal", "MACDhist"]).T
    df_MACD
    
    [Out]
    画像

    3.mlpfianceの基礎

    3-1.ローソクチャートのプロット

     mlpfinanceは簡単にローソクチャートを作成できます。各引数に値を設定することで形状、スタイル、移動平均線の追加、出来高の追加ができます。

    [In]
    import numpy as np
    import pandas as pd
    import talib
    import pandas_datareader as pdr
    import matplotlib.pyplot as plt
    import mplfinance as mpf
    
    df = pdr.data.DataReader('9104.jp', 'stooq') #商船三井:9104.jp
    df_sorted = df.sort_index(ascending=True) #処理前に昇順ソート
    df_sorted = df_sorted.iloc[-365:, :] #見にくいためデータを365に絞る
    
    plt.figure(figsize=(24, 20))
    
    ax1 = plt.subplot(2,2,1)
    ax1.set(title='mpf.plot(df_sorted)')
    ax2 = plt.subplot(2,2,2)
    ax2.set(title="mpf.plot(df_sorted, type='candle')")
    ax3 = plt.subplot(2,2,3)
    ax3.set(title="mpf.plot(df_sorted, type='candle', style='yahoo')")
    ax4 = plt.subplot(2,2,4)
    ax4.set(title="mpf.plot(df_sorted, type='candle', style='yahoo', mav=(5,25,100))")
    
    mpf.plot(df_sorted, ax=ax1)
    mpf.plot(df_sorted, ax=ax2, type='candle')
    mpf.plot(df_sorted, ax=ax3, type='candle', style='yahoo')
    mpf.plot(df_sorted, ax=ax4, type='candle', style='yahoo', mav=(5,25,100))
    
    [Out]
    下図参照:コードはタイトル参照
    画像
    [In]
    mpf.plot(df_sorted, type='candle', style='yahoo', mav=(5,25,100), volume=True)
    画像

    3-2 グラフ追加:mpf.make_addplot()

     テクニカル指標のデータを追加する場合はaddplotにmpf.make_addplot(テクニカル指標)とします。

    [In]
    import talib
    
    df_MACD = pd.DataFrame(talib.MACD(df_sorted['Close'], fastperiod=12, slowperiod=26, signalperiod=9), index=["MACD(12,26)","MACDsignal", "MACDhist"]).T
    
    addplot  = [
    mpf.make_addplot((df_MACD['MACD(12,26)']),panel='lower', ylabel='MACD(12,26)', color='g'),
    mpf.make_addplot((df_MACD['MACDsignal']),panel='lower', ylabel='MACDsignal', color='r')
    ]
    mpf.plot(df_sorted, addplot=addplot ,type='candle',mav=(5,25,100),volume=True, figratio=(10,4), style='yahoo')
    [Out]
    画像

     panelはプロット位置になり整数を入れると場所を指定できます。

    [In]
    addplot  = [
    mpf.make_addplot((df_MACD['MACD(12,26)']),panel=1, ylabel='MACD(12,26)', color='g'),
    mpf.make_addplot((df_MACD['MACDsignal']),panel=2, ylabel='MACDsignal', color='r')
    ]
    mpf.plot(df_sorted, addplot=addplot ,type='candle',mav=(5,25,100),volume=True, figratio=(10,4), style='yahoo')
    
    [Out]
    画像

    4.mlpfianceの応用

    4-1.体裁の修正

     普段は気にしていないですが体裁を調整も可能です。コードは下記を参考にしました。

    [In]
    mc = mpf.make_marketcolors(up="#DF0101", down="#00008b", volume="#6E6E6E", edge="inherit", wick="inherit")
    cs  = mpf.make_mpf_style(marketcolors=mc, gridcolor="#778899", y_on_right=True,
        rc={"xtick.labelsize":8, "ytick.labelsize":8})
    
    mpf.plot(df_sorted, type='candle', volume=True, datetime_format='%Y/%m/%d', figsize=(9,5), 
             style=cs, width_adjuster_version='v0', xrotation=False, ylabel='', ylabel_lower='')
    
    [Out]
    下図参照:綺麗になってますね
    画像

    あとがき

     いろいろな機能はあるけど、ローソク足+テクニカル指標をサクッと表示できれば良かったため量は少ないけどとりあえず完成。



     
     

    KIYO

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

    あなたへのおすすめ