Pythonでローソク足の表示方法

pythonでFXのヒストリカルデータをローソク足で描画する方法を調べました。

私がやりたいことは、Python上でバックテストをして、結果の敗因の原因を調べるためにチャートを見るためです。

この調査で使うデータについて

「PythonでFXのヒストリカルデータ分析 導入編」 で作成したDataFrameのticksを使います。試してみたい方は、この記事を読んでください。

ただし、データ数が多すぎるので、下記のように1時間分を取り出したdfを使っていきます。

>>> df = ticks[60:120]
>>> df.head(5)
                        open     high      low    close
t                                                      
2018-03-12 01:01:00  1.23090  1.23093  1.23090  1.23092
2018-03-12 01:02:00  1.23090  1.23105  1.23090  1.23103
2018-03-12 01:03:00  1.23103  1.23123  1.23103  1.23123
2018-03-12 01:04:00  1.23123  1.23125  1.23122  1.23122
2018-03-12 01:05:00  1.23122  1.23122  1.23102  1.23102

matplotlib.finance(mpl_finance)

昔はpipでパッケージ指定してインストールできたようですが、今はできません。

下記のように直接ダウンロードしてインストールします。

$ pip install https://github.com/matplotlib/mpl_finance/archive/master.zip

このmpl_financeを使ってローソク足を描画してみます。

>>> import mpl_finance
>>> fig = plt.figure()
>>> ax = fig.add_subplot(1,1,1)
>>> mpl_finance.candlestick2_ohlc(ax, opens=df.open, highs=df.high, lows=df.low, closes=df.close, width=1)
>>> fig.show()

結果のチャートは下記です。

mpl_financeのチャート

plotly

plotlyは、対話的に動かせるグラフを作れます。matplotlibだと画像になってしまいます。一応、画像上でズームとかできますが。

pipで下記のようにインストールできます。

$ pip install plotly

plotlyのCandlestick

フルパスだとplotly.offline.plotを使った例です。最近オフラインで使えるようになりました。このplotだとローカルへhtmlを出力します。

>>> import plotly
>>> import plotly.graph_objs as go
>>> trace = go.Candlestick(x=df.index, open=df.open, high=df.high, low=df.low, close=df.close)
>>> plotly.offline.plot([trace], filename='fx_plotly_candlestick')                                                                                                                                 

結果のチャートは、作業ディレクトリにhtmlとして出力されます。
上記の例で出力したものは、 fx_plotly_candlestick.html へ置いてあります。

画像でも保存でき、こんな感じです。

plotlyのCandlestickチャート

このCandleStickの方式では、ZoomがX軸方向しかできず、かつ全体のオーバービューもついています。
私の使い方は、詳細な確認なので、オーバービューはいりません。それよりズームがY軸方向にもできるようにしたいのです。

調べていると、plotly.figure_factoryにシンプルなAPIがあったので、そちらで両方解決するチャートを作れました。このCandlestickも内部でcreate_candlestickを使っていると思いますが。

plotly.figure_factory.create_candlestick

シンプルなI/Fのplotly.figure_factory.create_candlestickを使った例です。Candlestickと同じようにローカルへhtmlを出力しています。

>>> import plotly.figure_factory
>>> fig = plotly.figure_factory.create_candlestick(df.open, df.high, df.low, df.close, dates=df.index)
>>> plotly.offline.plot(fig, filename='fx_plotly_figure_factory')                                                                                                                                 

結果のチャートは、作業ディレクトリにhtmlとして出力されます。
上記の例で出力したものは、 fx_plotly_figure_factory.html へ置いてあります。Candlestickの結果と見比べてください。オーバービューなしで、ドラッグでのZoomもXYの2軸に対応しています。

Candlestickと同じように画像で保存できます。こんな感じです。

plotlyのcreate_candlestickチャート

どちらがよいか

私は、大きなヒストリカルデータ全体を一度に表示して見たりしません。なので、オーバービューは不要です。
また、より詳細に可視化していきたいので、Y方向のZoomが必須です。

なので、plotlyを使うのであれば、plotly.figure_factory.create_candlestickにしようかと考えています。

bokeh

最近、注目されているbokehです。

「BokehのCandlestick」 のサンプルを見ると、まだまだ発展途上のようでした。

結局どれを使うか

ここまで読んでいただければわかるかと思いますが、plotly.figure_factory.create_candlestickを使おうと思います。

plotlyで行き詰まることあれば、もうちょっとbokehを詳しく調べようかと思います。

検証まとめ記事へのリンク

システムトレードの他のネタを纏めています。参考になれば嬉しいです。

↓↓↓検証まとめページはこちら↓↓↓
【保存版】PythonでのFXのシステムトレード検証

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント