ここまでにOHLCデータを取得してDataFrameに入れるという所までを解説しました。さらに、ここからチャートの描画もやってみましょう。正直DataFrameにデータを入れる所までできれば、後はわりと簡単にできてしまうのですが、画面描画の部分などを少し解説していきます。
ちなみに、チャートの画面描画はシステムトレードを行う上では必須ではないのですが、チャートが描画できた方が扱っているデータへの理解も深まると思います。
それに、チャートとして表示を行う事で、後々の取引結果の分析なども実施しやすくなりますよ。
ではさっそく見ていきましょう。
コンテンツ
DataFrameに入れたOHLCデータをチャートとして描画
では、最初に、今回作成するプログラムの流れをまとめておきます。
処理の流れ
1)ライブラリの宣言、読み込み
2)cryptowatch APIからOHLCデータを取得
3)対象のOHLCデータをDataFrameに投入
4)DataFrameのデータをチャートとしてプロット
5)チャート(表)のフォーマット作成と表示処理
ざっくり言うとこんな感じです。
ちなみに、チャートを描画するためには事前の準備が必要です。事前準備の方法についてはこちらをご確認下さい。
また、DataFrameという名前を出しましたが詳細を知りたい!という場合はこちらの記事を参考にして下さい。
実際にコードを書いて実行してみる
では、先ほどの処理の流れ通りのコードを作成して実行してみます。細かい解説は後で行います。
Pythonコードと実行結果
■Pythonコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import requests,time from datetime import datetime import datetime as dt import pandas as pd from matplotlib import pyplot as plt import matplotlib.dates as mdates from mpl_finance import candlestick_ohlc def get_data(min): response = requests.get("https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc",params = {"periods":min,"after":1519862400}) data = response.json() return data r_min = 86400 out_data = get_data(r_min) Time_Data, Open_price, High_price, Low_price, Close_price = [],[],[],[],[] for ohlc in out_data["result"][str(r_min)]: Time_Data.append(datetime.fromtimestamp(ohlc[0])) Open_price.append(ohlc[1]) High_price.append(ohlc[2]) Low_price.append(ohlc[3]) Close_price.append(ohlc[4]) df = pd.DataFrame({'YYYY-MM-DD':Time_Data, 'open':Open_price, 'high':High_price, 'low':Low_price, 'close':Close_price}) ohlc = zip(mdates.date2num(Time_Data), Open_price, High_price, Low_price, Close_price) ax = plt.subplot() ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) #月日 candlestick_ohlc(ax, ohlc, width=0.7, colorup='g', colordown='r') plt.title(' BTC/JPY chart') plt.show() |
■実行結果
コードの解説
ちょっと小さいですが、無事にローソク足のチャートを描画する事ができました。
処理のおおよその流れは冒頭でお伝えした通りになりますが、今回は描画のために必要なコードがたくさんありますので、(その辺について)少し長めの解説をしていきます。
zip関数について
「data = zip(A, B, C, D, E)」※A, B, C, D, Eをリストにしてまとめてdataに入れる
zipというと圧縮形式をイメージしますが、Pythonの場合は複数の要素(変数など)をまとめて扱う場合に使用されます。そんなに難しく考える必要はなく、今回のケースでは元々別々の変数であるOHLCデータを、まとめて「ohlc」に代入していると思えばOKです。
※ちなみにzipファイルを読み込むにはzipfileというモジュールを使います。
date2numについて
「matplotlib.dates.date2num(d)」※unix時間への変換
OHLCを表示する関数に渡す値はunix時間にする必要があります。逆に、Matplotlibを使ってグラフ描画を行う際には、X軸に時刻を設定する事が多いと思います。そんな時には両方の値を保持しなければなりません。
unix時間を算出する際だけ、date2num関数を行う事が多いです。datetimeオブジェクトの(d)を、この後で説明するcandlestick_ohlc用の日付(Unix時間)へと変換する事ができます。
「ax.xaxis」と「ax.yaxis」について
そもそも描画領域の全ての要素をまとめてArtistオブジェクトと言うそうです。Artistの中にはcontainerがあり、その中のFigureが含まれます。※いくつかのコードを見ていると、fig=plt.figure()としてFigureを呼ぶことが多いですね。
Figureオブジェクトの中にはAxesオブジェクトというものがあり、さらにその中にAxisオブジェクトが存在しています。で、その中に今回使用しているxaxisメソッド、yaxisメソッドが存在しています。※まとめると、Figure.Axes.Axisの中にxaxis、yaxisというメソッドが存在する
ちなみに、この辺りの記述方法は色々な流派があります。いくつか使いながら自分の書きやすいコードを書けばよいと思います。
candlestick_ohlc関数について
candlestick_ohlcは今回のコードの中では一番大切な部分かもしれません。ちなみに、事前準備でmpl_financeをインストールしましたが、それはこの関数を使いたいがためです。ローソク足描画専門の素晴らしい関数です^^
candlestick_ohlc関数を呼ぶ時には以下を指定する必要があります。代表的な引数をあげます。
candlestick_ohlc(
ax,#座標軸オブジェクト(axesオブジェクトなど)
ohlc_data, # OHLC情報「日時、始値、高値、安値、終値」の値。その後にデータが続く事もある。
width=0.7, # 棒の横幅。今回は日単位の精度に落としてあるので、0.7日分の幅になる。
colorup=’g’,#陽線の色を指定(ここでは緑(’g’))
colordown=’r’#陰線の色を指定(ここでは赤(’r’))
)
ローソク足を表示する専用関数だけあって、引数で陽線や陰線の色も指定できる作りになっています。※オブジェクト指向らしい作りになっていると思います。
最初は使い方もちょっと分からないなと思うかもしれませんが、使っていくうちに慣れてくると思います。細かい部分については少しずつ調べて知識を深めていけばOKだと思います。
※mpl_finance関数の仕様についてはこちらもご参考に
https://matplotlib.org/api/finance_api.html
その他
その他にもいくつか簡単に解説しておきます。
■set_major_formatter関数
グラフの目盛に表示される名称を定義する関数。この場合は「月日」を表示しています。
■grid関数
ここでは使用していませんが、グリッドを表示するための関数。ax.grid()と記述して使用する事が多い。
■title関数
描画グラフのタイトルを指定する関数。plt.title(‘タイトル名’)として使用する事が多い。
まとめ
さて、チャート描画ができれば、OHLCデータのプロットイメージはバッチリです!
実際に、OHLCが時間毎に変化していくというのが、明確にイメージできたのではないでしょうか。
また、ここに移動平均線などのシグナル情報も付与できれば、システムトレードを行う上でも大きな力になると思います。
自分自身のトレード手法が有効かどうかを判断するためには、非常に役に立ちますので、今回の描画までの流れはしっかりと覚えておいてほしいなと思います。