پرش به محتویات

محدودیت نرخ درخواست

بیت‌پین هر گروه از endpointها را جداگانه محدود می‌کند: وقتی توکن می‌فرستید برای هر کاربر، وگرنه برای هر IP. کلاینت برای هر باکت یک پنجرهٔ لغزان نگه می‌دارد و پیش از درخواستی که از سقف رد می‌شود صبر می‌کند، تا ربات خوش‌رفتار خطای 429 نگیرد.

مقادیر پیش‌فرض

این‌ها سقف‌های پیش‌فرض سرور هستند. حساب‌های VIP و بازارگردان معمولاً سقف بالاتری دارند. سقف واقعی خود را از بیت‌پین بپرسید و با Config(rate_limits=...) تنظیم کنید (پیکربندی).

باکت پیش‌فرض استفاده در
auth 3 / min احراز هویت (برای هر IP)
refresh 20 / min تمدید توکن
ws_info 10 / min توکن وب‌سوکت
market_public 200 / min fetch_markets، fetch_currencies، fetch_networks
market_suspensions 2 / min fetch_market_suspensions
tickers 300 / min fetch_tickers، fetch_ticker
commissions 10,000 / day fetch_trading_fees، fetch_trading_fee
candles 300 / min fetch_ohlcv
orderbook 60 / min fetch_order_book
matches 60 / min fetch_trades
order_create 18,000 / hour create_order
order_read 18,000 / hour fetch_orders، fetch_order، سفارش‌های باز و بسته
order_cancel 18,000 / hour cancel_order، cancel_order_by_identifier
order_bulk_create 1,800 / hour create_orders
order_bulk_cancel 1,800 / hour cancel_orders و همچنین create_orders
fills 300 / min fetch_my_trades
order_history 5 / sec fetch_order_history
wallet 60 / min fetch_balance، fetch_bank_accounts
deposit_address 60 / min fetch_deposit_address
currency_networks 60 / min fetch_currency_networks
deposits 60 / min fetch_deposits
withdraws 60 / min fetch_withdrawals، withdraw
withdraw_otp 10,000 / day verify_withdraw_otp، resend_withdraw_otp

بیت‌پین ثبت گروهی سفارش را از سهمیهٔ لغو گروهی هم کم می‌کند و کلاینت هم همین کار را می‌کند.

وقتی سرور 429 می‌دهد

کلاینت خطای RateLimitExceeded را با retry_after (ثانیه) می‌دهد، اگر سرور زمان انتظار را گفته باشد. درخواست تکرارپذیر (هر GET) که retry_after آن ۵ ثانیه یا کمتر باشد، پس از صبر دوباره فرستاده می‌شود. ثبت سفارش و برداشت هرگز تکرار نمی‌شوند.

from bitpin_sdk import errors

try:
    client.fetch_order_book("BTC/IRT")
except errors.RateLimitExceeded as exc:
    print("دوباره تلاش کنید پس از", exc.retry_after, "ثانیه")

چند پروسه

محدودکننده برای هر شیء کلاینت جداگانه می‌شمارد. چند پروسه با یک کلید از یک سهمیهٔ سرور استفاده می‌کنند؛ به هر کدام سهمی بدهید، مثلاً برای سه پروسه rate_limits={"order_create": "6000/hour"}.

با enable_rate_limit=False محدودکنندهٔ سمت کلاینت خاموش می‌شود. سرور همچنان محدودیت‌هایش را اعمال می‌کند.