【Python】mlp_finance で ローソク足チャートを生成する
おはようございます。
今回は、トレードに欠かせないローソク足チャートを描画したいと思います。
Bitflyer から取得できるデータでは単純に4本値をとれないため、Cryptowatch というサービスからデータを取得します。
プログラムは前回のものを流用します。
【Python】Pandas で取得した Ticker を使ってチャートを描画する
スポンサーリンク
目次
パッケージのインストール
ローソク足を描画するために必要となる「matplotlib.finance」ですが、
現在は「mpl_finance」として分離しているようで、しかも PyCharm からパッケージ検索できなかったので pip で手動インストールしました。
地味にはまったぜ。。
PyCharm の Terminal から下記のコマンドを実行します。
python -m pip install git+https://github.com/matplotlib/mpl_finance
画面の修正
また、一つボタンを追加します。(ついでに前回のボタンキャプションも変えました)
<div class="entry_title">
<div class="pull_left">ティッカー情報</div>
<div class="pull_right">
<input type="button" value="価格チャート" />
<input type="button" value="ローソク足" />
<input type="button" value="更新" />
<input type="button" value="更新開始" />
<input type="button" value="更新停止" />
</div>
</div>
プログラムの修正
Cryptowatch からデータを取得するメソッドを追加
BfApi.py
クラスのフィールドにURLを追加
def __init__(self, access_key="APIキー", secret_key="シークレットキー"):
self.access_key = access_key
self.secret_key = secret_key
self.api_url = "https://api.bitflyer.jp"
# Cryptowatchから BTCFX/JPYのデータを取得するURL
self.ohlc_url = "https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc"
self.pb_config = PNConfiguration()
self.pb_config.subscribe_key = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f"
self.pb_config.ssl = False
self.pub_nub = PubNubTornado(self.pb_config)
self.listener = None
新規メソッド追加
def get_ohlc(self, start, end, span=60):
logging.info(self.parse_to_unix_time(start))
logging.info(self.parse_to_unix_time(end))
query = {
'periods': span,
'before': self.parse_to_unix_time(end),
'after': self.parse_to_unix_time(start)
}
data = requests.get(self.ohlcc_url, params=query).json()["result"][str(span)]
df = pandas.DataFrame(data)
return df
def parse_to_unix_time(self, date_time):
"""
日時をUNIXタイムスタンプに変換
:param date_time:
:return:
"""
return int(time.mktime(date_time.timetuple()))データ取得処理の追加
BfTool.py
class GetOhlc(RequestHandler):
"""
OHLC情報を取得
"""
def initialize(self):
logging.info("GetOhlc [initialize]")
def post(self):
logging.info("GetOhlc [post]")
api = BfApi()
# 過去1時間のデータを取得
end = datetime.now()
start = end - timedelta(hours=1)
df = api.get_ohlc(start=start, end=end, span=60)
# X軸に表示するための時間配列を生成
dates = [start + timedelta(minutes=mi) for mi in range(60)]
# データをまとめる
data = zip(mdates.date2num(dates), df[1], df[2], df[3], df[4])
# チャートの描画
ax = plt.subplot()
# x軸の単位を指定(15分間隔で表示)
ax.xaxis.set_major_locator(mdates.MinuteLocator([0, 15, 30, 45]))
# x軸の表示を指定(時:分)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
# mpl_financeのメソッドを仕様(描画幅やチャートの色などを指定。デフォルトは赤黒)
candlestick_ohlc(ax, data, width=(1/24/60)*0.7, colorup='g', colordown='r')
# チャート上部のテキスト
plt.title('BTC / JPY by Cryptowatch API')
# チャートをpng形式で保存
plt.savefig('price.png')
# チャートを描画
plt.show()
logging.info(df)URLマッピングの追加
BfTool.py
app = tornado.web.Application([
(r"/", MainHandler),
(r"/ws", SendWebSocket),
(r"/balance", GetBalanceHandler),
(r"/execution", GetExecutionHandler),
(r"/childOrder", GetChildOrderHandler),
(r"/sendOrder", SendChildOrderHandler),
(r"/cancelOrder", CancelChildOrderHandler),
(r"/sendTicker", SendTicker),
(r"/startTicker", StartTicker),
(r"/stopTicker", StopTicker),
(r"/sendLine", SendLine),
(r"/getTicker", GetTicker),
(r"/getOhlc", GetOhlc)
],
template_path=os.path.join(os.getcwd(), "templates"),
static_path=os.path.join(os.getcwd(), "static"),
js_path=os.path.join(os.getcwd(), "js"),
)起動してみる
無事に表示されました。
まとめ
目標としてはやっぱり自動取引ツールの作成なんですが、なかなか進まないですね。笑
次回は移動平均線でも描きたいと思ってます。
ではでは。
ディスカッション
コメント一覧
まだ、コメントがありません