こんにちは、hokkyokunです。
Cryptowatchが使えなくなってしまったので
KrakenのPublicAPIを叩いてヒストリカルデータ(過去データ)をとっていきたいと思います。
APIにはPrivateAPIとPublicAPIがあり、
PrivateAPIはkeyの取得が必要ですが、
Publicの場合は特段登録しなくても使えます。
価格データはPublicでも取得できるので
PublicAPIを叩いてみようと思います。
CryptowatchAPIが使えなくなった
CryptowatchのpublicAPIが使えなくなってます
以前は、
こんな感じの関数を使って仮想通貨のヒストリカルデータを取得していました。
import requests
def fetch_historical_data_from_CryptoWatch():
exchange="kraken" #取引所(kraken)
symbol="btcusd" #通貨ペア(ビットコイン/米ドル)
url= f"https://api.cryptowat.ch/markets/{exchange}/{symbol}/ohlc?periods=86400&after=0"
res = requests.get(url).json()
return res
この関数を使ってみます。
res=fetch_historical_data_from_CryptoWatch()
print(res)
うまくいきませんでした。
少なくともこのままではデータ取れません。
代替案としてKrakenという取引所のAPIを使ってデータ取得を試みてみます。
Krakenとは?
Krakenは何かchatGPTに聞いてみると以下のようなことを教えてくれました。
Krakenは、アメリカ合衆国に本拠を置く、世界的に知られる暗号資産(仮想通貨)取引所です。以下はKrakenについての概要です:
設立年と創業者:Krakenは2011年に設立されました。創業者はジェシー・パウエル(Jesse Powell)です。
本社の所在地:本社はカリフォルニア州サンフランシスコに位置しています。
提供サービス:Krakenはビットコインを含む多種多様な暗号資産の売買を提供しており、ユーザーは取引所で直接資産を取引することができます。また、マージン取引、先物取引、OTC(Over The Counter)取引などの高度な取引オプションも提供しています。
セキュリティ:Krakenは業界内でも特にセキュリティが高いと評価されています。2要素認証(2FA)、コールドストレージ(オフラインストレージ)、厳格な監査プロセスなど、多層のセキュリティ対策を講じています。
規制とコンプライアンス:Krakenは、米国を含む複数の国の法規制に準拠して運営されており、適切なライセンスと規制の下でサービスを提供しています。
ユーザーベースと利用可能地域:Krakenは全世界の多くの国々でサービスを提供しており、幅広い国際的なユーザーベースを持っています。
Krakenは、その使いやすさ、高いセキュリティ基準、多様な取引オプションを提供することで、初心者から経験豊富なトレーダーまで幅広く支持されている取引所の一つです。
セキュリティの高い大手の仮想通貨取引所みたいです。
APIが用意されており、
登録しなくても使えるPublicAPIもあります。
PublicAPIで通貨のデータが取得できるので、
こちらを使わせてもらいます。
ヒストリカルデータの取得
コード
Pythonコードです。
引数は
symbol=通貨ペアを指定
start_date=データの開始日(datetime型)
end_date=データの終了日(datetime型)
interval=データの間隔(指定しなければ1440分毎=1日毎)
import requests
import pandas as pd
from datetime import datetime
def fetch_historical_data(symbol, start_date, end_date, interval=1440):
"""
Kraken APIを使用して指定された通貨ペアのヒストリカルデータを取得
Args:
symbol (str): 取得したい通貨ペアのシンボル(例: 'XXBTZUSD')
start_date (datetime): データ取得の開始日時
end_date (datetime): データ取得の終了日時
interval (int, optional): データの間隔(分単位)。デフォルトは1440分(1日)。
Returns:
pandas.DataFrame: 指定された通貨ペアのヒストリカルデータを含むDataFrame。
"""
# Unixタイムスタンプに変換
start_timestamp = int(start_date.timestamp())
end_timestamp = int(end_date.timestamp())
# KrakenのOHLCエンドポイントURL
url = 'https://api.kraken.com/0/public/OHLC'
# データを格納するためのデータフレーム
df = pd.DataFrame()
while start_timestamp < end_timestamp:
# パラメータの設定
params = {
'pair': symbol,
'interval': interval,
'since': start_timestamp
}
# APIリクエストを実行
response = requests.get(url, params=params)
# レスポンスの確認
if response.status_code != 200:
raise Exception(f"API request failed with status code {response.status_code}")
# データの抽出
data = response.json()
# 結果を確認
if data['error']:
return df
# 取得したデータを追加
new_data = pd.DataFrame(data['result'][symbol], columns=[
'Time', 'Open', 'High', 'Low', 'Close', 'VWAP', 'Volume', 'Count'
])
new_data['Time'] = pd.to_datetime(new_data['Time'], unit='s')
df = pd.concat([df,new_data],ignore_index=True)
# 次のリクエストの開始タイムスタンプを更新
start_timestamp = int(data['result']['last'])
last = int(data['result']['last'])
if last <= start_timestamp:
break # 過去のデータが更新されない場合はループを終了
start_timestamp = last
# 取得したデータの最新タイムスタンプがend_dateを超えた場合、ループを終了
if df['Time'].max() > pd.Timestamp(end_date):
break
df=df[(df["Time"]>=start_date) & (df["Time"]<=end_date)]
return df
Pythonを短時間で使えるようにするにはスクールがお勧めです。
月額2980円となっており、正直この値段で質問ができるのはかなり魅力です。
月額型なので、費用もかなり抑えられます。
使用例
実際の使用例はこちらです。
ビットコイン/USドル=BTC-USDの2022年11月30日から2023年11月30日までで取得してみました。
通貨ペアの指定にコツがいります。(法則ある?)
主要通貨リストを後述していますので、参考にしてみてください。
#ビットコイン/USドル
symbol = 'XXBTZUSD'
start_date = datetime(2022, 11, 30)
end_date = datetime(2023, 11, 30)
historical_data = fetch_historical_data(symbol, start_date, end_date)
print(historical_data)
こんな感じでデータ取れました。
通貨ペアの指定方法
通貨ペアの指定方法が独特なので表にしました。
取得したい通貨ペアの「Symbol」を上記の関数の引数にして使ってみてください。
対ドル
通貨ペア略称 | 通貨ペア全名 | Symbol |
---|---|---|
BTC/USD | ビットコイン/米ドル | XXBTZUSD |
ETH/USD | イーサリアム/米ドル | XETHZUSD |
XRP/USD | リップル/米ドル | XXRPZUSD |
LTC/USD | ライトコイン/米ドル | XLTCZUSD |
BCH/USD | ビットコインキャッシュ/米ドル | BCHUSD |
EOS/USD | イオス/米ドル | EOSUSD |
XLM/USD | ステラルーメン/米ドル | XXLMZUSD |
ADA/USD | エイダコイン/米ドル | ADAUSD |
XTZ/USD | テゾス/米ドル | XTZUSD |
LINK/USD | チェーンリンク/米ドル | LINKUSD |
対日本円
通貨ペア略称 | 通貨ペア全名 | Symbol |
---|---|---|
BTC/JPY | ビットコイン/日本円 | XXBTZJPY |
ETH/JPY | イーサリアム/日本円 | XETHZJPY |
XRP/JPY | リップル/日本円 | XXRPZJPY |
LTC/JPY | ライトコイン/日本円 | XLTCZJPY |
BCH/JPY | ビットコインキャッシュ/日本円 | BCHJPY |
EOS/JPY | イオス/日本円 | EOSJPY |
XLM/JPY | ステラルーメン/日本円 | XXLMZJPY |
ADA/JPY | エイダコイン/日本円 | ADAJPY |
XTZ/JPY | テゾス/日本円 | XTZJPY |
LINK/JPY | チェーンリンク/日本円 | LINKJPY |
もっと知りたい方は公式ドキュメントを
いろいろできるみたいですので、
興味のある方は公式ドキュメントを参考にしてみてください。
日本の取引所はどうなの?
日本の取引所でもデータ取れそうなのでチャレンジしてみます。
当たり前ですが、日本語でドキュメントが用意されているので安心(笑)
自動売買とかもできそうだから、遊んでみようかな。
コインチェックの口座開設はこちらからできます。
Coincheck