【Python】mplfinanceでローソク足チャートの下にボラティリティチャートを表示してみた
mplfinanceを使うとPythonで手軽にローソク足チャートを作成できます。今回は為替データを使ってボラティリティを計算しそれをローソク足チャートの下に追加表示させてみます。具体的にはデータの準備、mplfinanceの使い方、そしてボラティリティを視覚化する方法をソースコード付きで説明します。また、mplfinanceを使う際に出る「Volume列がない」というエラーへの対処法についても紹介します。
import pandas as pd import mplfinance as mpf import numpy as np # データを読み込み df = pd.read_csv('USDJPYDaily.csv') # CSVファイルからデータを読み込む df['Date'] = pd.to_datetime(df['Date']) # 日付データをdatetime型に変換 df.set_index(keys='Date', inplace=True) # Date列をインデックスとして設定 # ダミーのVolume列を追加 df['Volume'] = 0 # mplfinanceの仕様上、Volume列が必要。今回はダミー列(すべて0)を作成 # ボラティリティの計算(ここではリターンの標準偏差を使用) df['Log_Return'] = np.log(df['Close'] / df['Close'].shift(1)) # 各日の終値の対数リターンを計算 df['Volatility'] = df['Log_Return'].rolling(window=14).std() # ローリング標準偏差でボラティリティを計算(14日間) # NaNを削除してデータを整える df = df.dropna() # 計算結果で生じたNaN値を削除 # データの確認用(デバッグ用にプリント) print(df) # プロットするデータ数 PLOT_DATA_COUNT = 100 # プロットする直近のデータ数を設定 last_100_df = df.tail(PLOT_DATA_COUNT) # 直近100件のデータを抽出 # ボラティリティデータをプロット用に準備 add_plot = mpf.make_addplot( last_100_df['Volatility'], # ボラティリティ列をプロット panel=1, # チャートをメインの下に配置 color='blue', # プロット線の色を設定 ylabel='Volatility' # Y軸ラベル ) # チャートのデザイン(スタイル)を設定 my_style = mpf.make_mpf_style( base_mpf_style='yahoo', # ベーススタイルを'yahoo'に設定 marketcolors=mpf.make_marketcolors( up='red', down='darkblue', edge='inherit', wick='black', volume='inherit' # ろうそく足の色などをカスタマイズ ), facecolor='white', # チャート背景色 gridcolor='lightgray', # グリッド線の色 gridstyle='--' # グリッド線のスタイル(点線) ) # mplfinanceでチャートを描画 mpf.plot( df.tail(PLOT_DATA_COUNT), # プロット対象のデータを指定 type='candle', # ローソク足チャートを描画 style=my_style, # カスタムスタイルを適用 # mav=(5, 25), # (コメントアウト)移動平均線(5日、25日)を追加する場合のオプション addplot=add_plot, # ボラティリティデータを追加 figratio=(10, 5) # チャートの縦横比 )
mplfinanceでは、volume=Trueを指定すると、ローソク足チャートの下に出来高(Volume)バーが表示されます。ただし、入力データにVolume列がない場合はエラーが発生します。この場合、実際の出来高データを取得して使用するのが理想ですが必須ではありません。ダミーのVolume列(例えばすべて0や1)を追加するだけでエラーを回避できます。この方法は、出来高データを必要としない場合に有効です。ただし、出来高バーが誤解を招く可能性があるため、ダミー列を使用することを明記するのがおすすめです。
こちらが実行結果です。ローソク足チャートの下にボラティリティチャートが追加されました。
スポンサーリンク