LoginSignup
10
10

More than 1 year has passed since last update.

# mplfinanceで作成するローソク足チャートのチートシート

Last updated at Posted at 2022-01-16

Pythonのmplfinanceはローソク足チャートを作成するにあたって非常に便利なライブラリですが、描画するスタイルを自分の好みに編集する方法をまとめているサイトが全然なかったので、備忘録として記しておきます。

pandas_datareaderを使ってデータを取得する

ローソク足を使うデータは以下のコードで取得したものを使用します。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas_datareader import data

# yahooから2021/01/01から2021/04/01の期間の日経平均のデータを取得
df_master = data.DataReader('^N225', 'yahoo', '2021-01-01', '2021-04-01')

1. mplfinanceに用意されているスタイルを利用する

mplfinanceライブラリに用意されているスタイル一覧は以下のコードで確認できます。

import mplfinance as mpf
mpf.available_styles()

output:
[
 'binance','blueskies','brasil','charles','checkers',
 'classic','default','ibd','kenan','mike',
 'nightclouds','sas','starsandstripes','yahoo'
]

これらのいずれかを指定することにより、あらかじめ用意されたスタイルに簡単に変更できます。

チートシート
import mplfinance as mpf
mpf.plot(
    df_master, # 使用するデータフレームを第一引数に指定
    type='candle', # グラフ表示の種類を指定 ローソク足チャートであれば"candle"
    style='yahoo', # ここにスタイル一覧の中から好みのものを指定 例では"yahoo"を指定

    # チャートのサイズの設定
    figratio=(20, 10), # 図のサイズをタプルで指定
    figscale=1.0, # 図の大きさの倍率を指定、デフォルトは1
    tight_layout=False, # 図の端の余白を狭くして最適化するかどうかを指定

    # 軸の設定
    datetime_format='%Y/%m/%d', # X軸の日付の表示書式を指定
    # xlim=('2021-01-01', '2021-02-01'), # X軸の日付の範囲をタプルで指定 指定無しならデータフレームを元に自動で設定される
    # ylim=(25000, 30000), # Y軸の範囲をタプルで指定 指定無しなら自動で設定される
    xrotation=45, # X軸の日付ラベルの回転角度を指定 デフォルトは45度
    axisoff=False, # 軸を表示するかどうかを指定 デフォルトは"False"

    # データの表示設定
    volume=False, # ボリュームを表示するかどうかを指定 デフォルトは"False"
    show_nontrading=False, # データがない日付を表示するかどうかを指定 デフォルトは"False"

    # ラベルの設定
    title='Title', # チャートのタイトル
    ylabel='ylabel', # チャートのY軸ラベル
    ylabel_lower='ylabel_lower', # ボリュームを表示する場合は、ボリュームのグラフのY軸ラベル
)

このソースコードを実行すると、以下のようなグラフが得られます。

2. mplfinanceのチャートのスタイルを自作する

mplfinanceに用意されているスタイルではなく、自分好みにスタイルを作成することもできます。辞書形式に指定するだけなので、容易に変更できるようになっています。

チートシート

# ローソクの色の設定
marketcolors = mpf.make_marketcolors(
    up='#00BFFF', # 上昇時のろうそくの塗りつぶし色
    down='#DC143C', # 下降時のろうそくの塗りつぶし色
    edge='lightgray', # ろうそくの端の線の色
    wick={
        # 辞書形式で、ろうそく足の真の色を指定
        'up':'#00BFFF', # 上昇時のろうそくの芯の色
        'down':'#DC143C' # 下降時のろうそくの芯の色
    }
)
# グラフ全体の設定
mpfstyle = mpf.make_mpf_style(
    marketcolors=marketcolors,
    gridcolor='lightgray', # チャートのグリッドの色
    facecolor='white', # チャートの背景の色
    edgecolor='black', # チャートの外枠の色
    figcolor='white', # チャートの外側の色
    gridstyle='-', # チャートのグリッドの種類 "--":実線, "--":破線, ":":点線, "-.":破線と点線の組み合わせ
    gridaxis='both', # チャートのグリッドの有無を指定 both:縦横双方, horizontal:横線のみ, vertical:縦線のみ
    y_on_right=False, # y軸を右に表示するかどうかを指定
    rc = {
        'xtick.color': 'black', # X軸の色
        'xtick.labelsize': 8, # X軸の文字サイズ
        'ytick.color': 'black', # Y軸の色
        'ytick.labelsize': 8, # Y軸の文字サイズ
        'axes.labelsize': 10, # 軸ラベルの文字サイズ
        'axes.labelcolor': 'black', # 軸ラベルの色
        # 'font.family': 'IPAexGothic', # タイトル,ラベルのフォントを指定
    }
)
mpf.plot(
    df_master, # 使用するデータフレームを第一引数に指定
    type='candle', # グラフ表示の種類を指定 ローソク足チャートであれば"candle"
    style=mpfstyle, # 自作したスタイルを指定

    # チャートのサイズの設定
    figratio=(20, 10), # 図のサイズをタプルで指定
    figscale=1.0, # 図の大きさの倍率を指定、デフォルトは1
    tight_layout=False, # 図の端の余白を狭くして最適化するかどうかを指定

    # 軸の設定
    datetime_format='%Y/%m/%d', # X軸の日付の表示書式を指定
    # xlim=('2021-01-01', '2021-02-01'), # X軸の日付の範囲をタプルで指定 指定無しならデータフレームを元に自動で設定される
    # ylim=(25000, 30000), # Y軸の範囲をタプルで指定 指定無しなら自動で設定される
    xrotation=45, # X軸の日付ラベルの回転角度を指定 デフォルトは45度
    axisoff=False, # 軸を表示するかどうかを指定 デフォルトは"False"

    # データの表示設定
    volume=False, # ボリュームを表示するかどうかを指定 デフォルトは"False"
    show_nontrading=False, # データがない日付を表示するかどうかを指定 デフォルトは"False"

    # ラベルの設定
    title='Title', # チャートのタイトル
    ylabel='ylabel', # チャートのY軸ラベル
    ylabel_lower='ylabel_lower', # ボリュームを表示する場合は、ボリュームのグラフのY軸ラベル
)

色は、RGBで指定するか、またはメインの色であれば色の名前で指定します。
このソースコードを実行すると、以下のようなグラフが得られます。

以上となります。

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10