こんにちは。TATです。
今日のテーマは「Pythonのmplfinanceで株価のローソク足チャートを描く方法【コード解説】」です。
株価のローソク足チャートを描くためのライブラリとしてmplfinanceをご紹介します。
元々はmpl_financeというライブラリがありましたが、こちらはすでに廃止されて、今はmplfinanceの使用が推奨されています。
mplfinanceを使えば、短いコードで簡単にきれいなローソク足チャートを描くことができます。
テクニカル指標を追加したり、ラベルや表記方法のカスタマイズなど、細かい指定も可能です。
Pythonで株やFXの分析をするにはとてもおすすめのライブラリです。
本記事では、Pythonのmplfinanceを使って、株価のローソク足チャートを描く方法について解説して、さらにチャートのカスタマイズ方法やテクニカル指標を追加する方法について解説していきます。
目次
(おさらい)株価のローソク足データを取得する
まずは株価データの準備です。
今回は例としてトヨタ自動車(証券コード: 7203)を使っていきます。
株価データの取得方法については過去の記事で解説しているので詳細は割愛します。
次のコードでは、pandas_datareaderを使って、2021年のトヨタ自動車のローソク足データを取得しています。
from pandas_datareader import data df = data.DataReader("7203.T", "yahoo", start="2021-01-01", end="2021-12-31") df.head()
これでデータの準備は完了です。
【日本株対応】Pythonで株価のローソク足データを取得する方法まとめ【CSV、ライブラリ、スクレイピング】
続きを見る
mplfinanceでローソク足チャートを描く
それでは、ここからPythonのmplfinanceを使って、ローソク足チャートを描いていきます。
(下準備) データの形式を合わせる
まずはローソク足チャートを描くための下準備です。
mplfinanceでチャートを描く際には、引数として渡すDataFrameを指定された形式に整えておく必要があります。
以下にまとめます。
ポイント
- indexを日付データにする
- 列は左から順番にOpen, High, Low, Closeとする
- 出来高を追加する場合はCloseの右にVolumeを追加する
列名の順番がポイントで、カラム名はなんでもOKです。
ということでデータを少し整えます。
indexはこのままですでにOKなので、カラムの並び替えだけします。
df = df[["Open", "High", "Low", "Close", "Volume"]] df.head()
これで下準備はOKです。
mplfinance.plotでローソク足チャートを描く
それではローソク足チャートを描いてみます。
mplfinance.plotを使えば、1行でローソク足チャートを描くことができます。
ローソク足チャートを描くためには、typeをcandleに指定する必要があります。
import mplfinance as mpf mpf.plot(df, type="candle")
簡単ですね。
用意したdfを引き渡して、typeをcandleとすれば完成です。
営業日のみのデータが表示される
別記事で紹介しているmpl_financeやPlotlyを使ってローソク足チャートを描く際には、営業日のみを表示するために少し工夫が必要でした。
mplfinanceはこの心配は不要で、自動的に営業日のみ表示されるようになります。
ここに関しては、mplfinanceが最も使い勝手が良いと思います。
typeでローソク足チャート以外の表現が可能
typeを変更すれば、ローソク足チャート以外の方法でチャートを描くことができます。
選択できるのは次の5つです。
type
- ohlc(4本値: default設定)
- candle(ローソク足チャート)
- line(折れ線グラフ)
- renko(練行足チャート)
- pnf(PnFチャート)
先ほどご紹介したローソク足チャート以外のタイプの結果も合わせて紹介しておきます。
typeを変更するだけでここまで変化させられるのはとても便利ですね。
styleでチャートの見た目を簡単に変更できる
さらに注目すべき点として、styleという引数があります。
これを指定するとチャートの見た目をガラリを変更することができます。
指定できるのは以下の通りです。実際はもっとあるかも。。。
style
- classic
- charles
- mike
- blueskies
- starsandstripes
- brasil
- yahoo
- binance
個人的に一番好きなbinanceで表示してみます。
import mplfinance as mpf mpf.plot(df, type="candle", style="binance")
だいぶ変わりますよね。色使いがとてもみやすくなりました。
その他のstyleについても一覧にまとめました。
typeは一律でcandleにしています。
このように、簡単に見た目を変更することができます。
お好みのスタイルがあればそれを使っちゃえばOKです。
コードもスッキリして楽ちんです。
色は独自に指定することも可能
styleを指定すると簡単に見た目を変更することができますが、こだわりとかがあって細かくカスタマイズしたい場合には、直接色の指定をすることも可能です。
次の例では、ローソク足の色を細かく指定しています。
import mplfinance as mpf mc = mpf.make_marketcolors(up='g',down='r', edge='lime', wick={'up':'blue','down':'orange'}, volume='gray', ohlc='black') s = mpf.make_mpf_style(marketcolors=mc) mpf.plot(df, type="candle", style=s)
mpf.make_marketcolorsで色を細かく指定することができます。
mpf.make_mpf_styleで指定した設定を読み込ませ、plotでstyleに指定すればOKです。
このように、好みのスタイルが見つからない場合は、マニュアルで自由に設定することもできます。
日付やラベルのフォーマットを変更する
最後に日付やラベルのフォーマットを変更する方法についてもご紹介しておきます。
日付のフォーマットを2022/01/01のような形式にして、株価の値をカンマ区切りにしてみます。
import mplfinance as mpf import matplotlib fig, ax = mpf.plot(df, type="candle", style="binance", datetime_format="%Y/%m/%d", returnfig=True) ax[0].get_yaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
日付のフォーマットは、plotのdatetime_formatで指定することができます。
数値データをカンマ区切りにするためには、plotにreturnfig=Trueとしてfigとaxを受け取ります。
axはリスト形式になっているので、最初の値を指定してmatplotlib.ticker.FuncFormatterでカンマ区切りに指定することができます。
これでだいぶ見やすくなります。
以上で、mplfinanceの基本的な使い方の解説はおしまいです。
mplfinanceのローソク足チャートにテクニカル指標を加える
ここからは少し応用編です。
先ほどのローソク足チャートにいろいろなテクニカル指標を加えてみましょう。
出来高を追加する
まずは出来高を追加してみます。
これは非常に簡単で、volume=Trueを追加するだけOKです。
ただし、Close列の右隣に出来高のカラムを用意しておく必要があります。
import mplfinance as mpf mpf.plot(df, type="candle", style="binance", volume=True)
簡単ですね。
移動平均線を追加する
次にテクニカル分析の基本となる移動平均線を追加してみます。
データの準備すら不要
mplfinanceでは移動平均線を計算する機能が備わっているため、データの準備すら必要ありません。
plot()の中にmavという引数を指定すればOKです。
例えば、次のコードでは20日と50日移動平均線を加えています。
import mplfinance as mpf mpf.plot(df, type="candle", style="binance", volume=True, mav=(20, 50))
移動平均線が追加されました。
用意した移動平均線を表示させることも可能
また、自分で用意した移動平均線を表示させることももちろん可能です。
次のコードでは、移動平均線を計算して、その結果をローソク足チャートに追加しています。
線の太さや色も指定してみました。
import mplfinance as mpf # 移動平均線 df["SMA20"] = df["Close"].rolling(window=20).mean() df["SMA50"] = df["Close"].rolling(window=50).mean() add_plot = [ mpf.make_addplot(df["SMA20"], panel=0, color="orange", width=0.8), mpf.make_addplot(df["SMA50"], panel=0, color="blue", width=0.8), ] mpf.plot(df, type="candle", style="binance", volume=True, addplot=add_plot)
ここではrolling()を使って移動平均線を計算して、addplotで追加しています。
add_plotの中には、リスト形式で表示したいデータを指定することができます。
panelで表示したいチャートを指定します。
上から0, 1, 2...と番号が振られているので、上記のチャートの場合だと、ローソク足チャートがpanel=0、出来高のチャートがpanel=1となります。
【コード解説】Pythonで株価データから主要なテクニカル分析を計算して可視化する【移動平均線、MACD、RSI】
続きを見る
複数のテクニカル指標を組み合わせる
最後に少しレベルアップします。
複数のテクニカル分析を組み合わせて表示させてみましょう。
ここでは、これまでの移動平均線や出来高に加えて、RSIとMACDも追加してみます。
MACDとRSIを計算する
まずはMACDとRSIを計算します。
ここではそれぞれを計算するための関数を定義してみました。
def macd(df): FastEMA_period = 12 # 短期EMAの期間 SlowEMA_period = 26 # 長期EMAの期間 SignalSMA_period = 9 # SMAを取る期間 df["MACD"] = df["Close"].ewm(span=FastEMA_period).mean() - df["Close"].ewm(span=SlowEMA_period).mean() df["Signal"] = df["MACD"].rolling(SignalSMA_period).mean() return df def rsi(df): # 前日との差分を計算 df_diff = df["Close"].diff(1) # 計算用のDataFrameを定義 df_up, df_down = df_diff.copy(), df_diff.copy() # df_upはマイナス値を0に変換 # df_downはプラス値を0に変換して正負反転 df_up[df_up < 0] = 0 df_down[df_down > 0] = 0 df_down = df_down * -1 # 期間14でそれぞれの平均を算出 df_up_sma14 = df_up.rolling(window=14, center=False).mean() df_down_sma14 = df_down.rolling(window=14, center=False).mean() # RSIを算出 df["RSI"] = 100.0 * (df_up_sma14 / (df_up_sma14 + df_down_sma14)) return df # MACDを計算する df = macd(df) # RSIを算出 df = rsi(df) df.tail()
これでMACDとRSIの計算ができました。
【コード解説】Pythonで株価データから主要なテクニカル分析を計算して可視化する【移動平均線、MACD、RSI】
続きを見る
addplotでテクニカル指標をまとめて表示する
それでは計算したRSIとMACDも合わせて表示してみます。
移動平均線を追加した時と同様に、addplotを利用すればOKです。
ついでにフォーマットとかもいい感じに整えてみます。
import mplfinance as mpf add_plot = [ mpf.make_addplot(df["SMA20"], panel=0, color="orange", width=0.8), mpf.make_addplot(df["SMA50"], panel=0, color="blue", width=0.8), mpf.make_addplot(df["MACD"], panel=2, color="blue", width=0.8), mpf.make_addplot(df["Signal"], panel=2, color="red", width=0.8), mpf.make_addplot(df["RSI"], panel=3, color="red", width=0.8), ] fig, ax = mpf.plot(df, type="candle", style="binance", tight_layout=True, volume=True, addplot=add_plot, volume_panel=1, returnfig=True, datetime_format="%Y/%m/%d") ax[0].get_yaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ','))) ax[2].get_yaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ','))) ax[0].legend(["SMA20", "SMA50"], prop={'size': 8}, loc='upper left') ax[0].set_ylabel("Price", fontsize=9) ax[2].set_ylabel("Volume", fontsize=9) ax[4].set_ylabel("MACD", fontsize=9) ax[6].set_ylabel("RSI", fontsize=9)
きれいなチャートができました。
少しコードの中身を解説すると、今回plot()の中でtight_layout, volume_panelという2つのパラメータを追加しました。
tight_layoutは余白を小さくするオプションです。
volume_panelは出来高を表示するチャートを指定することができます。
1にするとローソク足チャートの下にきます。
add_plotには、MACDとRSIをそれぞれpanel=2とpanel=3に追加しました。
さらにlegendでpanel=1にSMA20とSMA50を表示しています。
少し厄介なのが、axのindexと思います。0, 2, 4, 6で指定しています。
これは各Panelの左軸(主軸)と右軸(2軸)で別々に指定できるためです。
0がpanel=1の左軸, 1がpanel=0の右軸, 2がpanel=1の左軸・・・の順番に指定することができます。
ここまでくればチャート分析にも本格的に使えるのではないでしょうか。
mpl_financeやPlotlyで紹介したコードに比べると、mplfinanceは圧倒的に短いコードできれいなローソク足チャートを描くことができます。
データの分析・可視化にはPythonが最適!
本記事で紹介したコードは、全てPythonを使って書いています。
Pythonはデータの分析や可視化を得意とするプログラミング言語で、さらにAI関連のライブラリーも豊富で昨今のAIブームで需要が急拡大しています。
→ 【いますぐ始められます】データ分析をするならPythonが最適です。
また、Pythonは比較的学びやすい言語でもあります。
実際、僕は社会人になってからPythonを独学で習得して転職にも成功し、Python独学をきっかけに人生が大きく変わりました。
→ 【実体験】ゼロからのPython独学を決意してから転職を掴み取るまでのお話。
Pythonの学習方法についてはいろいろな方法があります。
僕はUdemyを選びましたが、書籍やプログラミングスクールも選択肢になります。
→ 【決定版】Python独学ロードマップ【完全初心者からでもOKです】
→ 【まとめ】Pythonが学べるおすすめプログラミングスクール
→ プログラミングの独学にUdemyをおすすめする理由!【僕はUdemyでPythonを独学しました!】
まとめ
本記事では、「Pythonのmplfinanceで株価のローソク足チャートを描く方法」というテーマで解説してきました。
mplfinanceを使えば、短いコードで簡単にきれいなローソク足チャートを描くことができます。
テクニカル指標や表示方法のカスタマイズなどにも対応しており、自由にチャートを作成することが可能です。
また、mpl_financeやPlotlyでは少し厄介だった営業日だけを表示する方法についても、mplfinanceでは特に追加のコードを必要することなく自動的に営業日のみの表示となります。
手軽さで言えば、mplfinanceがローソク足チャートを描けるライブラリの中で最も扱いやすいと思います。
株やFXのテクニカル分析でも活用できるレベルのチャートを作成することも可能です。
是非とも本記事で紹介しているコードも利用しつつ、活用してみてください。
また、ローソク足チャートが描けるライブラリとしてはPlotlyもおすすめです。
こちらはmplfinanceに比べるとコード量は少し長くなってしまうのですが、インタラクティブなチャートを描くことができます。
チャートを表示後に拡大・縮小したり、ホバーすると該当データが表示されたりして、特に分析には便利です。
もしご興味があれば合わせて読んでみてください。
PythonのPlotlyでインタラクティブな株価のローソク足チャートを描く【コード解説】
続きを見る
ここまで読んでくださり、ありがとうございました。