レート制限
注文操作およびAPIリクエストに対するウォレット単位のレート制限です。
概要
レート制限は、固定ウィンドウアルゴリズムを使用してウォレット単位で適用されます。制限は以下に適用されます:
- 注文発注 (
POST /order) - 注文キャンセル (
DELETE /order) - APIリクエスト(一般的なエンドポイントの使用)
制限は60秒ごとにリセットされます。
デフォルトの制限
| ティア | 注文/分 | キャンセル/分 | APIリクエスト/分 | 最大未約定注文数 | 最大ポジション数 |
|---|---|---|---|---|---|
| デフォルト | 60 | 120 | 600 | 100 | 50 |
| ティア1 | 30 | 60 | 300 | 50 | 20 |
| ティア2 | 120 | 300 | 1,200 | 500 | 200 |
| マーケットメイカー | 600 | 1,200 | 6,000 | 2,000 | 無制限 |
新規ウォレットにはデフォルトの制限が適用されます。ティアのアップグレードについてはサポートまでお問い合わせください。
レート制限レスポンス
レート制限を超過すると、APIは 429 Too Many Requests を返します:
{
"error": "rate_limit_exceeded",
"message": "Rate limit exceeded for OrderPlacement: 60 per minute, retry after 45 seconds",
"retry_after_secs": 45,
"limit": 60
}
レスポンスヘッダー
レート制限が適用されるすべてのエンドポイントは、成功・エラーの両方のレスポンスに以下のヘッダーを含みます:
| ヘッダー | 説明 | 例 |
|---|---|---|
X-RateLimit-Limit | ウィンドウあたりの最大許容リクエスト数 | 60 |
X-RateLimit-Remaining | 現在のウィンドウでの残りリクエスト数 | 42 |
X-RateLimit-Reset | ウィンドウがリセットされるUnixタイムスタンプ | 1737312060 |
Retry-After | リトライまでの秒数(429の場合のみ) | 45 |
レスポンスヘッダーの例
成功したリクエスト:
HTTP/1.1 200 OK
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1737312060
レート制限されたリクエスト:
HTTP/1.1 429 Too Many Requests
Retry-After: 45
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1737312060
レート制限のカテゴリ
レート制限は、アクションタイプごとに個別に追跡されます:
注文発注
以下に適用されます:
POST /order(オプション注文)POST /bulk_order(一括注文、バッチ内の各注文がカウントされます)PUT /bulk_order(一括差し替え、各差し替えがカウントされます)
注文キャンセル
以下に適用されます:
DELETE /orderDELETE /bulk_order(一括キャンセル、各キャンセルがカウントされます)DELETE /bulk_order_cloid(クライアント注文IDによる一括キャンセル、各キャンセルがカウントされます)
APIリクエスト
すべての認証済みエンドポイントにわたる一般的なAPI使用に適用されます。
ポジションと注文の制限
レート制限に加えて、ウォレットには最大未約定注文数および最大ポジション数の制限があります:
| 制限タイプ | 説明 | 拒否 |
|---|---|---|
| 最大未約定注文数 | 同時に保有できる未約定注文の最大数 | エンジンに到達する前に注文が拒否されます |
| 最大ポジション数 | ユニークなポジションの最大数(-1 = 無制限) | 新規ポジションを作成する場合に注文が拒否されます |
制限を超過した場合:
{
"error": "limit_exceeded",
"message": "Maximum open orders limit exceeded (100)"
}
ベストプラクティス
レート制限への対応
- ヘッダーの監視:
X-RateLimit-Remainingを事前に追跡します - Retry-Afterの尊重: リトライ前に指定された時間だけ待機します
- バックオフの実装: 429が繰り返される場合は指数バックオフを使用します
import time
def place_order_with_retry(order, max_retries=3):
for attempt in range(max_retries):
response = api.place_order(order)
if response.status_code == 429:
retry_after = int(response.headers.get('Retry-After', 60))
time.sleep(retry_after)
continue
return response
raise RateLimitError("Max retries exceeded")
リクエスト使用の最適化
- 一括エンドポイントの使用: 複数の注文を1回のリクエストで送信するには
POST /bulk_orderを使用します - キャンセルのバッチ処理: 複数の
DELETE /orderリクエストの代わりにDELETE /bulk_orderまたはDELETE /bulk_order_cloidを使用します - 更新にはWebSocketを使用:
GET /ordersをポーリングする代わりに、注文更新をサブスクライブします
モニタリング
以下のクライアント側メトリクスを追跡します:
- アクションタイプごとのリクエストレート
X-RateLimit-Remainingの推移- 429レスポンスの頻度
Retry-Afterの平均時間
エラーリファレンス
| HTTPステータス | エラーコード | 説明 |
|---|---|---|
| 429 | rate_limit_exceeded | レート制限超過、指定された時間の経過後にリトライしてください |
エラーの完全なリファレンスについては、エラーを参照してください。