ビットコイン履歴データ-Pythonを使用して取引プラットフォームからデータを取得


関連政策の規定によると、国内のビットコイン取引は2017年9月末に閉鎖されるが、ここ数年、ビットコイン取引の歴史的相場データは、今後経済、金融、量子化取引戦略などの研究に用いる上で重大な価値がある可能性があるため、この文章は主にPythonを通じて取引プラットフォームが提供するAPIからデータを取得し、CSVファイルに保存して後日利用する方法について述べている.
本文の主な内容は以下の通りである.
  • ビットコイン、ライトコインの歴史相場データ
  • Pythonを利用してokcoinを取得する.cnビットコイン履歴データ
  • Pythonでhuobiを取得する.comビットコイン履歴データ
  • ビットコイン、ライトコインの歴史相場データ
    ビットコインやライトコイン、その他のいくつかのデジタル通貨の歴史的相場データはすでにcsv形式に取得され保存されており、データを使用する必要があるのはGitHubから直接ダウンロードして使用することができ、データ取得のソースコードはGitHubにも提供されており、データのソースを知りたい場合はソースコードを読むことができます.備考:以下のデータはネットワークに由来し、ソースコードが公開されていることを取得し、データの正確性を保証しないで、実際の状況に応じて使用してください.
    番号付け
    ラベル
    取引所
    データダウンロードアドレス
    1
    btc_cny
    okcoin
    daily_price_btc_cny.csv
    2
    ltc_cny
    okcoin
    daily_price_ltc_cny.csv
    3
    eth_cny
    okcoin
    daily_price_eth_cny.csv
    4
    etc_cny
    okcoin
    daily_price_etc_cny.csv
    5
    bcc_cny
    okcoin
    daily_price_bcc_cny.csv
    6
    btc_cny
    huobi
    daily_price_btc_cny.csv
    7
    ltc_cny
    huobi
    daily_price_ltc_cny.csv
    Pythonを利用してokcoinからcnビットコイン履歴データの取得
    okcoinが提供したAPIマニュアルを参照して、履歴相場データを取得することができます.履歴データを取得するには、主に2つのステップがあります.
  • 接続API取得データ
  • はpandasを用いるデータを処理し、csvとして保存するファイル以下は従okcoinである.cn取得データの詳細コード:
  • import http.client
    import json
    import pandas as pd
    
    REQUEST_URL = 'www.okcoin.cn'
    KLINE_TT_COLS = ['date', 'open', 'high', 'low', 'close', 'volume']
    
    
    def http_get(url, resource, params=''):
        conn = http.client.HTTPSConnection(url, timeout=10)
        conn.request("GET", resource + '?' + params)
        response = conn.getresponse()
        data = response.read().decode('utf-8')
        return json.loads(data)
    
    
    def ticker(symbol='', data_type='1day', since=''):
        ticker_resource = "/api/v1/kline.do"
        params = ''
        if symbol:
            params = 'symbol=%(symbol)s&type=%(type)s' % {'symbol': symbol, 'type': data_type}
        if since:
            params += '&since=%(since)s' % {'since': since}
        k_data = http_get(REQUEST_URL, ticker_resource, params)
        if len(k_data) == 0:
            raise ValueError('Can not obtain the data.')
        else:
            df = pd.DataFrame(k_data, columns=KLINE_TT_COLS)
            df['date'] = pd.to_datetime(df['date'], unit='ms')
        return df
    
    
    if __name__ == '__main__':
        # okcoin.cn bitcoin - cny since 2013-6-11 ~ now, daily price history
        daily_price_btc_cny = ticker('btc_cny')
        daily_price_btc_cny.to_csv('./data/okcoin/daily_price_btc_cny.csv')
        # okcoin.cn litecoin - cny since 2013-9-11 ~ now daily price history
        daily_price_ltc_cny = ticker('ltc_cny')
        daily_price_ltc_cny.to_csv('./data/okcoin/daily_price_ltc_cny.csv')
        # okcoin.cn eth - cny since 2017-5-31 ~ now daily price history
        daily_price_eth_cny = ticker('eth_cny')
        daily_price_ltc_cny.to_csv('./data/okcoin/daily_price_eth_cny.csv')
        # okcoin.cn etc - cny since 2017-7-16 ~ now daily price history
        daily_price_etc_cny = ticker('etc_cny')
        daily_price_etc_cny.to_csv('./data/okcoin/daily_price_etc_cny.csv')
        # okcoin.cn bcc - cny since 2017-7-16 ~ now daily price history
        daily_price_bcc_cny = ticker('etc_cny')
        daily_price_bcc_cny.to_csv('./data/okcoin/daily_price_bcc_cny.csv')
        # okcoin.cn bitcoin - cny since 2013-6-11 ~ now, hour price history
        hour_price_btc_cny = ticker(symbol='btc_cny', data_type='1hour')
        hour_price_btc_cny.to_csv('./data/okcoin/hour_price_btc_cny.csv')
        # okcoin.cn litecoin - cny since 2013-6-11 ~ now, hour price history
        hour_price_ltc_cny = ticker(symbol='ltc_cny', data_type='1hour')
        hour_price_ltc_cny.to_csv('./data/okcoin/hour_price_ltc_cny.csv')

    Pythonを利用してhuobiからcomビットコイン履歴データ取得
    従属者とcn取得履歴データはhuobi.comが提供するAPIマニュアル、詳細コードは以下の通りです.
    import http.client
    import json
    import pandas as pd
    
    REQUEST_URL = 'api.huobi.com'
    KLINE_TT_COLS = ['date', 'open', 'high', 'low', 'close', 'volume']
    
    
    def http_get(url, resource, params=''):
        conn = http.client.HTTPSConnection(url, timeout=10)
        conn.request("GET", resource + '?' + params)
        response = conn.getresponse()
        data = response.read().decode('utf-8')
        return json.loads(data)
    
    
    def ticker(symbol=''):
        ticker_resource = "/staticmarket/%(symbol)s_kline_100_json.js" % {'symbol': symbol}
        params = ''
        if symbol:
            params = 'length=2000'
        k_data = http_get(REQUEST_URL, ticker_resource, params)
        if len(k_data) == 0:
            raise ValueError('Can not obtain the data.')
        else:
            df = pd.DataFrame(k_data, columns=KLINE_TT_COLS)
            df['date'] = pd.to_datetime(df['date'], format="%Y%m%d%H%M%S%f")
        return df
    
    if __name__ == '__main__':
        # huobi.com bitcoin - cny since 2013-9-1 ~ now, daily price history
        daily_price_btc_cny = ticker('btc')
        daily_price_btc_cny.to_csv('./data/huobi/daily_price_btc_cny.csv')
        # huobi.com litecoin - cny since 2014-3-9 ~ now daily price history
        daily_price_ltc_cny = ticker('ltc')
        daily_price_ltc_cny.to_csv('./data/huobi/daily_price_ltc_cny.csv')

    参考資料
    Okcoin API Huobi API GitHub