Binance APIの始め方:Pythonのコード1行で価格情報を取得する方法
APIを使えばプログラムによる自動売買が可能になります。本記事ではAPIキーの作成方法から、Pythonでの価格情報取得までを解説します。
APIは、クオンツ運用や自動化への鍵となります。まず Binance公式サイト で登録を行い、Binance公式アプリ をダウンロードしてください(iOSについては iOSインストールガイド を参照)。
APIとは何か
Application Programming Interfaceの略です。自分のプログラムを使って、手動操作の代わりにBinanceの全機能を呼び出すことができます:
- 相場情報の取得
- 注文の発注
- 注文のキャンセル
- 残高・ポジションの確認
- 資金移動(制限あり)
APIキーの作成方法
手順
- Binanceのウェブサイトにログイン
- プロフィールアイコン → [API管理] を選択
- [APIの作成] をクリック
- [システム生成] を選択 → 2FA認証 → APIに名前を付ける
- 完了
作成後、以下の2つの情報が発行されます:
- API Key(公開される識別子)
- Secret Key(秘密の署名用キー)
Secret Keyは作成時に一度だけ表示されます。 必ず安全な場所に保存してください。
権限の設定
各APIキーには以下の権限を設定できます:
- 現物・マージン取引を有効化
- 先物取引を有効化
- 出金を有効化
- マージン借入を有効化
初心者はまず「読み取り専用」のみに設定することをお勧めします。
「出金を有効化」には絶対にチェックを入れないでください。IPホワイトリストを設定していても、出金権限を付与することは非常に高いリスクを伴います。
IPホワイトリスト
固定IPアドレスをバインドすることを強くお勧めします。指定したIP以外からのリクエストをすべて無効化できます。
自宅や会社の固定IPが適していますが、動的IPの場合はVPSを経由して運用するのが一般的です。
Pythonで最初の1行
import requests
r = requests.get('https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDT')
print(r.json())
出力例:{'symbol': 'BTCUSDT', 'price': '63500.5'}
APIキーを必要としない公開相場APIは、このように非常にシンプルに利用できます。
認証が必要なリクエスト
注文などのプライベートAPIには署名が必要です。Pythonでの例:
import time, hmac, hashlib, requests
api_key = 'YOUR_KEY'
secret = 'YOUR_SECRET'
ts = int(time.time() * 1000)
params = f'symbol=BTCUSDT×tamp={ts}'
sig = hmac.new(secret.encode(), params.encode(), hashlib.sha256).hexdigest()
url = f'https://api.binance.com/api/v3/account?{params}&signature={sig}'
r = requests.get(url, headers={'X-MBX-APIKEY': api_key})
print(r.json())
これにより、現物アカウントの残高情報が返ってきます。
おすすめのPythonライブラリ
ゼロから書く必要はありません。定評のあるライブラリを利用しましょう:
python-binance:最もポピュラーなSDKccxt:多くの取引所に対応した汎用ライブラリbinance-connector-python:Binance公式のSDK
from binance.client import Client
client = Client(api_key, secret)
print(client.get_account())
これだけで複雑な認証処理を代行してくれます。
レート制限(Rate Limit)
Binance APIには制限があります:
- 公開相場API:1,200 weight/分
- プライベートAPI:120 weight/10秒
制限を超えると一時的にIPがブロックされます。エンドポイントごとに消費されるweightが異なり、注文1回で1 weight、残高確認も1 weightといった具合です。
よくあるエラー
1. -1021 Timestamp for this request is outside of the recvWindow
サーバー時刻とPCの時刻が5秒以上ずれています。OSの時刻同期設定を確認してください。
2. -2010 Account has insufficient balance
注文時の残高が不足しています。アカウントを確認してください。
3. -2011 Unknown order sent
注文がすでに約定しているか、存在しない注文をキャンセルしようとした場合に発生します。
4. -1003 Too many requests
リクエスト頻度が高すぎます。速度を落としてください。
REST vs WebSocket
| 用途 | REST | WebSocket |
|---|---|---|
| 単発のリクエスト | 適している | 適さない |
| リアルタイムデータ | 適さない | 適している |
| K線のスナップショット | 適している | 適さない |
| 価格のプッシュ配信 | 適さない | 適している |
クオンツ戦略の多くは、RESTとWebSocketを併用して構築されます。
WebSocketの例
import websocket
ws = websocket.WebSocketApp('wss://stream.binance.com:9443/ws/btcusdt@trade',
on_message=lambda ws, msg: print(msg))
ws.run_forever()
BTC/USDTの全約定データがリアルタイムでプッシュされます。
テストネット(Testnet)
Binanceは練習用のテストネットを提供しています:
- testnet.binance.vision(現物)
- testnet.binancefuture.com(先物)
仮想の資金を使って、損失を気にせず練習できます。初心者はまずここで試すのが鉄則です。
APIのリスク管理
1. キーの用途別管理
戦略ごとに異なるAPIキーを発行します。問題が起きてもそのキーを削除するだけで済みます。
2. バックアップと暗号化
シークレットキーはパスワードマネージャーで保存し、ソースコードに平文で書かないでください。
3. 出金権限は絶対にオフ
自動出金の必要性が明確にあり、リスクを完全に理解している場合を除き、常にオフにします。
4. 定期的な監査
毎週APIリストを確認し、使用していないキーは削除しましょう。
APIの活用例
- クオンツ戦略(自動売買)
- 監視(資産変動の通知)
- 自動アービトラージ(裁定取引)
- データ分析(過去のK線取得)
- コピートレード(他人の取引をAPIでコピー)
- カスタム指標・アラート作成
学習ロードマップ
- まずはテストネットで Hello World
- SDKを使って現在の価格を取得
- 「価格がX以下になったら通知」という簡単なスクリプトを作成
- 少額・低レバレッジで単純な戦略を本番環境で試す
- ロジックの最適化とリスク管理の強化
- 本格的な運用を開始
よくある質問
Q: APIを利用するのに本人確認(KYC)は必要ですか? A: アカウント自体がKYC済みであれば、APIのために別途認証を行う必要はありません。
Q: APIの利用に手数料はかかりますか? A: API経由の注文でも、通常の手数料率が適用されます。BNB割引も有効です。
Q: APIですべての機能を自動化できますか? A: はい。ただし、プログラムのバグやリスク管理の失敗は自己責任となります。
Q: APIキーを忘れた場合、確認できますか? A: シークレットキーは作成時以外確認できません。忘れた場合は削除して再作成してください。
関連ガイド
APIはエンジニアにとっての最強の武器です。テストネットから始めて、自分だけの投資戦略を構築しましょう。