はじめに
目的
仮想通貨の取引所 GMOコイン から、過去の先物取引データをダウンロードしたいと思います。
投稿の意図
他の多くの取引所ではRest APIを用いる事で、ユーザーが指定した形式で集計した取引データの生データを取得出来ます。
しかし、GMOコインでは予め集計された日毎のデータ、且つ、gzファイルに圧縮されたファイルが公開されてます。
私の様に「過去半年間の1分毎に集計された物が欲しい」となった場合、自分で日毎のデータを1つ1つダウンロードし、1分毎データに集計しなければなりません。
この様な問題を抱えているユーザーは他にも居るのではと思い、プログラムを公開する事としました。
先物取引データ - ダウンロードコード
start_datetimeとend_datetimeで、開始日/終了日を指定します。取引データをダウンロードしたい期間で置き換えてください。
下記コードの場合、4月~5月のデータがダウンロードされます。
URL の BTC_JPYを任意の通貨で置き換え可能です。
import os
import datetime
import urllib.request
import time
import traceback
import gzip
import codecs
def unzip(filename):
with gzip.open(filename) as f:
newname = filename.replace(".gz", "")
reader = codecs.getreader("utf-8")
contents = reader(f)
with open(newname, mode="w", encoding="utf-8", newline="\n") as newf:
newf.write(contents.read())
if __name__ == '__main__':
try:
start_datetime = datetime.datetime.strptime("2021-04-01 00:00:00", "%Y-%m-%d %H:%M:%S")
end_datetime = datetime.datetime.strptime("2021-05-01 00:00:00", "%Y-%m-%d %H:%M:%S")
while start_datetime != end_datetime:
print("start donwload :", start_datetime)
year = str(start_datetime.year)
month = str(start_datetime.strftime('%m'))
day = str(start_datetime.strftime('%d'))
filename = year + month + day + '_BTC_JPY.csv.gz'
url = 'https://api.coin.z.com/data/trades/BTC_JPY/{}/{}/{}'.format(year, month, filename)
# 日毎の価格データをダウンロード
urllib.request.urlretrieve(url, filename)
# 価格データを解凍する
unzip(filename)
# 解凍前のファイルを削除
os.remove(filename)
# 1日加算
start_datetime = start_datetime + datetime.timedelta(days=1)
except KeyboardInterrupt:
print("Stop with Keyboard Interrupt.")
except Exception as e:
print(traceback.format_exc())
finally:
print("All stopped.")
おわりに
ダウンロードしたデータの集計コードはこちら。