Python
pandas
Finance
plotly
ローソク足

Pythonでローソク足チャートの表示(Plotly編)

More than 1 year has passed since last update.

Pythonでローソク足チャートの表示(matplotlib編)
の続きです。

Plotlyは、Python専用のパッケージというわけではなく、RやMatlab、JavaScriptなどにも対応しています。オンラインモードだとアカウントを作る必要がありますが、オフラインで使う場合、特にアカウント作る必要はありません。以下はオフラインでの説明です。

準備

PlotlyのPythonパッケージのインストールは、このページにあるように

$ pip install plotly

でOKです。

では、前回の記事と同様、架空の4本値データを作っておきます。ただし、今回は1年分のデータとします。

import numpy as np
import pandas as pd

idx = pd.date_range('2015/01/01', '2015/12/31 23:59', freq='T')
dn = np.random.randint(2, size=len(idx))*2-1
rnd_walk = np.cumprod(np.exp(dn*0.0002))*100
df = pd.Series(rnd_walk, index=idx).resample('B').ohlc()

Plotlyを使ったローソク足チャート

参考にしたページはこちらです。
Candlestick Charts in Python

まずは、標準の設定のままローソク足チャートを表示させます。

from plotly.offline import init_notebook_mode, iplot
from plotly.tools import FigureFactory as FF

init_notebook_mode(connected=True) # Jupyter notebook用設定

fig = FF.create_candlestick(df.open, df.high, df.low, df.close, dates=df.index)

iplot(fig)

create_candlestickの引数にOpenデータ、Highデータ、Lowデータ、Closeデータ、日時データを渡すだけです。

こんな感じのチャートになります。

newplot.png

実際にはチャートのズームやパンが自由にできるので、下のように拡大表示させることもできます。

newplot.png

営業日のみのローソク足チャート

Plotlyのチャートはインタラクティブチャートでとても便利なのですが、やはり、そのままでは土日のスペースができてしまい、営業日で連続していません。
そこで、営業日のみが連続するようにx軸データを細工します。やり方はmatplotlibの場合と同じです。create_candlestickの引数datesを省略すると、x軸のデータは整数インデックスとなります。なので、x軸の目盛としてインデックスに対応する日時データを表示させます。

fig = FF.create_candlestick(df.open, df.high, df.low, df.close)

xtick0 = (5-df.index[0].weekday())%5 #最初の月曜日のインデックス
fig['layout'].update({
    'xaxis':{
        'showgrid': True,
        'ticktext': [x.strftime('%Y-%m-%d') for x in df.index][xtick0::5],
        'tickvals': np.arange(xtick0,len(df),5)
    }
})

iplot(fig)

これで表示させたチャートは以下のようになります。

newplot.png

x軸の目盛が1週間間隔で表示されるのでちょっと細かいですが、拡大すると見やすくなります。

newplot.png

これで営業日のみのローソク足チャートとなっていることがわかります。