cryptowatchからのOHLCV取得は、Rest APIを使用するためHTTP通信(requests)を行う必要があります。
requestsがインストールされていない場合は、以下のようにpipを使用してインストールしてください。他にも、numpy、pandasも計算や取得したデータ整形に使用しますのでなければインストールしてください。
$ pip install requests $ pip install numpy $ pip install pandas
こちらのコードを使えば、cryptowatchから取得する時間範囲を指定して取得するためcryptowatchの呼び出し制限に引っかかりにくくなります。
また、pandasでの整形表示のほか、cryptowatchでの取得形式は[1541674020, 756705, 757077, 756639, 756969, 211.58610546, 160138021.02853683]という感じで、足ごとにTIME、OPEN、HIGH、LOW、CLOSE、VOLUMEの情報が取得できますが、移動平均線MAなどを計算したい場合にはCLOSEのみのリストが欲しい時がありますので、それに合わせて分解転置してリスト形式で取得するようにもしました。
urlを変更することでbitflyer以外の取引所のOHLCVを取得することができます。
設定値(初期設定は1分足の最新時刻から10分間)を適宜変更して、以下のコードをコピペして実行してください。
import requests import time import numpy as np import pandas as pd from datetime import datetime, timedelta import json # 設定値 #-------- period = 60 # 取得するローソク足の時間指定(秒) term = 10 # 取得するOHLCVデータ期間(分) def getOHLCV(periods,getterm): url = 'https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc' unixTime = lambda y,m,d,h,min: int(time.mktime(datetime(y,m,d,h,min).timetuple())) # 現在時刻 now = datetime.now() + timedelta(seconds=periods) y,m,d,h,min = now.year, now.month, now.day, now.hour, now.minute # 取得する差分時刻 at = datetime.now() - timedelta(minutes=getterm) ay,am,ad,ah,amin = at.year, at.month, at.day, at.hour, at.minute query = { 'periods':periods, 'before':unixTime(y,m,d,h,min), 'after':unixTime(ay,am,ad,ah,amin), } res = json.loads(requests.get(url,params=query).text) result = res["result"][str(periods)] return result if __name__ == "__main__": # cryptowatchからOHLCV情報を取得 res_ohlcv = getOHLCV(period,term) print(res_ohlcv) # Pandasで整形 #--------------------------------------- timestamp,open,high,low,close,volume = [],[],[],[],[],[] for i in res_ohlcv: timestamp.append(i[0]) open.append(i[1]) high.append(i[2]) low.append(i[3]) close.append(i[4]) volume.append(i[5]) df = pd.DataFrame({'TIME':timestamp,'OPEN':open, 'HIGH':high, 'LOW':low, 'CLOSE':close, 'VOLUME':volume}) df.set_index('TIME',inplace = True) # TIMEをindexに指定 print(df) # List形式でO/H/L/C/Vを個別分解して取得 #--------------------------------------- ohlcv_ary = np.asarray(res_ohlcv) # Numpy で行列取得 ohlcv_aryT = ohlcv_ary.T # 転置して各要素に分解 # OHLCVをそれぞれ個別に取得 list_open = ohlcv_aryT[1] # OPEN list_high = ohlcv_aryT[2] # HIGH list_low = ohlcv_aryT[3] # LOW list_close = ohlcv_aryT[4] # CLOSE list_volume = ohlcv_aryT[5] # VOLUME print("OPEN :",list_open) print("HIGH :",list_high) print("LOW :",list_low) print("CLOSE :",list_close) print("VOLUME:",list_volume)
実行すると、以下のようなに表示されるかと思います。
[[1541674020, 756705, 757077, 756639, 756969, 211.58610546, 160138021.02853683], [1541674080, 756979, 756994, 756729, 756774, 171.47014223, 129776263.95356181], [1541674140, 756768, 756831, 756641, 756782, 76.86325195, 58166012.75318729], [1541674200, 756783, 757043, 756783, 757043, 93.75858208, 70967235.82320642], [1541674260, 757044, 757510, 756857, 757304, 171.69064452, 129990604.10756028], [1541674320, 757304, 757600, 756513, 756949, 239.01402182, 180969337.1874491], [1541674380, 756934, 757066, 756600, 756700, 228.42929356, 172862703.28737897], [1541674440, 756700, 756788, 756608, 756761, 93.28746608, 70592772.91406853], [1541674500, 756744, 756817, 756211, 756234, 121.75317791, 92115951.69996502], [1541674560, 756189, 756600, 756076, 756513, 201.34018067, 152290300.00508207], [1541674620, 756541, 756570, 756399, 756570, 94.41838611, 71425112.22481966]] CLOSE HIGH LOW OPEN VOLUME TIME 1541674020 756969 757077 756639 756705 211.586105 1541674080 756774 756994 756729 756979 171.470142 1541674140 756782 756831 756641 756768 76.863252 1541674200 757043 757043 756783 756783 93.758582 1541674260 757304 757510 756857 757044 171.690645 1541674320 756949 757600 756513 757304 239.014022 1541674380 756700 757066 756600 756934 228.429294 1541674440 756761 756788 756608 756700 93.287466 1541674500 756234 756817 756211 756744 121.753178 1541674560 756513 756600 756076 756189 201.340181 1541674620 756570 756570 756399 756541 94.418386 OPEN : [756705. 756979. 756768. 756783. 757044. 757304. 756934. 756700. 756744. 756189. 756541.] HIGH : [757077. 756994. 756831. 757043. 757510. 757600. 757066. 756788. 756817. 756600. 756570.] LOW : [756639. 756729. 756641. 756783. 756857. 756513. 756600. 756608. 756211. 756076. 756399.] CLOSE : [756969. 756774. 756782. 757043. 757304. 756949. 756700. 756761. 756234. 756513. 756570.] VOLUME: [211.58610546 171.47014223 76.86325195 93.75858208 171.69064452 239.01402182 228.42929356 93.28746608 121.75317791 201.34018067 94.41838611]
getOHLCVのurlを変更することで各取引所に対応することができます。
■bitflyerFX https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc ■bitflyer現物 https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc ■BITMEX https://api.cryptowat.ch/markets/bitmex/btcusd-perpetual-futures/ohlc ■Quoine Liguid https://api.cryptowat.ch/markets/quoine/btcjpy/ohlc ■Bitfinex https://api.cryptowat.ch/markets/bitfinex/btcusd/ohlc ※以下からcryptowatchから取得できる取引所や通貨のurlを探すことができます。 https://api.cryptowat.ch/pairs/btc