Files
gocryptotrader/exchanges/binanceus/ratelimit.go
Ryan O'Hara-Reid ac91fabcd5 orderbook: consolidate slice array types to orderbook package (#1992)
* orderbook: consolidate slice array types to orderbook package

* Update exchanges/bybit/bybit_types.go

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

* linter: fix and add test

* cranktakular: nits

* cranktakular: nits

* Update exchanges/orderbook/orderbook_types.go

Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>

* Update exchanges/gateio/gateio_test.go

Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>

* gk: nits consolidation

* gk: rm unifySpotOrderbook func

* gk: nit but different

* linter: fix

* gk: nits

* glorious: nits

* Update exchanges/binance/binance.go

Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>

* Update exchanges/binance/binance_cfutures.go

Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>

* Update exchanges/binanceus/binanceus.go

Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>

* thrasher-:nits

* thrasher-: more nit

---------

Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Gareth Kirwan <gbjkirwan@gmail.com>
Co-authored-by: Adrian Gallagher <adrian.gallagher@thrasher.io>
2025-10-02 14:22:20 +10:00

80 lines
3.0 KiB
Go

package binanceus
import (
"time"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
)
const (
spotInterval = time.Minute
spotRequestRate = 1200
// Order related limits which are segregated from the global rate limits
// 100 requests per 10 seconds and max 100000 requests per day.
spotOrderInterval = 10 * time.Second
spotOrderRequestRate = 100
)
// Binance Spot rate limits
const (
spotDefaultRate request.EndpointLimit = iota
spotExchangeInfo
spotHistoricalTradesRate
spotOrderbookDepth500Rate
spotOrderbookDepth1000Rate
spotOrderbookDepth5000Rate
spotOrderbookTickerAllRate
spotPriceChangeAllRate
spotSymbolPriceAllRate
spotSingleOCOOrderRate
spotOpenOrdersAllRate
spotOpenOrdersSpecificRate
spotOrderRate
spotOrderQueryRate
spotTradesQueryRate
spotAllOrdersRate
spotAllOCOOrdersRate
spotOrderRateLimitRate
spotAccountInformationRate
)
// GetRateLimit returns the rate limit for the exchange
func GetRateLimit() request.RateLimitDefinitions {
spotRate := request.NewRateLimit(spotInterval, spotRequestRate)
spotOrdersRate := request.NewRateLimit(spotOrderInterval, spotOrderRequestRate)
return request.RateLimitDefinitions{
spotDefaultRate: request.GetRateLimiterWithWeight(spotRate, 1),
spotOrderbookTickerAllRate: request.GetRateLimiterWithWeight(spotRate, 2),
spotSymbolPriceAllRate: request.GetRateLimiterWithWeight(spotRate, 2),
spotHistoricalTradesRate: request.GetRateLimiterWithWeight(spotRate, 5),
spotOrderbookDepth500Rate: request.GetRateLimiterWithWeight(spotRate, 5),
spotOrderbookDepth1000Rate: request.GetRateLimiterWithWeight(spotRate, 10),
spotAccountInformationRate: request.GetRateLimiterWithWeight(spotRate, 10),
spotExchangeInfo: request.GetRateLimiterWithWeight(spotRate, 10),
spotTradesQueryRate: request.GetRateLimiterWithWeight(spotRate, 10),
spotPriceChangeAllRate: request.GetRateLimiterWithWeight(spotRate, 40),
spotOrderbookDepth5000Rate: request.GetRateLimiterWithWeight(spotRate, 50),
spotOrderRate: request.GetRateLimiterWithWeight(spotOrdersRate, 1),
spotOrderQueryRate: request.GetRateLimiterWithWeight(spotOrdersRate, 2),
spotSingleOCOOrderRate: request.GetRateLimiterWithWeight(spotOrdersRate, 2),
spotOpenOrdersSpecificRate: request.GetRateLimiterWithWeight(spotOrdersRate, 3),
spotAllOrdersRate: request.GetRateLimiterWithWeight(spotOrdersRate, 10),
spotAllOCOOrdersRate: request.GetRateLimiterWithWeight(spotOrdersRate, 10),
spotOrderRateLimitRate: request.GetRateLimiterWithWeight(spotOrdersRate, 20),
spotOpenOrdersAllRate: request.GetRateLimiterWithWeight(spotOrdersRate, 40),
}
}
// orderbookLimit returns the endpoint rate limit representing enum given order depth
func orderbookLimit(depth uint64) request.EndpointLimit {
switch {
case depth <= 100:
return spotDefaultRate
case depth <= 500:
return spotOrderbookDepth500Rate
case depth <= 1000:
return spotOrderbookDepth1000Rate
}
return spotOrderbookDepth5000Rate
}