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

2021.09.23
2024.03.24
仮想通貨
CryptowatchPythonイーサリアムビットコイン

はじめに

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

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

Cryptowatchとは

Cryptowatchとは、複数の仮想通貨取引所のチャートをまとめてみれるサービスになります。APIも提供されていて、無料でも制限がありますが利用可能です。

24時間ごとに10クレジットが付与され、APIごとに使用するクレジットが決まっています。例えば、今回利用するOHLCデータの取得では0.015クレジット消費します。

APIを叩くごとに、レスポンスに以下のような使用クレジットと残りクレジットがわかるようになっています。

1{
2  "allowance": {
3    "cost": 0.003,
4    "remaining": 9.572,
5    "account": "8b095566-51e7-475b-bdf3-4bdb11d56fc1"
6  }
7}

OHLCとは

OHLCとは、Open-High-Low-Closeの略であり、始値、高値、安値、終値を表します。

今回取得するデータは、この始値、高値、安値、終値になります。

OHLCを取得するAPI

Cryptowatchで使えるAPIはいくつかありますが、OHLCを取得するAPIのみ紹介します。

https://docs.cryptowat.ch/rest-api/

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

1https://api.cryptowat.ch/markets/:exchange/:pair/ohlc
  • exchange: 取引所
  • pair: 通貨のペア

パラメータは以下の3つを設定できます。

  • before: この時間より前を取得(Unix時間)
  • after: この時間より後を取得(Unix時間)
  • periods: データの間隔

取得できるデータは、以下の順の値が指定したperiodsをキーとして(1分なら"60")返ってきます。

1[
2  CloseTime,
3  OpenPrice,
4  HighPrice,
5  LowPrice,
6  ClosePrice,
7  Volume,
8  QuoteVolume
9]

具体例

bitFlyerでのビットコイン/円の1時間足を2021/09/16 00:00:00から現在時刻まで

1https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=3600&after=1631718000

bitFlyerでのイーサリアム/円の1日足を2021/04/01 00:00:00から現在時刻まで

1https://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を利用しています。

1import requests
2import pandas as pd
3
4btc_url = "https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc"
5eth_url = "https://api.cryptowat.ch/markets/bitflyer/ethjpy/ohlc"
6
7hour = "?periods=3600&after=1631718000"
8day = "?periods=86400&after=1617202800"
9
10df_columns = [
11    "CloseTime",
12    "OpenPrice",
13    "HighPrice",
14    "LowPrice",
15    "ClosePrice",
16    "Volume",
17    "QuoteVolume"
18]
19
20
21# btc
22
23# hour
24res = requests.get(btc_url+hour).json()
25df = pd.DataFrame(res['result']['3600'], columns=df_columns)
26df.to_csv('./btnjpy_hour.csv')
27
28# day
29res = requests.get(btc_url+day).json()
30df = pd.DataFrame(res['result']['86400'], columns=df_columns)
31df.to_csv('./btnjpy_day.csv')
32
33
34# eth
35
36# hour
37res = requests.get(eth_url+hour).json()
38df = pd.DataFrame(res['result']['3600'], columns=df_columns)
39df.to_csv('./ethjpy_hour.csv')
40
41# day
42res = requests.get(eth_url+day).json()
43df = pd.DataFrame(res['result']['86400'], columns=df_columns)
44df.to_csv('./ethjpy_day.csv')

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee