仮想通貨の自動売買を始めようとしたとき、多くの方がまず直面するのが「取引所ごとにAPIの仕様がバラバラ」という問題です。
コインチェック・bitFlyer・Binanceではそれぞれエンドポイントの形式、認証方法、パラメータ名が異なり、複数の取引所を扱うとコード量が膨大になりがちです。
この問題を解決するのが ccxt(Crypto Currency eXchange Trading Library) です。ccxtは世界100以上の取引所を統一インターフェースで操作できるオープンソースライブラリで、Python・JavaScript・PHPに対応しています。
本記事では、ccxtのインストール方法から基本的な使い方、自動売買ボット構築への第一歩となる注文操作まで、実際のコードを交えながら丁寧に解説します。自動売買に興味はあるものの「どこから始めればいいかわからない」という方にとって、土台となる知識を提供します。
なお、仮想通貨取引には元本割れのリスクがあります。本記事はプログラム学習・情報提供を目的としており、特定の売買戦略を推奨するものではありません。
1. ccxtとは何か?基本概念と対応取引所
1-1. ccxtが解決する問題
取引所APIを直接叩く場合、次のような手間がかかります。
- HMAC署名やnonce(リクエスト順序管理)を自前で実装する必要がある
- エラーコードが取引所ごとに異なり、共通のハンドリングが難しい
- 取引所がAPIを変更するたびにコードを修正しなければならない
ccxtはこれらを吸収し、どの取引所でも同一のメソッド名・戻り値形式で操作できる「抽象化レイヤー」を提供します。たとえばBTCの現在価格(ティッカー)を取得する場合、取引所を変えても exchange.fetch_ticker('BTC/USDT') の一行で完結します。
1-2. 対応取引所と日本での利用
2026年時点でccxtが対応する取引所は世界100社以上です。日本の投資家がよく利用する取引所の対応状況は以下の通りです。
- Binance: フル対応。スポット・先物・マージンすべて利用可能
- Bybit: スポット・デリバティブ対応。日本語サポートあり
- OKX: スポット・先物・オプション対応
- bitFlyer: 基本機能対応。一部APIに制限あり
- コインチェック: 読み取り系を中心に対応
国内取引所は海外大手と比べてAPIの機能範囲が限られる傾向があります。本格的な自動売買ではBinanceなど海外取引所を主戦場とするケースが多いです。
1-3. ccxtのバージョンと更新頻度
ccxtはGitHubで公開されており、更新頻度は非常に高く週複数回のリリースが続いています。本番環境では requirements.txt でバージョンを固定することを推奨します。
2. インストールと環境構築
2-1. Python環境の準備
ccxtをPythonで使うための推奨環境は以下の通りです。
- Python 3.8以上(3.11推奨)
- pip(パッケージマネージャー)
- 仮想環境(venv または conda)の使用を強く推奨
# 仮想環境の作成と有効化(macOS/Linux)
python3 -m venv ccxt-env
source ccxt-env/bin/activate
2-2. ccxtのインストール
pip install ccxt
python3 -c "import ccxt; print(ccxt.__version__)"
4.x.x台のバージョンが表示されれば成功です(2026年3月時点)。
2-3. APIキーの取得と安全な管理
安全な管理の基本原則は次の通りです。
- APIキーをコードに直接書かない
- 環境変数か暗号化されたファイルで管理する
- 取引所側で「出金権限なし」「IP制限あり」に設定する
- テスト中はテストネット(サンドボックス)を利用する
import os, ccxt
exchange = ccxt.binance({
'apiKey': os.environ.get('BINANCE_API_KEY'),
'secret': os.environ.get('BINANCE_SECRET'),
})
3. 基本的な使い方:価格取得から注文まで
3-1. 取引所インスタンスと市場データ取得
import ccxt
exchange = ccxt.binance()
# BTC/USDTのティッカー取得
ticker = exchange.fetch_ticker('BTC/USDT')
print(f"現在価格: {ticker['last']} USDT")
print(f"24h高値: {ticker['high']}")
print(f"24h安値: {ticker['low']}")
3-2. OHLCVデータ(ローソク足)の取得
import pandas as pd
ohlcv = exchange.fetch_ohlcv('BTC/USDT', timeframe='1h', limit=200)
df = pd.DataFrame(ohlcv, columns=['timestamp','open','high','low','close','volume'])
df['datetime'] = pd.to_datetime(df['timestamp'], unit='ms')
df = df.set_index('datetime')
print(df.tail())
timeframeには '1m'・'5m'・'1h'・'1d' などが指定できます。
3-3. 注文の送信と確認
exchange = ccxt.binance({'apiKey': '...', 'secret': '...'})
# 成行買い
order = exchange.create_market_buy_order('BTC/USDT', 0.001)
# 指値売り
order = exchange.create_limit_sell_order('BTC/USDT', 0.001, 110000)
# オープン注文確認
open_orders = exchange.fetch_open_orders('BTC/USDT')
4. 注文タイプと取引所パラメータの詳細
4-1. 対応注文タイプの確認方法
exchange = ccxt.binance()
exchange.load_markets()
print(exchange.has['createLimitOrder']) # True / 'emulated' / False
print(exchange.has['createStopOrder'])
4-2. extraParamsによる取引所固有オプション
order = exchange.create_limit_buy_order(
'BTC/USDT', 0.001, 95000,
params={'timeInForce': 'GTX'} # Good Till Crossing(メイカー専用)
)
5. エラー処理と例外ハンドリング
5-1. ccxtの主要例外クラス
ccxt.NetworkError: 接続エラー、タイムアウトccxt.ExchangeError: 取引所側のエラーccxt.AuthenticationError: APIキー不正ccxt.InsufficientFunds: 残高不足ccxt.InvalidOrder: 注文パラメータ不正ccxt.RateLimitExceeded: APIレート制限超過
5-2. 実践的なエラーハンドリングパターン
import time
def safe_fetch_ticker(exchange, symbol, retries=3):
for attempt in range(retries):
try:
return exchange.fetch_ticker(symbol)
except ccxt.RateLimitExceeded:
print("レート制限。60秒待機します")
time.sleep(60)
except ccxt.NetworkError as e:
print(f"ネットワークエラー({attempt+1}回目): {e}")
time.sleep(5)
except ccxt.ExchangeError as e:
print(f"取引所エラー: {e}")
raise
raise Exception("最大リトライ回数を超えました")
6. テストネットの活用とデモ取引
6-1. テストネットとは
多くの主要取引所はテストネット(サンドボックス)を提供しており、実際の資金を使わずにボットをテストできます。
exchange = ccxt.binance({
'apiKey': 'テストネット用APIキー',
'secret': 'テストネット用シークレット',
'options': {'defaultType': 'future'},
})
exchange.set_sandbox_mode(True)
6-2. バックテストフレームワークとの組み合わせ
ccxtで取得したOHLCVデータを使い、戦略の有効性を過去データで検証(バックテスト)することが実践的なアプローチです。代表的なフレームワークとして Backtrader や Freqtrade(ccxt組み込み済み)があります。
7. ccxtの非同期(async)対応と高速化
7-1. asyncioによる並列処理
import asyncio
import ccxt.async_support as ccxt
async def main():
exchange = ccxt.binance()
tickers = await asyncio.gather(
exchange.fetch_ticker('BTC/USDT'),
exchange.fetch_ticker('ETH/USDT'),
)
for t in tickers:
print(t['symbol'], t['last'])
await exchange.close()
asyncio.run(main())
7-2. WebSocketとの使い分け
リアルタイムのティッカーや板情報が必要な場合は、REST APIのポーリングよりWebSocketの方が効率的です。ccxtにはPro版(ccxt.pro)があり、WebSocketをサポートしています。ただしccxt.proは有料オプションです。
まとめ
- ccxtは世界100以上の取引所に対応し、Python/JS/PHPで利用可能
- インストールは
pip install ccxtの一行で完了 - APIキーは環境変数で管理し、出金権限なし・IP制限の設定が必須
- 価格取得(fetch_ticker)・OHLCV(fetch_ohlcv)・注文(create_order)が基本操作
- エラーハンドリングは必須。RateLimitExceededとNetworkErrorへの対応を実装すること
- 本番稼働前にテストネットとバックテストで十分な検証を行うこと
よくある質問(FAQ)
Q: ccxtは無料で使えますか?
A: 基本的なccxtライブラリはMITライセンスの無料オープンソースです。WebSocketをフルサポートするccxt.proは有料となっています。
Q: 国内取引所(コインチェック・bitFlyer)は自動売買に向いていますか?
A: 国内取引所はAPIの機能範囲が限られており、レート制限も厳しい傾向があります。本格的な自動売買にはBinanceやBybitなど海外取引所の利用が一般的ですが、各自の状況と規制環境を確認してください。
Q: ccxtでbotを動かすのに専用サーバーは必要ですか?
A: 24時間稼働させる場合はVPS(仮想専用サーバー)が必要です。自分のPCで動かす場合は、PCがオフになるとボットも停止します。
※本記事は情報提供を目的としており、投資を推奨するものではありません。暗号資産への投資は元本割れのリスクがあります。投資判断はご自身の責任で行ってください。