【仮想通貨の自動売買を目指して】過去チャート取得

はじめに

仮想通貨の自動売買に向けて、まずはとにかくデータを集めます。

今回は過去のチャートを取得し、過去データでのシミュレーションや機械学習モデルの作成などで活用できるようにしたいと思います。

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
Our REST API provides real-time market data for thousands of markets on 23 exchanges. You can use it to fetch last price, 24 hour market statistics, recent trad...

エンドポイントの形式は以下になります。

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')

参考

タイトルとURLをコピーしました