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


