はじめに
仮想通貨の自動売買に向けて、まずはとにかくデータを集めます。
今回は過去のチャートを取得し、過去データでのシミュレーションや機械学習モデルの作成などで活用できるようにしたいと思います。
Cryptowatchとは
Cryptowatchとは、複数の仮想通貨取引所のチャートをまとめてみれるサービスになります。APIも提供されていて、無料でも制限がありますが利用可能です。
24時間ごとに10クレジットが付与され、APIごとに使用するクレジットが決まっています。例えば、今回利用するOHLCデータの取得では0.015クレジット消費します。
APIを叩くごとに、レスポンスに以下のような使用クレジットと残りクレジットがわかるようになっています。
{
"allowance": {
"cost": 0.003,
"remaining": 9.572,
"account": "8b095566-51e7-475b-bdf3-4bdb11d56fc1"
}
}
OHLCとは
OHLCとは、Open-High-Low-Closeの略であり、始値、高値、安値、終値を表します。
今回取得するデータは、この始値、高値、安値、終値になります。
OHLCを取得するAPI
Cryptowatchで使えるAPIはいくつかありますが、OHLCを取得するAPIのみ紹介します。
Getting Started - Market Data REST API
OurRESTAPIprovidesreal-timemarketdataforthousandsofmarketson23exchanges.Youcanuseittofetchlastprice,24hourmarketstatistics,recenttrades,orderbooks,andcandlestic...
エンドポイントの形式は以下になります。
https://api.cryptowat.ch/markets/:exchange/:pair/ohlc
exchange
: 取引所pair
: 通貨のペア
パラメータは以下の3つを設定できます。
before
: この時間より前を取得(Unix時間)after
: この時間より後を取得(Unix時間)periods
: データの間隔
取得できるデータは、以下の順の値が指定したperiods
をキーとして(1分なら"60")返ってきます。
[
CloseTime,
OpenPrice,
HighPrice,
LowPrice,
ClosePrice,
Volume,
QuoteVolume
]
具体例
bitFlyerでのビットコイン/円の1時間足を2021/09/16 00:00:00から現在時刻まで
https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=3600&after=1631718000
bitFlyerでのイーサリアム/円の1日足を2021/04/01 00:00:00から現在時刻まで
https://api.cryptowat.ch/markets/bitflyer/ethjpy/ohlc?periods=86400&after=1617202800
Pythonでチャート取得とCSV保存
実際にPythonで以下の4つのデータを取得してCSVファイルとして保存してみます。
- bitFlyerでのビットコイン/円の1時間足を2021/09/16 00:00:00から現在時刻まで
- bitFlyerでのビットコイン/円の1日足を2021/04/01 00:00:00から現在時刻まで
- bitFlyerでのイーサリアム/円の1時間足を2021/09/16 00:00:00から現在時刻まで
- bitFlyerでのイーサリアム/円の1日足を2021/04/01 00:00:00から現在時刻まで
CSVファイルの作成はpandas
を利用しています。
import requests
import pandas as pd
btc_url = "https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc"
eth_url = "https://api.cryptowat.ch/markets/bitflyer/ethjpy/ohlc"
hour = "?periods=3600&after=1631718000"
day = "?periods=86400&after=1617202800"
df_columns = [
"CloseTime",
"OpenPrice",
"HighPrice",
"LowPrice",
"ClosePrice",
"Volume",
"QuoteVolume"
]
# btc
# hour
res = requests.get(btc_url+hour).json()
df = pd.DataFrame(res['result']['3600'], columns=df_columns)
df.to_csv('./btnjpy_hour.csv')
# day
res = requests.get(btc_url+day).json()
df = pd.DataFrame(res['result']['86400'], columns=df_columns)
df.to_csv('./btnjpy_day.csv')
# eth
# hour
res = requests.get(eth_url+hour).json()
df = pd.DataFrame(res['result']['3600'], columns=df_columns)
df.to_csv('./ethjpy_hour.csv')
# day
res = requests.get(eth_url+day).json()
df = pd.DataFrame(res['result']['86400'], columns=df_columns)
df.to_csv('./ethjpy_day.csv')