非IT企業に勤める中年サラリーマンのIT日記

非IT企業でしかもITとは全く関係ない部署にいる中年エンジニア。唯一の趣味がプログラミングという”自称”プログラマー。

【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)を追加するだけでエラーを回避できます。この方法は、出来高データを必要としない場合に有効です。ただし、出来高バーが誤解を招く可能性があるため、ダミー列を使用することを明記するのがおすすめです。

こちらが実行結果です。ローソク足チャートの下にボラティリティチャートが追加されました。

 

スポンサーリンク

 - Python