この記事のメリット
取引開始時まで遡って収集することができる。
Bitbank は金融庁により暗号資産交換業者として登録されているためホワイトな取引を行うことが可能。
暗号資産交換業者登録一覧
注意点
この記事は投資・投機を推奨するものではありません。
ご自身でリスク等をしっかりと確認しご自身の判断で実行するようにお願いいたします。
ライブラリインポート
Python3
import time
import json
import requests
import numpy as np
import pandas as pd
from datetime import datetime, date, timedelta
通貨ペアと期間指定
Python3
headers = {'Content-Type': 'application/json'}
api_url_base = 'https://public.bitbank.cc'
pair = 'xym_jpy'
period = '1min'
# 通貨ペアの例 pair
#btc_jpy, xrp_jpy, xrp_btc, ltc_jpy,
#ltc_btc, eth_jpy, eth_btc, mona_jpy,
#mona_btc, bcc_jpy, bcc_btc, xlm_jpy, xlm_btc
# 期間の例 period
#1min, 5min, 15min, 30min, 1hour
開始日を設定して収集
Python3
df_xym = pd.DataFrame([])
s = 0
n=datetime(year=2021, month=10, day=5) + timedelta(days=s)
def api_ohlcv():
api_url = '{0}/{1}/candlestick/{2}/{3}'.format(api_url_base, pair, period, timestamp)
response = requests.get(api_url, headers=headers)
if response.status_code == 200:
ohlcv = json.loads(response.content.decode('utf-8'))['data']['candlestick'][0]['ohlcv']
return ohlcv
else:
return None
# 日本時間の AM 9:00 前に実行しエラーが出た場合には下記の timedelta(days=1) を timedelta(days=2) に変更してください。
while (n<=(datetime.today() - timedelta(days=1))):
n=datetime(year=2021, month=10, day=5) + timedelta(days=s)
timestamp = "{0:%Y%m%d}".format(n)
ohlcv = api_ohlcv()
open, high, low, close, volume, timestamp = [],[],[],[],[],[]
for i in ohlcv:
open.append(i[0])
high.append(i[1])
low.append(i[2])
close.append(i[3])
volume.append(i[4])
time_str = str(i[5])
timestamp.append(datetime.fromtimestamp(int(time_str[:10])).strftime('%Y/%m/%d %H:%M:%S'))
date_time_index = pd.to_datetime(timestamp) # convert to DateTimeIndex type
df = pd.DataFrame({'Open': open, 'High': high, 'Low': low, 'Close': close, 'Volume': volume}, index=date_time_index)
df_xym = pd.concat([df_xym, df], ignore_index=False)
s += 1
カラム名変更、index を datetime に、float 型に変更
Python3
df_xym = df_xym.reset_index()
df_xym.columns = ['Time','Open','High','Low','Close','Volume']
df_xym.set_index('Time', inplace=True)
df_xym = df_xym.astype(float)
df_xym
# df へコピーする場合
df_xym = df_xym.reset_index()
df_xym.columns = ['Time','Open','High','Low','Close','Volume']
df_xym.set_index('Time', inplace=True)
df_xym = df_xym.astype(float)
df = df_xym.copy(deep=False)
df
参考文献