LoginSignup
6
5

More than 1 year has passed since last update.

GMOコインから取引データをダウンロードする

Last updated at Posted at 2021-05-17

はじめに

目的

仮想通貨の取引所 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.")

おわりに

ダウンロードしたデータの集計コードはこちら

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5