はじめに
仮想通貨の自動売買やデータ分析に興味がある人なら、一度は取引所のAPIを触ったことがあるんじゃないでしょうか。
個人的には、取引所ごとにAPIの仕様が微妙に違うのが地味にストレスだったんですよね。BinanceとBybitでレスポンスの形式が違ったり、認証の方法が異なったり。そのたびにドキュメントを読み込んで対応するのが面倒で。
そんな悩みを解決してくれるのが今回紹介するCCXT(CryptoCurrency eXchange Trading Library)です。100以上の取引所に対応した統一APIを提供してくれるライブラリで、GitHub上で4万スター以上を獲得している人気プロジェクトです。
CCXTの特徴・メリット
100以上の取引所に対応
CCXTは主要な取引所はほぼ網羅しています。
- Binance
- OKX
- Bybit
- KuCoin
- Gate.io
- Bitget
- その他100以上
正直、これだけカバーしていれば困ることはないですね。
統一されたAPI
これが一番のメリットだと思います。どの取引所を使っても同じメソッドで操作できる。取引所を乗り換えるときも、インスタンス生成部分を変えるだけで済むのは楽すぎます。
// Binanceの場合
const binance = new ccxt.binance()
// Bybitの場合
const bybit = new ccxt.bybit()
// どちらも同じメソッドで呼べる
await binance.fetchTicker('BTC/USDT')
await bybit.fetchTicker('BTC/USDT')
複数言語対応
JavaScript/TypeScript、Python、PHP、C#、Goに対応しています。個人的にはPythonでデータ分析、Node.jsでボット運用という使い分けをしていますが、どちらでも同じ感覚で書けるのはありがたい。
公開API・非公開APIの両方をサポート
価格情報の取得だけでなく、実際の取引もできます。
- 公開API:価格、板情報、約定履歴など
- 非公開API:注文、残高確認、ポジション管理など
インストール方法
各言語のパッケージマネージャーからインストールできます。
JavaScript/TypeScript
npm install ccxt
Python
pip install ccxt
PHP
composer require ccxt/ccxt
基本的な使い方
価格情報の取得(JavaScript)
import ccxt from 'ccxt';
const exchange = new ccxt.binance();
// ティッカー情報の取得
const ticker = await exchange.fetchTicker('BTC/USDT');
console.log(`BTC価格: ${ticker.last} USDT`);
console.log(`24h高値: ${ticker.high}`);
console.log(`24h安値: ${ticker.low}`);
console.log(`24h出来高: ${ticker.baseVolume}`);
価格情報の取得(Python)
import ccxt
exchange = ccxt.binance()
# ティッカー情報の取得
ticker = exchange.fetch_ticker('BTC/USDT')
print(f"BTC価格: {ticker['last']} USDT")
print(f"24h高値: {ticker['high']}")
print(f"24h安値: {ticker['low']}")
OHLCVデータ(ローソク足)の取得
import ccxt
exchange = ccxt.binance()
# 日足データを100本取得
ohlcv = exchange.fetch_ohlcv('BTC/USDT', '1d', limit=100)
for candle in ohlcv[-5:]: # 直近5本を表示
timestamp, open_, high, low, close, volume = candle
print(f"始値: {open_}, 高値: {high}, 安値: {low}, 終値: {close}")
認証が必要な操作(残高確認・注文)
import ccxt from 'ccxt';
const exchange = new ccxt.binance({
apiKey: 'YOUR_API_KEY',
secret: 'YOUR_SECRET_KEY',
});
// 残高確認
const balance = await exchange.fetchBalance();
console.log(`USDT残高: ${balance.USDT.free}`);
// 成行注文
const order = await exchange.createMarketBuyOrder('BTC/USDT', 0.001);
console.log(`注文ID: ${order.id}`);
実践的なユースケース
複数取引所の価格比較
アービトラージの基本となる価格差の監視です。
import ccxt from 'ccxt';
const exchanges = [
new ccxt.binance(),
new ccxt.bybit(),
new ccxt.okx(),
];
async function comparePrices(symbol) {
const prices = await Promise.all(
exchanges.map(async (ex) => {
const ticker = await ex.fetchTicker(symbol);
return { name: ex.id, price: ticker.last };
})
);
prices.sort((a, b) => a.price - b.price);
const diff = prices[prices.length - 1].price - prices[0].price;
const diffPercent = (diff / prices[0].price * 100).toFixed(3);
console.log(`${symbol} 価格差: ${diffPercent}%`);
prices.forEach(p => console.log(` ${p.name}: ${p.price}`));
}
await comparePrices('BTC/USDT');
定期的な価格監視ボット
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
threshold = 100000 # 10万ドル
while True:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
if price >= threshold:
print(f"アラート: BTCが${price}に到達")
# ここで通知処理などを追加
time.sleep(60) # 1分ごとにチェック
バックテスト用のヒストリカルデータ取得
import ccxt
import pandas as pd
exchange = ccxt.binance()
# 過去1000本の1時間足データを取得
ohlcv = exchange.fetch_ohlcv('ETH/USDT', '1h', limit=1000)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
df.set_index('timestamp', inplace=True)
print(df.tail())
print(f"\n平均出来高: {df['volume'].mean():.2f}")
注意点
いくつか使っていて気づいた点を共有しておきます。
- レートリミット:取引所ごとにAPI呼び出し制限があります。CCXTは自動で対応してくれますが、ループで回すときは
exchange.rateLimitを意識した方がいいです - 取引所固有の機能:統一APIでカバーしきれない機能もあります。その場合は
exchange.request()で直接叩く必要があります - 本番運用時のエラーハンドリング:ネットワークエラーや取引所のメンテナンスに備えて、try-catchは必須ですね
まとめ
CCXTは仮想通貨の自動売買やデータ分析をやりたい人にとって、ほぼ必須のライブラリだと思います。
個人的に特に良いと感じるのは以下の点です。
- 取引所ごとのAPI差異を気にしなくていい
- ドキュメントやサンプルが充実している
- アクティブに開発が続いている(GitHubで9万以上のコミット)
- MITライセンスで商用利用も可能
仮想通貨botを作ってみたい、アービトラージを試してみたいという人は、まずCCXTから始めてみるのがいいんじゃないでしょうか。取引所APIの理解が一気に進むと思います。
ただし、実際の取引に使う場合は、必ず少額からテストすることをおすすめします。APIキーの管理もセキュリティ面で重要なので、環境変数で管理するなど適切な対策を。
