Python描画ライブラリPlotlyでローソク足を表示

3月 30, 2021

プログラミングによるテクニカル分析をしたい場合,ローソク足が描かれたチャートを参考にしたい場面は多いですよね.

そこで今回は,Pythonでテクニカル分析チャートを描画する方法を紹介します.

本記事で紹介するコードを実行すれば,以下のような結果が得られます.

ローソク足や移動平均線を取得・分析できる有名なPythonライブラリとして「TA-Lib」があり,TA-Libでは他のテクニカル分析も取得できるので便利ですが,インストールや扱いが少し難しいので今回は比較的お手軽に描画できる『Plotly』を使用します.

Plotyはmatplotlibのような普通の描画ではなく,カーソルで動的にデータを拡大・縮小したり値を表示できるようなグラフを出力できるので触っていて面白いです.

また,「mplfinance」もPlotlyと同じくらい簡単にテクニカル分析チャートを描画できるライブラリなので,こちらもぜひトライしてみてください.

データを取得する

Plotlyで描画する前に,株価データを取得します.

データの取得は,今回はpandas-datareaderで行います.pipでインストールしておいてください.

pip install pandas_datareader

データを取得するコードは以下の通りです.

import pandas_datareader.data as web
import datetime

start = datetime.date(2015,1,1)
end = datetime.date(2020,1,1)

df = web.DataReader('^N225', 'yahoo', start, end)

これで,Yahoo!financeから2015/1/1~2020/1/1の日経平均株価(’^N225’)を取得することができます.

pandas-datareaderでは他にも米国株,日本株,日経平均株価以外の指数など,色々なデータを取得することができるのでpandas datareaderをインストールして株価データを取得する方法【日本株・米国株】を参考にしてみてください.今回は日経平均株価を例に進めます.

取得したデータは以下のような構造を持っています.

print(df.head())
                    High           Low          Open         Close       Volume     Adj Close
Date
2015-01-05  17540.919922  17219.220703  17325.679688  17408.710938  116500000.0  17408.710938
2015-01-06  17111.359375  16881.730469  17101.580078  16883.189453  166000000.0  16883.189453
2015-01-07  16974.609375  16808.259766  16808.259766  16885.330078  138600000.0  16885.330078
2015-01-08  17243.710938  17016.089844  17067.400391  17167.099609  140600000.0  17167.099609
2015-01-09  17342.650391  17129.529297  17318.740234  17197.730469  155200000.0  17197.730469

Plotlyのインストール

pipでインストールできます.

pip install plotly

Plotlyでローソク足を描画

Plotlyによるローソク足の描画は,軸のデータ(日付)およびopen(始値),high(高値),low(低値),close(終値)のデータを以下のように指定します.

fig = go.Figure(
         data= [go.Candlestick(
                   x = df.index,
                   open=df['Open'],
                   high=df['High'],
                   low=df['Low'],
                   close=df['Close'])
         ]
)

あとは,以下のようにshowすればOKです.

fig.show()
ブラウザ上に表示される

このグラフはカーソルで表示範囲を変えたり,グラフの上にカーソルを置くことでデータの値が表示されたりします.

まとめコード

import plotly.graph_objects as go
import datetime
import pandas_datareader.data as web

start = datetime.date(2015,1,1)
end = datetime.date(2020,1,1)

df = web.DataReader('^N225', 'yahoo', start, end)

fig = go.Figure(
         data= [go.Candlestick(
                   x = df.index,
                   open=df['Open'],
                   high=df['High'],
                   low=df['Low'],
                   close=df['Close'])
         ]
)
fig.show()