noteのタイトル画像

[python] bitflyer ohlcv取得

目次
・cryptowat.chからデータ取得
・pythonで記述
・動作状況

●cryptowat.chからデータ取得

ビットコイン界隈の方々で知らない人はおそらく居ない「cryptowat.ch」からデータを取得します。

大変膨大な取引所のリアルタイムOHLCVデータ等が無料で手に入るとあって、使用している人も結構多いのではないでしょうか。

●pythonで記述

さっそくコードです。

#===============================================
# 外部モジュール
#===============================================
import urllib3
import json
import datetime
import time

# InsecureRequestWarning:のワーニングた毎回出力されるので、cryptowat.chのワーニングは出さないように抑制する。
# 詳細は https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
urllib3.disable_warnings()

#===============================================
# 常数
#===============================================
# OHLCV足の周期
PERIOD = 60  # 秒
# OHLCV足の取得数
SIZE = 10  # 個
# sleep時間
SLEEP_T = 1

# httpオブジェクト取得
HTTP = urllib3.PoolManager()

# ==================================
# getOHLCV
#   OHLCVデータ取得関数
# params:
#   http: HTTPオブジェクト
#   start: 開始時間(UNIXTIME)
#   period: 足の期間(秒)
# return:
#   resp: OHLCVデータ
# ==================================
def getOHLCV(http, start, period):
    # cryptowat.chのURLを設定
    url = 'https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc?after=' + str(start) + '&periods=' + str(period)
    # レスポンス取得
    resp = json.loads(http.request('GET', url).data.decode('utf-8'))['result'][str(period)]
    # 戻り値
    return resp

# おまじない
if __name__ == '__main__':
    # 1秒待ってのループ処理
    while True:
        try:
            # start時間(UNIXTIME)を取得
            start = int(time.time()) - PERIOD * SIZE
            # OHLCV取得
            resp = getOHLCV(HTTP, start, PERIOD)
            # 表示
            print('----------------------------------------------------------------------')
            print('date       time    , open  , high  , low   , close , volume           ')
            print('----------------------------------------------------------------------')
            for r in resp:
                print(str(datetime.datetime.fromtimestamp(r[0])) + ", " + str(r[1]) + ", " + str(r[2]) + ", " + str(r[3]) + ", " + str(r[4]) + ", " + str(r[5]) + ", " + str(r[6]))
        except Exception as e:
            print("exception: ", e.args)
        # sleep
        time.sleep(SLEEP_T)

このコードで使用している取引所は
・BitFlyer FX
です。

https://api.cryptowat.ch/markets/bitflyer/btcfxjpy

を指定しています。

引数としては、
・after : 取得開始日時(UNIXTIME)
・period : 足間隔(秒)
です。

上記の例では1分足を 現在時刻から10個分の過去足から取得しています。

●動作状況

コードを「get_ohlcv.py」というファイルに格納し、実行は

python3 get_ohlcv.py

で実行開始です。

----------------------------------------------------------------------
date       time    , open  , high  , low   , close , volume
----------------------------------------------------------------------
2018-07-15 19:52:00, 727031, 727300, 724895, 726302, 704.2473, 511388770
2018-07-15 19:53:00, 726232, 727000, 726011, 726490, 333.0071, 241912800
2018-07-15 19:54:00, 726490, 727000, 726400, 727000, 324.58936, 235892380
2018-07-15 19:55:00, 726950, 727000, 726170, 726334, 286.39075, 208086930
2018-07-15 19:56:00, 726330, 726498, 726000, 726267, 180.42708, 131027770
2018-07-15 19:57:00, 726208, 726589, 726107, 726250, 252.79616, 183608200
2018-07-15 19:58:00, 726193, 726249, 725650, 725910, 267.87173, 194448460
2018-07-15 19:59:00, 725926, 726253, 725766, 725892, 231.88284, 168347820
2018-07-15 20:00:00, 725873, 725962, 725000, 725647, 307.5684, 223134580
2018-07-15 20:01:00, 725614, 725648, 725233, 725444, 188.50922, 136760030
2018-07-15 20:02:00, 725459, 725614, 725365, 725381, 109.28505, 79285700
2018-07-15 20:03:00, 725400, 725483, 725278, 725483, 54.665718, 39652804
----------------------------------------------------------------------
date       time    , open  , high  , low   , close , volume
----------------------------------------------------------------------
2018-07-15 19:52:00, 727031, 727300, 724895, 726302, 704.2473, 511388770
2018-07-15 19:53:00, 726232, 727000, 726011, 726490, 333.0071, 241912800
2018-07-15 19:54:00, 726490, 727000, 726400, 727000, 324.58936, 235892380
2018-07-15 19:55:00, 726950, 727000, 726170, 726334, 286.39075, 208086930
2018-07-15 19:56:00, 726330, 726498, 726000, 726267, 180.42708, 131027770
2018-07-15 19:57:00, 726208, 726589, 726107, 726250, 252.79616, 183608200
2018-07-15 19:58:00, 726193, 726249, 725650, 725910, 267.87173, 194448460
2018-07-15 19:59:00, 725926, 726253, 725766, 725892, 231.88284, 168347820
2018-07-15 20:00:00, 725873, 725962, 725000, 725647, 307.5684, 223134580
2018-07-15 20:01:00, 725614, 725648, 725233, 725444, 188.50922, 136760030
2018-07-15 20:02:00, 725459, 725614, 725365, 725381, 109.28505, 79285700
2018-07-15 20:03:00, 725400, 725483, 725278, 725483, 54.665718, 39652804

のような表示が出ればOKです。


ソフトウェア・エンジニアを40年以上やってます。 「Botを作りたいけど敷居が高い」と思われている方にも「わかる」「できる」を感じてもらえるように頑張ります。 よろしくお願い致します。