[Python numpy Cryptowatch] BTC-FX の OHLCV データの取得
環境
コード
# -*- Coding: utf-8 -*-
import requests
import json
import numpy as np
import talib as ta
from datetime import datetime
# Main Logics
if __name__ == "__main__":
#ローソク足の時間を指定
periods = ["60", "300"] # 60sec, 5min
#クエリパラメータを指定
query = {"periods": ','.join(periods), "before": "", "after": ""}
#ローソク足取得
rspJson = json.loads(requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc", params=query).text)
ohlcvs = rspJson["result"]
for period in periods:
ohlcv_data = ohlcvs[period]
ohlcv_ary = np.asarray(ohlcv_data) # Numpy で行列取得
ohlcv_aryT = ohlcv_ary.T # 転置して各要素に分解
# OHLCV を取得
ts = ohlcv_aryT[0] # Timestamp
op = ohlcv_aryT[1] # Open
hi = ohlcv_aryT[2] # High
lo = ohlcv_aryT[3] # Low
cl = ohlcv_aryT[4] # Close
vol = ohlcv_aryT[5] # Volume
# 各要素を出力
for i in range(0, len(ts)):
print("{0},{1},{2},{3},{4},{5}".format(datetime.fromtimestamp(ts[i]), op[i], hi[i], lo[i], cl[i], vol[i]))
実行結果
一部を抜粋。API を叩くと、古い順にデータが返ってくるので、そのまま出力するとこんな感じ。前半が1分足のデータ、後半が5分足のデータ。
2018-06-28 03:15:00,691417.0,691664.0,691166.0,691288.0,77.20204
2018-06-28 03:16:00,691288.0,691638.0,691150.0,691217.0,78.61124
2018-06-28 03:17:00,691217.0,691430.0,691121.0,691121.0,275.3402
2018-06-28 03:18:00,691121.0,691599.0,690222.0,690560.0,259.07922
2018-06-28 03:19:00,690590.0,691388.0,690522.0,691164.0,122.231026
...
2018-06-26 18:00:00,699366.0,699799.0,698700.0,699549.0,427.6545
2018-06-26 18:05:00,699549.0,699573.0,698119.0,698292.0,524.62415
2018-06-26 18:10:00,698258.0,698799.0,698120.0,698598.0,490.64014
2018-06-26 18:15:00,698609.0,699200.0,698465.0,698984.0,370.0118
2018-06-26 18:20:00,699019.0,699205.0,698323.0,698430.0,310.3954
...
解説
ざっくりとした全体の流れ
・"どの足(1分足、5分足、1時間足、日足、etc)" で、"いつ" から "いつ" までのデータが欲しいかを指定して、OHLCV データを Cryptowatch の API から取得
・指定した足のデータごとに処理を実施
- 取得した OHLCV データを Numpy で扱えるようにして、T メソッドで転置(Open, High, ... などの各要素に分解)
- 取得したデータを出力
Cryptowatch GET OHLC について
データの格納形式はこちら。
指定可能な時間足はこちら、1分足が最小、1週足が最大。
Cryptowatch の API(GET OHLC) は古い順にデータが格納されているので、逆順(新しい順)にしたいなら、どこかで slice なり reverse なり reversed なりする必要がある。
#ローソク足取得
rspJson = json.loads(requests.get("https://api.cryptowat.ch/markets/bitflyer/btcfxjpy/ohlc", params=query).text)
ohlcvs = rspJson["result"]
for period in periods:
ohlcv_data = ohlcvs[period][::-1] # 逆順
また、timestamp は UNIX Timestamp なので、出力する際には datetime などで変換する方が良いだろう。
datetime.fromtimestamp(ts[i])
Cryptowatch の API ドキュメントはこちら
Numpy による各要素の抽出
[Timestamp, Open, High, Low, Close, Volume] の形式で1つのデータになっている(つまり、ある時間足におけるデータで1セットとなっている)ため、TA-lib などで取り回しやすいように各要素に分解しておきたい。
T メソッドで行列の転置が可能なので、それを用いる。
ohlcv_ary = np.asarray(ohlcv_data) # Numpy で行列取得
ohlcv_aryT = ohlcv_ary.T # 転置して各要素に分解
# OHLCV を取得
ts = ohlcv_aryT[0]
op = ohlcv_aryT[1]
hi = ohlcv_aryT[2]
lo = ohlcv_aryT[3]
cl = ohlcv_aryT[4]
vol = ohlcv_aryT[5]
おわりに
有料(¥100)にしてるけど、これで内容は全部です。募金してくれる人がいれば、ジュース代としていただけると嬉しい。Pine スクリプトは、インデントくずれが起きるようなので、コピペ時には注意してください。
マガジン
コメント用note(未購入者向け)
干し芋
ここから先は
¥ 100
サポート頂けると励みになります BTC,BCH: 39kcicufyycWVf8gcGxgsFn2B8Nd7reNUA LTC: LUFGHgdx1qqashDw4WxDcSYQPzd9w9f3iL MONA: MJXExiB7T7FFXKYf9SLqykrtGYDFn3gnaM