Python mplfinanceでローソク足を作る

スポンサーリンク

Pythonのmplfinanceパッケージでローソク足のチャートを作る方法を紹介します。mplfinanceは多分一番簡単にローソク足が作れるだけでなく、インジゲーターなどのチャートも追記可能です。

スポンサーリンク

はじめに

インストール

mplfinanceは標準パッケージではありません。インストールが必要です。

pip install mplfinance

似たようなパッケージでmpl_financeというのがありますが、こちらは非推奨となっていますので、間違いないようにしてください。

インポート

インポートは公式サイトに従って、別名にしています。

import mplfinance as mpf

JupyterなどのNotebookを使う場合のおまじない

%matplotlib inlineというおまじないを読み込ませることにより画像が表示されるようになります。

%matplotlib inline
import mplfinance as mpf

データのサンプル

データのレイアウトは以下のようになっています。基本的にOANDA JAPANからダウンロードしたデータにmacdとボリンジャーバンドを追加したのみです。

参考サイト

公式サイト

mplfinance
Utilities for the visualization, and visual analysis, of financial data

GitHub

GitHub - matplotlib/mplfinance: Financial Markets Data Visualization using Matplotlib
Financial Markets Data Visualization using Matplotlib - GitHub - matplotlib/mplfinance: Financial Markets Data Visualization using Matplotlib

基本(ローソク足を作成)

ローソク足だけであれば、以下だけで表示できます。

mpf.plot(データフレーム, type='タイプ', figratio=(X軸,Y軸))

  • データフレーム:
    • 値のカラム名は次のようにします。先頭文字が大文字になっていますので注意してください。
      Open、High、Low、Close、Volume(使う場合のみ)
    • 日時はDatetimeIndexである必要があります。
  • type(タイプ)
    • candle:ローソク足
    • ohlc:変な足(デフォルト)
    • line:線グラフ
    • その他(renko、pnfがありますが意味不明です。
  • figratio(X軸,Y軸)
    • 初期値は不明ですが少し小さいので指定したほうがいいと思います。
mpf.plot(df, type='candle', figratio=(10,5))

*見た目がイマイチ?デザインの変更は最後に説明していますよ。

チャート画像をファイルで保存

savefig='パスとファイル名'を指定するだけです。

mpf.plot(df, type='candle', figratio=(10,5), savefig='filename.png')

出来高を表示

volume=Trueを追記するだけです。(データにVolumeの列が必要です。

mpf.plot(df, type='candle', volume=True, figratio=(10,5))

垂直(または水平)の補助線を表示

縦(または横)の補助線を1本引く

vlines=X軸のindexとして縦線を入れる箇所のX軸のインデックスを指定します。
横線の場合はvlineshlinesとしてY軸の値を指定します。

mpf.plot(
    df, 
    type='candle', 
    volume=True, 
    figratio=(10,5), 
    vlines='2019-01-01 23:15:00+00:00',
    savefig='filename.png'
)

mplfinanceの1本の縦の補助線

縦(または横)の補助線を複数本引く

vlines=[X軸のindex1, X軸のindex2]のようにリスト型で縦線を入れるX軸のインデックスを指定します。
横線の場合はvlineshlinesとしてY軸の値を指定します。

mpf.plot(
    df, 
    type='candle', 
    volume=True, 
    figratio=(10,5), 
    vlines=['2019-01-01 23:15:00+00:00', '2019-01-01 23:25:00+00:00'],
    savefig='filename.png'
)

mplfinanceの複数本の縦の補助線

補助線に色を指定する

vlines=dict(vlines=X軸のindex,colors='色')vlinescolorsを辞書型でまとめて指定します。
横線の場合はvlineshlinesとしてY軸の値を指定します。

mpf.plot(
    df, 
    type='candle', 
    volume=True, 
    figratio=(10,5), 
    vlines=dict(vlines='2019-01-01 23:15:00+00:00',colors='r'),
    savefig='filename.png'
)

mplfinanceの色を指定した1本の縦の補助線

複数本の補助線で個別に色を指定する場合は以下のようにリスト型で指定します。

vlines=dict(vlines=[X軸のindex1, X軸のindex2],colors=['色1', '色2'])

個別でなく同じ色の場合はcolors='色'と指定します。
横線の場合はvlineshlinesとしてY軸の値を指定します。

mplfinanceの色を指定した複数本の縦の補助線

補助線のスタイルを指定する

linestyle='線の記号'と指定します。
複数本の補助線に個別にスタイルを指定することはできません
横線の場合はvlineshlinesとしてY軸の値を指定します。

mpf.plot(
    df, 
    type='candle', 
    volume=True, 
    figratio=(10,5), 
    vlines=dict(vlines=['2019-01-01 23:15:00+00:00', '2019-01-01 23:25:00+00:00'],colors=['r', 'g'],linestyle='-.'),    
    savefig='filename.png'
)

mplfinanceの線のスタイルを指定した補助線

補助線の線の太さを指定する

linewidths=太さ1と指定します。
複数本の補助線に個別に太さを指定する場合はlinewidths=[太さ1, 太さ2]とリスト形式で指定します。
横線の場合はvlineshlinesとしてY軸の値を指定します。

mpf.plot(
    df, 
    type='candle', 
    volume=True, 
    figratio=(10,5), 
    vlines=dict(vlines=['2019-01-01 23:15:00+00:00', '2019-01-01 23:25:00+00:00'],colors=['r', 'g'],linewidths=[1, 3]),    
    savefig='filename.png'
)

mplfinanceの線の太さを指定した補助線

補助線の色の濃さ(アルファ)を指定する

alpha=濃さを指定します。
複数本の補助線に個別にスタイルを指定することはできません
横線の場合はvlineshlinesとしてY軸の値を指定します。

mplfinanceの色の濃さを指定した補助線

斜線の補助線を表示

alines=pointsを追加します。
pointsには以下のようにX軸のインデックスとY軸の値を指定してリスト型でまとめます。

points  = [(X軸のインデックス1,Y軸の値1),(X軸のインデックス2,Y軸の値2)]

線のスタイルや色、太さ、濃さは縦線と同じで辞書型にまとめて指定します。
alines=dict(alines=points,linestyle='-.')など

dates = ['2019-01-01 23:15:00+00:00','2019-01-01 23:25:00+00:00','2019-01-01 23:35:00+00:00']
points  = [
    (dates[0],df[df.index == dates[0]].Close[0]),
    (dates[1],df[df.index == dates[1]].Close[0]),
    (dates[2],df[df.index == dates[2]].Close[0]),
]
print(points)

mpf.plot(
    df, 
    type='candle', 
    volume=True, 
    figratio=(10,5), 
    alines=points,
    savefig='filename.png'
)

mplfinanceの1本の斜線の補助線

移動平均線など別のチャートを表示

移動平均線

mav=(5, 25)と期間を指定して追記するだけです。1個以上指定することができますが、いくつまでOKかは不明です。4つは大丈夫でした。

mpf.plot(df, type='candle', volume=True, mav=(5, 25), figratio=(10,5))

ボリンジャーバンドなど他のカラムにあるデータを表示

一つの場合

apd = mpf.make_addplot(df['カラム名'])でデータを作成する。

addplot=apdを追加するだけです。

apd = mpf.make_addplot(df['bb_width'])

mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5))

複数の場合

基本的には一つの場合と同じですが、予め挿入する列をデータフレームにまとめておく必要があります。

tcdf = df[['bb_up','bb_mid','bb_low']]  # DataFrame with two columns
apd  = mpf.make_addplot(tcdf)

mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5))

出来高にMacdなどの別のチャートを表示

一つの場合

別チャートを表示される場合と同じですが、panel='lower'と表示させる位置を指定します。

apd  = mpf.make_addplot((df['macd']),panel='lower')

mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5))

複数の場合

リスト型でまとめるだけでOKです。

apd  = [
    mpf.make_addplot((df['macd']),panel='lower'),
    mpf.make_addplot((df['signal']),panel='lower')
]

mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5))

ラベルの表示

軸のラベル

ylabel='name'で軸のラベルを指定することができます。

apd  = [
    mpf.make_addplot( df_temp[['upc','lpc']]),
    mpf.make_addplot(df_temp['aroon_up'],panel='lower',color='c', ylabel='aroon'),
    mpf.make_addplot(df_temp['roc'],panel='lower',color='m', ylabel='roc')    
]

mpf.plot(df_temp, addplot=apd, type='candle', figratio=(10,5))

ラインなどの凡例ラベル

私が調べた限り、標準の機能ではなさそうでした。
またグラフ内に文字を書き込むことも出来なさそうなので、自前で凡例を作成することもできないです。

チャート内に目印を表示

準備

事前に印を入れるデータを作成しました。

df.loc[df.index == "2019-01-01 23:12:00+00:00", "signal1"] = df[df.index == "2019-01-01 23:12:00+00:00"].High + 0.005
df.loc[df.index == "2019-01-01 23:28:00+00:00", "signal2"] = df[df.index == "2019-01-01 23:28:00+00:00"].Low - 0.005

チャートの作成

一つの場合

基本的には別チャートを表示させるのと同じです。データの列がnanは表示されないだけです。あとは見栄えの調整をしているだけですね。

apd  = mpf.make_addplot(df['signal1'],scatter=True,markersize=100,marker='v')
mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5),

複数の場合

こちらも出来高の別チャートなどと同じで、リストにまとめているだけです。

apd  = [
    mpf.make_addplot(df['signal1'],scatter=True,markersize=100,marker='v'),
    mpf.make_addplot(df['signal2'],scatter=True,markersize=100,marker='^')
]

mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5),

デザインを変更

デザインの変更というより総集編という感じですね。

mpf.make_addplotで各種グラフのデザインを変更できます。

  • linestyle='線種'で線の種類を変更できます。dashdotとdottedしかわかりませんでした。
  • color='色'で線の色を変更できます。指定方法は、色の頭文字と、16進コードでも可能です。
    色の頭文字は以下です。

    • b: blue
    • g: green
    • r: red
    • c: cyan
    • m: magenta
    • y: yellow
    • k: black
    • w: white

mpf.plotstyle='starsandstripes'で全体のデザインを変更できます。
スタイルの種類は以下を参照してください。
でも海外なのでローソク足の青と赤の意味が逆なんですよね。。。クラッシくの白と黒は意味は同じですが。

mplfinance/styles.ipynb at master · matplotlib/mplfinance
Financial Markets Data Visualization using Matplotlib - mplfinance/styles.ipynb at master · matplotlib/mplfinance
tcdf = df[['bb_up','bb_mid','bb_low']]

apd = [
         mpf.make_addplot(tcdf,linestyle='dashdot'),
         mpf.make_addplot(df['signal1'],scatter=True,markersize=100,marker='v',color='c'),
         mpf.make_addplot(df['signal2'],scatter=True,markersize=100,marker='^',color='m'),
         mpf.make_addplot((df['macd']),panel='lower',color='g',linestyle='dotted'),
         mpf.make_addplot((df['signal']),panel='lower',color='#e41a1c',linestyle='dotted')
       ]

mpf.plot(df, addplot=apd, type='candle', volume=True, figratio=(10,5), style='starsandstripes',
         savefig='candlestick_mpf_mav.png')

 

コメント

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