Python

Python mplfinanceによるMACD,RSI,ボリンジャーバンドの表示方法

Python

Python mplfinanceによるMACD,RSI,ボリンジャーバンドの表示方法の方法を解説します。mplfinanceには、MACD,RSI,ボリンジャーバンドの計算アルゴは用意されていないので、実装します。実装した計算アルゴの結果をmplfinanceでプロットすることで、MACD,RSI,ボリンジャーバンドの表示をします。

実装環境

Anacondaをインストールして、Jupyternotebookで実行します。環境構築の方法は以下の記事を参考ください。

データセットの準備

以下のコードでデータセットを準備可能です。詳細は以下の記事を参考ください。
今回は、「Zホールディングス」の株価直近1年分のデータを使用します。

import pandas_datareader.data as pdr
import datetime
import pandas as pd

#現在から、指定の日付までの株価を取得する場合
now = datetime.date.today()
end = now
start = end - datetime.timedelta(days=365)#365日分取得
code = 4689#銘柄のコードを入力ください。4689はZホールディングス

#株価取得を関数化
def get_kabuka(code,start,end):
    pd_data = pdr.DataReader(str(code)+'.jp', 'stooq', start, end)
    return pd_data

kabuka = get_kabuka(code,start,end)
kabuka = kabuka.iloc[::-1]

出力結果

上から古い順にデータセットが並んでいます。
open,High,Low,Close,Volumeが格納されていますね。

  • Open:始値
  • High:高値
  • Low:安値
  • Close:終値
  • Volume:取引量
kabuka.head()
出力結果

mplfinanceによるテクニカルチャートの表示方法

概要

mplfinanceによるテクニカルチャートの表示方法を解説します。mplfinanceは、テクニカルチャートを計算するアルゴリズムは用意されていないでので、別途所望のテクニカルチャート用の計算する必要があります。

  • 計算結果をmpf.make_addplotにキャストし、adpに代入
  • panel='lower'でしたのグラフに表示、消すことでローソク足チャートに重ねてプロット
  • color='g'でしたのグラフのカラー変更可能
adp = mpf.make_addplot(kabuka_macd['macd'], panel='lower', color='g'),
  • adpをaddplotに代入
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
         volume=False, mav=(5, 25,75,200), style='yahoo',xlim= (len(kabuka)-100, len(kabuka)),

mplfinanceによるMACDの表示方法

mplfinanceによるMACDの表示方法は以下のコードで可能です。

  • macd(df)にてMACDを計算
  • macd['ema_12'] = df['Close'].ewm(span=12).mean()にEMA(12)を計算
  • macd['ema_26'] = df['Close'].ewm(span=26).mean()にEMA(26)を計算
  • adp =[ mpf.make_addplot(kabuka_macd['macd'], panel='lower', color='g'),mpf.make_addplot(kabuka_macd['signal'], panel='lower', color='m')]でシグナルとMACDをプロット
  • macd['macd'] = macd['ema_12'] - macd['ema_26']でMACDを計算
  • macd['signal'] = macd['macd'].rolling(9).mean()でsignalを計算(SMA(単純移動平均)なのに注意)
def macd(df):
    macd = pd.DataFrame()
    macd['close'] = df['Close']
    macd['ema_12'] = df['Close'].ewm(span=12).mean()
    macd['ema_26'] = df['Close'].ewm(span=26).mean()
    macd['macd'] = macd['ema_12'] - macd['ema_26']
    macd['signal'] = macd['macd'].rolling(9).mean()
    return macd

kabuka_macd = macd(kabuka)

adp =[ mpf.make_addplot(kabuka_macd['macd'], panel='lower', color='g'),
      mpf.make_addplot(kabuka_macd['signal'], panel='lower', color='m')]
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
         volume=False, mav=(5, 25,75,200), style='yahoo')

mplfinanceによるMACDの出力結果

mplfinanceによって、MACDが出力されました。日足チャートの下にMACDが表示されています。

MACD

mplfinanceによるRSIの表示方法

mplfinanceによるRSIの表示方法は以下のコードで可能です。

  • df_diff = df_close.diff()で前日との差分を計算
  • df_diff.copy()でコピー
  • df_up[df_up < 0] = 0で0以下の数字を0に置き換え
  • df_down[df_down > 0] = 0で0以上の数字を0に置き換え
  • df_up.rolling(14).sum()で14日分の平均の合計
  • df_down_sum = df_down.abs().rolling(14).sum()で絶対値の14日分の平均の合計
  • df_RSI = df_up_sum/(df_up_sum + df_down_sum) * 100でRSIの計算
def rsi(df):
    df_close = df['Close']
    df_diff = df_close.diff()
    df_up = df_diff.copy()
    df_down = df_diff.copy()
    df_up[df_up < 0] = 0
    df_down[df_down > 0] = 0
    df_up_sum = df_up.rolling(14).sum()
    df_down_sum = df_down.abs().rolling(14).sum()
    df_RSI = df_up_sum/(df_up_sum + df_down_sum) * 100
    return df_RSI

kabuka_rsi = rsi(kabuka)
adp = mpf.make_addplot(kabuka_rsi, panel='lower', color='y')
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
         volume=False, mav=(5, 25,75,200), style='yahoo')

mplfinanceによるRSIの出力結果

mplfinanceによって、RSIが出力されました。日足チャートの下にRSIが表示されています。

RSI

mplfinanceによるボリンジャーバンドの表示方法

mplfinanceによるボリンジャーバンドの表示方法は以下のコードで可能です。

  • bband['mean'] = df['Close'].rolling(window=20).mean()で20日移動平均
  • bband['std'] = df['Close'].rolling(window=20).std()で20日分の標準偏差
  • bband['mean'] + (bband['std'] * 1)で+1σ
  • bband['mean'] - (bband['std'] * 1)で-1σ
  • bband['mean'] + (bband['std'] * 2)で+2σ
  • bband['mean'] - (bband['std'] * 2)で-2σ
  • bband['mean'] + (bband['std'] * 3)で+3σ
  • bband['mean'] - (bband['std'] * 3)で-3σ
def bb(df):
    # ボリンジャーバンドの計算
    bband = pd.DataFrame()
    bband['Close'] = df['Close']
    bband['mean'] = df['Close'].rolling(window=20).mean()
    bband['std'] = df['Close'].rolling(window=20).std()
    bband['upper_1'] = bband['mean'] + (bband['std'] * 1)
    bband['lower_1'] = bband['mean'] - (bband['std'] * 1)
    bband['upper_3'] = bband['mean'] + (bband['std'] * 3)
    bband['lower_3'] = bband['mean'] - (bband['std'] * 3)
    bband['upper_2'] = bband['mean'] + (bband['std'] * 2)
    bband['lower_2'] = bband['mean'] - (bband['std'] * 2)
    bband['upper_3'] = bband['mean'] + (bband['std'] * 3)
    bband['lower_3'] = bband['mean'] - (bband['std'] * 3)
    return bband
kabuka_bb = bb(kabuka)

adp =[ mpf.make_addplot( kabuka_bb['mean'], color='k'),
      mpf.make_addplot( kabuka_bb['upper_1'], color='b'),
      mpf.make_addplot(kabuka_bb['lower_1'] , color='b'),
      mpf.make_addplot( kabuka_bb['upper_2'], color='g'),
      mpf.make_addplot(kabuka_bb['lower_2'] , color='g'),
       mpf.make_addplot( kabuka_bb['upper_3'], color='r'),
      mpf.make_addplot(kabuka_bb['lower_3'] , color='r'),
     ]
mpf.plot(kabuka, addplot=adp, type='candle', figratio=(12,4),
         volume=False, style='yahoo')

mplfinanceによるボリンジャーバンドの出力結果

mplfinanceによって、ボリンジャーバンドが出力されました。日足チャートの下にボリンジャーバンドが表示されています。

ボリンジャーバンド

まとめ

Python mplfinanceによるMACD,RSI,ボリンジャーバンドの表示方法の方法を解説しました。mplfinanceには、MACD,RSI,ボリンジャーバンドの計算アルゴは用意されていないので、実装し、その計算方法を記述しました。実装した計算アルゴの結果をmplfinanceでプロットすることで、MACD,RSI,ボリンジャーバンドの表示可能です。

pythonの勉強におすすめの本は以下の記事を参照してみてください。

pythonのおすすめの勉強方法はUdemyです。こちらの記事も参考にしてみてください。

コメント

タイトルとURLをコピーしました