このページは機械翻訳されています。英語の原文が正式版です。 英語で読む
メインコンテンツにスキップ

レート制限

注文操作およびAPIリクエストに対するウォレット単位のレート制限です。

概要

レート制限は、固定ウィンドウアルゴリズムを使用してウォレット単位で適用されます。制限は以下に適用されます:

  • 注文発注 (POST /order)
  • 注文キャンセル (DELETE /order)
  • APIリクエスト(一般的なエンドポイントの使用)

制限は60秒ごとにリセットされます。

デフォルトの制限

ティア注文/分キャンセル/分APIリクエスト/分最大未約定注文数最大ポジション数
デフォルト6012060010050
ティア130603005020
ティア21203001,200500200
マーケットメイカー6001,2006,0002,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 /order
  • DELETE /bulk_order(一括キャンセル、各キャンセルがカウントされます)
  • DELETE /bulk_order_cloid(クライアント注文IDによる一括キャンセル、各キャンセルがカウントされます)

APIリクエスト

すべての認証済みエンドポイントにわたる一般的なAPI使用に適用されます。

ポジションと注文の制限

レート制限に加えて、ウォレットには最大未約定注文数および最大ポジション数の制限があります:

制限タイプ説明拒否
最大未約定注文数同時に保有できる未約定注文の最大数エンジンに到達する前に注文が拒否されます
最大ポジション数ユニークなポジションの最大数(-1 = 無制限)新規ポジションを作成する場合に注文が拒否されます

制限を超過した場合:

{
"error": "limit_exceeded",
"message": "Maximum open orders limit exceeded (100)"
}

ベストプラクティス

レート制限への対応

  1. ヘッダーの監視: X-RateLimit-Remaining を事前に追跡します
  2. Retry-Afterの尊重: リトライ前に指定された時間だけ待機します
  3. バックオフの実装: 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. 一括エンドポイントの使用: 複数の注文を1回のリクエストで送信するには POST /bulk_order を使用します
  2. キャンセルのバッチ処理: 複数の DELETE /order リクエストの代わりに DELETE /bulk_order または DELETE /bulk_order_cloid を使用します
  3. 更新にはWebSocketを使用: GET /orders をポーリングする代わりに、注文更新をサブスクライブします

モニタリング

以下のクライアント側メトリクスを追跡します:

  • アクションタイプごとのリクエストレート
  • X-RateLimit-Remaining の推移
  • 429レスポンスの頻度
  • Retry-After の平均時間

エラーリファレンス

HTTPステータスエラーコード説明
429rate_limit_exceededレート制限超過、指定された時間の経過後にリトライしてください

エラーの完全なリファレンスについては、エラーを参照してください。