仮想通貨の価格を取得

2021年4月22日

Pythonで仮想通貨の価格を取得したい人向けの記事になります。自作したコードを公開しますので、GoogleColabにコピペしてそのまま実行できます。

コード

コード全体になります。コードのみで良い方はGoogleColabにコピペして実行することで、仮想通貨の価格を取得し、ファイルに出力できます。パラメータのみを変更して、複数の値を取得することも可能です。

# bitmexのAPIを利用するため、ライブラリをインストール
!pip install ccxt
# coding:utf-8
import ccxt
import pandas as pd
from datetime import datetime, timedelta
import pytz

# ファイルの保存先を指定
file_path = './vc_data.csv'

# 欲しいデータの数
data_volume = 1000

# 取得データの種類と期間、数を指定
vckind = 'BTC/USD'
vcduration = '1d' #'1h','5m','1m'

def get_virtual_currency(file_path,data_volume,vckind,vcduration):
  bitmex = ccxt.bitmex()

  # bitmexの現在の時間を取得
  now_time = bitmex.fetch_ticker(vckind)['timestamp']

  # 取得データ数を計算
  from_time_difference = 0
  if(vcduration == '1d'):
    from_time_difference = 24 * 3600 * data_volume
  elif(vcduration == '1h'):
    from_time_difference = 3600 * data_volume
  elif(vcduration == '5m'):
    from_time_difference = 60 * 5 * data_volume
  elif(vcduration == '1m'):
    from_time_difference = 60 * 1 * data_volume
  
  # 取得したいデータ時刻を指定。ミリ秒のため1000倍。
  from_time = now_time - from_time_difference * 1000 

  # データを取得
  candles = bitmex.fetch_ohlcv(vckind, timeframe = vcduration, limit=1000,since = from_time)

  # データにカラム名を付けて整形(unixtime,open,high,low,close,volume)
  res = pd.DataFrame(None)
  r = pd.DataFrame(candles)
  res['time'] = r[0].apply(lambda d:datetime.fromtimestamp(int(d/1000)))
  res['time'] = res['time'].apply(lambda d:pytz.utc.localize(d).astimezone(pytz.timezone("Asia/Tokyo")))
  res['time'] = res['time'].apply(lambda d:d.strftime('%Y/%m/%d %H:%M:%S'))
  res['open'],res['high'],res['low'],res['close'],res['volume'] = r[1],r[2],r[3],r[4],r[5]

  # 整形データをcsvで保存(index情報は不要であるめ除外)
  res.to_csv(file_path,index=0)
  res = pd.DataFrame(None)
  r = pd.DataFrame(None)

# main
# 仮想通過のデータを取得してfile_pathに保存
get_virtual_currency(file_path,data_volume,vckind,vcduration)

# 保存データを読み込みプリント
data = pd.read_csv(file_path)
print(data)

コードの使用方法

9行目から15行目で、取得データのパラメータを指定しています。

このパラメータを変更することで、各種仮想通貨の価格を現在値まで得ることができます。

  • file_path: 取得データのcsvの保存先(Google Driveのパスも可能)
  • data_volume: 取得するデータの行数
  • vckind: 取得するデータの種類
  • vcduration: 取得するデータの間隔

このパラメータを引数に55行目で実行するこで 、仮想通貨のデータを取得して、ファイルが出力できます。

get_virtual_currency(file_path,data_volume,vckind,vcduration)

取得可能なデータを全て取得

自動取引でAIを構築するにあたり、データの種類が多い方が良いと思います。自動で取得可能なデータを取得しちゃいましょう。但し、高い頻度でリクエストをするとDDOS攻撃とみなされてエラーとなります。そのため、定期的な間隔でリクエストするようにしています。

import time
# パラメータをまとめて設定
data_volume = 1000
vckind = ['BTC/USD', 'ETH/USD' ,'XRP/USD']
vcduration = ['1d','1h','5m','1m']

# 各パラメータに基くデータ取得
for kind in vckind:
  for duration in vcduration:
    file_path = './vc_data'+'_'+kind.replace('/','_')+'_'+duration.replace('/','_')+'.csv'
    get_virtual_currency(file_path,data_volume,kind,duration)
    # 保存データの読み込み
    data = pd.read_csv(file_path)
    print(file_path)
    print(data)
    
    # DDOS攻撃とみなされないようスリープ
    time.sleep(1)
  time.sleep(10)

終わりに

これで仮想通過のデータを取得することができます。このデータを元にテクニカル分析や機械学習を進めていきたいと思います。