DEVGRU

プログラミングと競馬予想について書きます

bitbank から 約定履歴を取得する

bitbank の APIを眺めていたら、任意の日付から約定履歴を取得することができることに気づいた。 無限に見られるわけではないみたいだが、cyrptowatch よりも長い期間のOHLCが取得できそうなので頑張ってみた。

こんなスクリプト(batch.py)を書く。

#!usr/bin/env python

from datetime import date, datetime, timedelta
import requests

start = date(2018, 1, 1)
end = date(2018, 4, 11)

markets = [
    "btc_jpy",
    "xrp_jpy",
    "eth_btc",
    "ltc_btc",
    "mona_jpy",
    "mona_btc",
    "bcc_jpy",
    "bcc_btc",
]

DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S.%f'

for market in markets:
    start_format = (start + timedelta(hours=9)).strftime(DATETIME_FORMAT)
    end_format = (end + timedelta(days=1, hours=9)).strftime(DATETIME_FORMAT)
    print(f"DELETE from executions WHERE market = 'bitbank_{market}' AND '{start_format}' <= timestamp AND timestamp < '{end_format}';")

    day = start

    while day <= end:
        day_format = day.strftime('%Y%m%d')
        url = f'https://public.bitbank.cc/{market}/transactions/{day_format}'
        response = requests.get(url)
        while response.status_code != 200:
            response = requests.get(url)
        assert response.json()['success'] == 1

        data = [{'price': float(transaction['price']),
          'size': float(transaction['amount']),
          'timestamp': datetime.fromtimestamp(transaction['executed_at'] / 1000).strftime(DATETIME_FORMAT)
          } for transaction in response.json()['data']['transactions']]
        
        print('INSERT INTO executions (timestamp, market, price, size) VALUES' + \
              ', '.join(f"('{d['timestamp']}', 'bitbank_{market}', '{d['price']}', '{d['size']}')" for d in data) + ';')
        day += timedelta(days=1)

        sleep(1)
    print()

こんな感じで実行する。

pip install requests
python batch.py > batch.sql

PostgreSQLに突っ込むには、以下のコマンドを用いる(その前にテーブル作成が必要)。

psql -f /batch.sql

以下のスキーマで予めテーブルを作成しておく。

CREATE TABLE IF NOT EXISTS executions (
  id        SERIAL PRIMARY KEY,
  timestamp TIMESTAMP,
  market    CHARACTER VARYING,
  price     DOUBLE PRECISION,
  size      DOUBLE PRECISION
);
CREATE INDEX ON executions (timestamp, market);

これでPostgreSQLに一定期間分の約定履歴が入るので、ここからOHLCを作ることができる。

参考:

docs.bitbank.cc

独学プログラマー Python言語の基本から仕事のやり方まで

独学プログラマー Python言語の基本から仕事のやり方まで

  • 作者: コーリー・アルソフ,清水川貴之監訳,清水川貴之,新木雅也
  • 出版社/メーカー: 日経BP社
  • 発売日: 2018/02/24
  • メディア: 単行本
  • この商品を含むブログを見る

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-

Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-