【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)を追加するだけでエラーを回避できます。この方法は、出来高データを必要としない場合に有効です。ただし、出来高バーが誤解を招く可能性があるため、ダミー列を使用することを明記するのがおすすめです。
こちらが実行結果です。ローソク足チャートの下にボラティリティチャートが追加されました。
スポンサーリンク
