Binance APIを使って量子取引やデータ分析を行う際、最も厄介な問題の一つがレート制限です。リクエストが速すぎるとIPがブロックされ、遅すぎると戦略の実行に影響が出ます。
Binance APIのレート制限
Binanceに登録してAPI Keyを作成した後、以下のレート制限を守る必要があります:
REST API制限
リクエストウェイト(Request Weight)
Binanceは単純に1分あたりのリクエスト数を制限しているのではなく、「ウェイト」システムを使用しています。エンドポイントごとに消費するウェイトが異なります:
- 通常の相場照会:ウェイト1-5
- 板情報照会:ウェイト5-50(リクエストの深度による)
- 注文操作:ウェイト1
- アカウント情報照会:ウェイト5-10
デフォルトの制限:
- 1分あたり1200ウェイト(IP単位)
- 10秒あたり100回の注文(アカウント単位)
- 1日あたり200,000回の注文(アカウント単位)
WebSocket制限
- 1つの接続で最大200のデータストリームをサブスクライブ可能
- 1つのIPあたりのWebSocket接続数に上限あり
- 1つの接続あたり1秒に最大5メッセージの送信
使用量の確認方法
各APIレスポンスのヘッダーに現在の使用状況が返されます:
X-MBX-USED-WEIGHT-1m:現在の1分間の使用ウェイトX-MBX-ORDER-COUNT-10s:現在の10秒間の注文回数X-MBX-ORDER-COUNT-1d:現在の1日の注文回数
これらのヘッダー情報を読み取って使用量を監視してください。
制限を超過するとどうなる?
HTTP 429
レート制限を超過すると、APIはHTTP 429エラー(Too Many Requests)を返します。この場合:
- そのIPまたはアカウントが一時的に制限されます
- クールダウン時間が経過するまで待つ必要があります
- クールダウン時間は通常数秒から数分
HTTP 418
継続的に制限を超過し続けると、418エラーを受け取る可能性があります。これはIPが数分から数日間ブロックされたことを意味します。
制限超過を避けるには
1. ポーリングの代わりにWebSocketを使用
リアルタイム相場の取得にREST APIを繰り返し呼び出すのではなく、WebSocketデータストリームに切り替えましょう。WebSocketはプッシュ方式のため、REST APIのウェイトを消費しません。
// 非推奨:毎秒REST APIを呼び出して価格を取得
// 推奨:WebSocketをサブスクライブしてリアルタイム価格のプッシュを受信
2. リクエストの統合
複数の取引ペアの情報を照会する場合は、バッチAPIで一度に取得しましょう。一つずつ照会するのはやめてください。
3. データのキャッシュ
リアルタイム性が不要なデータ(取引ルール、通貨情報など)は毎回リクエストせず、ローカルにキャッシュして定期的にリフレッシュしましょう。
4. ウェイト使用量の監視
コード内で各リクエストのウェイト消費を記録し、制限に近づいたら自動的に速度を落としましょう。
5. リクエスト頻度の適切な調整
遅延を使ってリクエスト頻度を制御し、一度にすべてを送信するのは避けましょう。
アカウントレベルによる制限の違い
VIPレベルが高いほど、APIのレート制限は緩和されます:
- 一般ユーザー:標準制限
- VIP 1-3:やや引き上げ
- VIP 4+:より高いウェイト制限と注文制限
- マーケットメイカーアカウント:最大の制限
戦略により高い頻度が必要な場合は、VIPレベルの引き上げ(取引量の増加やBNBの保有)を検討してください。
よくある質問
Q:複数のIPで制限を回避できますか? ウェイト制限にはIP単位とアカウント単位の両方があります。複数のIPでIP単位の制限は回避できますが、アカウント単位の注文制限は回避できません。
Q:テスト環境の制限は同じですか? テストネット(testnet)の制限はメインネットと異なる場合があります。
Q:制限は変わることがありますか? はい。Binanceはシステム負荷に応じて制限を調整する場合があります。最新情報はお知らせをご確認ください。
アプリをまだインストールしていない場合は、まずBinanceアプリをダウンロードしてください。
まとめ
Binance APIはウェイトシステムで頻度を制御しており、デフォルトは1分あたり1200ウェイトです。超過すると429または418エラーが発生します。最適化戦略として、WebSocketの使用、リクエストの統合、データのキャッシュ、ウェイトの監視があります。VIPレベルが高いほど制限は緩和されます。