Files
gocryptotrader/exchanges/bitfinex/ratelimit.go
Andrew 4a736fb335 (Exchange) Add GetHistoricCandles() & GetHistoricCandlesEx() support to exchanges (#479)
* implemented binance and bitfinex GetHistoricCandles wrapper methods)

* coinbene supported added

* after and before clean up

* gateio wrapper completed

* merged upstream/master

* Added bsaic KlineIntervalSupported() method

* Converted binance fixed test

* WIP

* new KlineConvertToExchangeStandardString method added

* end of day WIP

* WIP

* end of day WIP started migration of trade history

* added kline support to hitbtc huobi lbank

* added exchangehistory to all supported exchanges started work on coinbase 300 candles/request method

* end of day WIP

* removed unused ta and misc changes to flag ready for review

* yobit cleanup

* revert coinbase changES

* general code clean up and added zb support

* poloniex support added

* renamed method to FormatExchangeKlineInterval other misc fixes

* linter fixes

* linter fixes

* removed verbose

* fixed poloniex test coverage

* revert poloniex mock data

* regenerated poloniex mock data

* a very verbose clean up

* binance mock clean up

* removed unneeded t.Log()

* setting verbose to true to debug CI issue

* first pass changes addressed

* common.ErrNotYetImplemented implemented :D

* comments added

* WIP-addressed exchange requests and reverted previous GetExchangeHistory changes

* WIP-addressed exchange requests and reverted previous GetExchangeHistory changes

* increased test coverage added kraken support

* OKGroup support completed started work on address GetExchangeHistory feedback and migrating to own PR under https://github.com/xtda/gocryptotrader/tree/exchange_history

* convert zb ratelimits

* gofmt run on okcoin

* increased delay on rate limit

* gofmt package

* fixed panic with coinbene and bithumb if conversion fails

* very broken end of day WIP

* added support for GetHistoricCandlesEx to coinbase and binance

* gofmt package

* coinbase, btcmarkets, zb ex wrapper function added

* added all exchange support for ex regenerated mock data

* update bithumb to return wrapper method

* gofmt package

* end of day started work on changes

* reworked test coverage added okgroup support general fixes/change requests addressed

* Added OneMonth

* limit checks on supportedexchanges

* reverted getexchangehistory

* reworked binance tesT

* added workaround for kraken panic

* renamed command to extended removed interval check on non-implemented commands

* added wrapperconfig back

* increased test coverage for FormatExchangeKlineInterval

* WIP

* increased test coverage for FormatExchangeKlineInterval bitfinex/gateio/huobi

* linter fixes

* zb kraken lbank coinbene btcmarkets support added

* removed verbose

* OK group support for other asset types added

* swapped margin to use spot endpoint

* index support added test coverage added for asset types

* added asset type to okcoin test

* gofmt

* add asset to extended method

* removed verbose

* add support for coinbene swap increase test coverage

* removed verbose

* small clean up of okgroup wrapper functions

* verbose to troubleshoot CI issues

* removed verbose

* added error check reverted coinbasechanges

* readme updated

* removed unused start/finish started work on decoupling api requests from kline package

* restructured coinbene, bithumb methods, added bitstamp support

* kraken time fix

* BTCMarkets restructure

* typo fix

* removed test for futures due to contact changing

* added start/end date to extended method over range

* converted to assettranslator

* removed verbose

* removed invalid char

* reverted incorrectly removed return

* added import

* further template updates

* macos hates my keyboard :D

* misc canges

* x -> i

* removed verbose

* updated fixCasing to allocate var before checks

* removed time conversion

* sort all outgoing kline candles

* fixCasing fix

* after/before checks added

* added parallel to test

* logic check on BTCmarkets

* removed unused param, used correct iterator

* converted HitBTC to use time.Time

* add iszero false check to candle times

* updated resultlimit to 5000

* new line added

* added comment to exported const

* use configured ratelimit

* fixed pair for test

* panic fixed WIP on fixCasing

* fixCasing rework, started work on readme docs

* enable rate limiter for wrapper issues tool

* docs updated

* removed err from return and formatted currency

* updated Yobit supported status

* Updated HitBTC to use onehour candles due to test exeuction times

* added further details to gctcli output

* added link to docs

* added link to tempalte

* disable FTX websocket in config_example

* fix poloneix

* regenerated poloniex mock data

* removed recording flag
2020-07-08 10:51:54 +10:00

490 lines
20 KiB
Go

package bitfinex
import (
"errors"
"time"
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
"golang.org/x/time/rate"
)
const (
// Bitfinex rate limits - Public
requestLimitInterval = time.Minute
platformStatusReqRate = 15
tickerBatchReqRate = 30
tickerReqRate = 30
tradeReqRate = 30
orderbookReqRate = 30
statsReqRate = 90
candleReqRate = 60
configsReqRate = 15
statusReqRate = 15 // This is not specified just inputed WCS
liquidReqRate = 15 // This is not specified just inputed WCS
leaderBoardReqRate = 90
marketAveragePriceReqRate = 20
fxReqRate = 20
// Bitfinex rate limits - Authenticated
// Wallets -
accountWalletBalanceReqRate = 45
accountWalletHistoryReqRate = 45
// Orders -
retrieveOrderReqRate = 45
submitOrderReqRate = 45 // This is not specified just inputed above
updateOrderReqRate = 45 // This is not specified just inputed above
cancelOrderReqRate = 45 // This is not specified just inputed above
orderBatchReqRate = 45 // This is not specified just inputed above
cancelBatchReqRate = 45 // This is not specified just inputed above
orderHistoryReqRate = 45
getOrderTradesReqRate = 45
getTradesReqRate = 45
getLedgersReqRate = 45
// Positions -
getAccountMarginInfoReqRate = 45
getActivePositionsReqRate = 45
claimPositionReqRate = 45 // This is not specified just inputed above
getPositionHistoryReqRate = 45
getPositionAuditReqRate = 45
updateCollateralOnPositionReqRate = 45 // This is not specified just inputed above
// Margin funding -
getActiveFundingOffersReqRate = 45
submitFundingOfferReqRate = 45 // This is not specified just inputed above
cancelFundingOfferReqRate = 45
cancelAllFundingOfferReqRate = 45 // This is not specified just inputed above
closeFundingReqRate = 45 // This is not specified just inputed above
fundingAutoRenewReqRate = 45 // This is not specified just inputed above
keepFundingReqRate = 45 // This is not specified just inputed above
getOffersHistoryReqRate = 45
getFundingLoansReqRate = 45
getFundingLoanHistoryReqRate = 45
getFundingCreditsReqRate = 45
getFundingCreditsHistoryReqRate = 45
getFundingTradesReqRate = 45
getFundingInfoReqRate = 45
// Account actions
getUserInfoReqRate = 45
transferBetweenWalletsReqRate = 45 // This is not specified just inputed above
getDepositAddressReqRate = 45 // This is not specified just inputed above
withdrawalReqRate = 45 // This is not specified just inputed above
getMovementsReqRate = 45
getAlertListReqRate = 45
setPriceAlertReqRate = 45 // This is not specified just inputed above
deletePriceAlertReqRate = 45 // This is not specified just inputed above
getBalanceForOrdersOffersReqRate = 30
userSettingsWriteReqRate = 45 // This is not specified just inputed general count
userSettingsReadReqRate = 45
userSettingsDeleteReqRate = 45 // This is not specified just inputed above
// Account V1 endpoints
getAccountFeesReqRate = 5
getWithdrawalFeesReqRate = 5
getAccountSummaryReqRate = 5 // This is not specified just inputed above
newDepositAddressReqRate = 5 // This is not specified just inputed above
getKeyPermissionsReqRate = 5 // This is not specified just inputed above
getMarginInfoReqRate = 5 // This is not specified just inputed above
getAccountBalanceReqRate = 10
walletTransferReqRate = 10 // This is not specified just inputed above
withdrawV1ReqRate = 10 // This is not specified just inputed above
orderV1ReqRate = 10 // This is not specified just inputed above
orderMultiReqRate = 10 // This is not specified just inputed above
statsV1ReqRate = 10
fundingbookReqRate = 15
lendsReqRate = 30
// Rate limit endpoint functionality declaration
platformStatus request.EndpointLimit = iota
tickerBatch
tickerFunction
tradeRateLimit
orderbookFunction
stats
candle
configs
status
liquid
leaderBoard
marketAveragePrice
fx
// Bitfinex rate limits - Authenticated
// Wallets -
accountWalletBalance
accountWalletHistory
// Orders -
retrieveOrder
submitOrder
updateOrder
cancelOrder
orderBatch
cancelBatch
orderHistory
getOrderTrades
getTrades
getLedgers
// Positions -
getAccountMarginInfo
getActivePositions
claimPosition
getPositionHistory
getPositionAudit
updateCollateralOnPosition
// Margin funding -
getActiveFundingOffers
submitFundingOffer
cancelFundingOffer
cancelAllFundingOffer
closeFunding
fundingAutoRenew
keepFunding
getOffersHistory
getFundingLoans
getFundingLoanHistory
getFundingCredits
getFundingCreditsHistory
getFundingTrades
getFundingInfo
// Account actions
getUserInfo
transferBetweenWallets
getDepositAddress
withdrawal
getMovements
getAlertList
setPriceAlert
deletePriceAlert
getBalanceForOrdersOffers
userSettingsWrite
userSettingsRead
userSettingsDelete
// Account V1 endpoints
getAccountFees
getWithdrawalFees
getAccountSummary
newDepositAddress
getKeyPermissions
getMarginInfo
getAccountBalance
walletTransfer
withdrawV1
orderV1
orderMulti
statsV1
fundingbook
lends
)
// RateLimit implements the rate.Limiter interface
type RateLimit struct {
PlatformStatus *rate.Limiter
TickerBatch *rate.Limiter
Ticker *rate.Limiter
Trade *rate.Limiter
Orderbook *rate.Limiter
Stats *rate.Limiter
Candle *rate.Limiter
Configs *rate.Limiter
Status *rate.Limiter
Liquid *rate.Limiter
LeaderBoard *rate.Limiter
MarketAveragePrice *rate.Limiter
Fx *rate.Limiter
AccountWalletBalance *rate.Limiter
AccountWalletHistory *rate.Limiter
// Orders -
RetrieveOrder *rate.Limiter
SubmitOrder *rate.Limiter
UpdateOrder *rate.Limiter
CancelOrder *rate.Limiter
OrderBatch *rate.Limiter
CancelBatch *rate.Limiter
OrderHistory *rate.Limiter
GetOrderTrades *rate.Limiter
GetTrades *rate.Limiter
GetLedgers *rate.Limiter
// Positions -
GetAccountMarginInfo *rate.Limiter
GetActivePositions *rate.Limiter
ClaimPosition *rate.Limiter
GetPositionHistory *rate.Limiter
GetPositionAudit *rate.Limiter
UpdateCollateralOnPosition *rate.Limiter
// Margin funding -
GetActiveFundingOffers *rate.Limiter
SubmitFundingOffer *rate.Limiter
CancelFundingOffer *rate.Limiter
CancelAllFundingOffer *rate.Limiter
CloseFunding *rate.Limiter
FundingAutoRenew *rate.Limiter
KeepFunding *rate.Limiter
GetOffersHistory *rate.Limiter
GetFundingLoans *rate.Limiter
GetFundingLoanHistory *rate.Limiter
GetFundingCredits *rate.Limiter
GetFundingCreditsHistory *rate.Limiter
GetFundingTrades *rate.Limiter
GetFundingInfo *rate.Limiter
// Account actions
GetUserInfo *rate.Limiter
TransferBetweenWallets *rate.Limiter
GetDepositAddress *rate.Limiter
Withdrawal *rate.Limiter
GetMovements *rate.Limiter
GetAlertList *rate.Limiter
SetPriceAlert *rate.Limiter
DeletePriceAlert *rate.Limiter
GetBalanceForOrdersOffers *rate.Limiter
UserSettingsWrite *rate.Limiter
UserSettingsRead *rate.Limiter
UserSettingsDelete *rate.Limiter
// Account V1 endpoints
GetAccountFees *rate.Limiter
GetWithdrawalFees *rate.Limiter
GetAccountSummary *rate.Limiter
NewDepositAddress *rate.Limiter
GetKeyPermissions *rate.Limiter
GetMarginInfo *rate.Limiter
GetAccountBalance *rate.Limiter
WalletTransfer *rate.Limiter
WithdrawV1 *rate.Limiter
OrderV1 *rate.Limiter
OrderMulti *rate.Limiter
StatsV1 *rate.Limiter
Fundingbook *rate.Limiter
Lends *rate.Limiter
}
// Limit limits outbound requests
func (r *RateLimit) Limit(f request.EndpointLimit) error {
switch f {
case platformStatus:
time.Sleep(r.PlatformStatus.Reserve().Delay())
case tickerBatch:
time.Sleep(r.TickerBatch.Reserve().Delay())
case tickerFunction:
time.Sleep(r.Ticker.Reserve().Delay())
case tradeRateLimit:
time.Sleep(r.Trade.Reserve().Delay())
case orderbookFunction:
time.Sleep(r.Orderbook.Reserve().Delay())
case stats:
time.Sleep(r.Stats.Reserve().Delay())
case candle:
time.Sleep(r.Candle.Reserve().Delay())
case configs:
time.Sleep(r.Configs.Reserve().Delay())
case status:
time.Sleep(r.Stats.Reserve().Delay())
case liquid:
time.Sleep(r.Liquid.Reserve().Delay())
case leaderBoard:
time.Sleep(r.LeaderBoard.Reserve().Delay())
case marketAveragePrice:
time.Sleep(r.MarketAveragePrice.Reserve().Delay())
case fx:
time.Sleep(r.Fx.Reserve().Delay())
case accountWalletBalance:
time.Sleep(r.AccountWalletBalance.Reserve().Delay())
case accountWalletHistory:
time.Sleep(r.AccountWalletHistory.Reserve().Delay())
case retrieveOrder:
time.Sleep(r.RetrieveOrder.Reserve().Delay())
case submitOrder:
time.Sleep(r.SubmitOrder.Reserve().Delay())
case updateOrder:
time.Sleep(r.UpdateOrder.Reserve().Delay())
case cancelOrder:
time.Sleep(r.CancelOrder.Reserve().Delay())
case orderBatch:
time.Sleep(r.OrderBatch.Reserve().Delay())
case cancelBatch:
time.Sleep(r.CancelBatch.Reserve().Delay())
case orderHistory:
time.Sleep(r.OrderHistory.Reserve().Delay())
case getOrderTrades:
time.Sleep(r.GetOrderTrades.Reserve().Delay())
case getTrades:
time.Sleep(r.GetTrades.Reserve().Delay())
case getLedgers:
time.Sleep(r.GetLedgers.Reserve().Delay())
case getAccountMarginInfo:
time.Sleep(r.GetAccountMarginInfo.Reserve().Delay())
case getActivePositions:
time.Sleep(r.GetActivePositions.Reserve().Delay())
case claimPosition:
time.Sleep(r.ClaimPosition.Reserve().Delay())
case getPositionHistory:
time.Sleep(r.GetPositionHistory.Reserve().Delay())
case getPositionAudit:
time.Sleep(r.GetPositionAudit.Reserve().Delay())
case updateCollateralOnPosition:
time.Sleep(r.UpdateCollateralOnPosition.Reserve().Delay())
case getActiveFundingOffers:
time.Sleep(r.GetActiveFundingOffers.Reserve().Delay())
case submitFundingOffer:
time.Sleep(r.SubmitFundingOffer.Reserve().Delay())
case cancelFundingOffer:
time.Sleep(r.CancelFundingOffer.Reserve().Delay())
case cancelAllFundingOffer:
time.Sleep(r.CancelAllFundingOffer.Reserve().Delay())
case closeFunding:
time.Sleep(r.CloseFunding.Reserve().Delay())
case fundingAutoRenew:
time.Sleep(r.FundingAutoRenew.Reserve().Delay())
case keepFunding:
time.Sleep(r.KeepFunding.Reserve().Delay())
case getOffersHistory:
time.Sleep(r.GetOffersHistory.Reserve().Delay())
case getFundingLoans:
time.Sleep(r.GetFundingLoans.Reserve().Delay())
case getFundingLoanHistory:
time.Sleep(r.GetFundingLoanHistory.Reserve().Delay())
case getFundingCredits:
time.Sleep(r.GetFundingCredits.Reserve().Delay())
case getFundingCreditsHistory:
time.Sleep(r.GetFundingCreditsHistory.Reserve().Delay())
case getFundingTrades:
time.Sleep(r.GetFundingTrades.Reserve().Delay())
case getFundingInfo:
time.Sleep(r.GetFundingInfo.Reserve().Delay())
case getUserInfo:
time.Sleep(r.GetUserInfo.Reserve().Delay())
case transferBetweenWallets:
time.Sleep(r.TransferBetweenWallets.Reserve().Delay())
case getDepositAddress:
time.Sleep(r.GetDepositAddress.Reserve().Delay())
case withdrawal:
time.Sleep(r.Withdrawal.Reserve().Delay())
case getMovements:
time.Sleep(r.GetMovements.Reserve().Delay())
case getAlertList:
time.Sleep(r.GetAlertList.Reserve().Delay())
case setPriceAlert:
time.Sleep(r.SetPriceAlert.Reserve().Delay())
case deletePriceAlert:
time.Sleep(r.DeletePriceAlert.Reserve().Delay())
case getBalanceForOrdersOffers:
time.Sleep(r.GetBalanceForOrdersOffers.Reserve().Delay())
case userSettingsWrite:
time.Sleep(r.UserSettingsWrite.Reserve().Delay())
case userSettingsRead:
time.Sleep(r.UserSettingsRead.Reserve().Delay())
case userSettingsDelete:
time.Sleep(r.UserSettingsDelete.Reserve().Delay())
// Bitfinex V1 API
case getAccountFees:
time.Sleep(r.GetAccountFees.Reserve().Delay())
case getWithdrawalFees:
time.Sleep(r.GetWithdrawalFees.Reserve().Delay())
case getAccountSummary:
time.Sleep(r.GetAccountSummary.Reserve().Delay())
case newDepositAddress:
time.Sleep(r.NewDepositAddress.Reserve().Delay())
case getKeyPermissions:
time.Sleep(r.GetKeyPermissions.Reserve().Delay())
case getMarginInfo:
time.Sleep(r.GetMarginInfo.Reserve().Delay())
case getAccountBalance:
time.Sleep(r.GetAccountBalance.Reserve().Delay())
case walletTransfer:
time.Sleep(r.WalletTransfer.Reserve().Delay())
case withdrawV1:
time.Sleep(r.WithdrawV1.Reserve().Delay())
case orderV1:
time.Sleep(r.OrderV1.Reserve().Delay())
case orderMulti:
time.Sleep(r.OrderMulti.Reserve().Delay())
case statsV1:
time.Sleep(r.Stats.Reserve().Delay())
case fundingbook:
time.Sleep(r.Fundingbook.Reserve().Delay())
case lends:
time.Sleep(r.Lends.Reserve().Delay())
default:
return errors.New("endpoint rate limit functionality not found")
}
return nil
}
// SetRateLimit returns the rate limit for the exchange
func SetRateLimit() *RateLimit {
return &RateLimit{
PlatformStatus: request.NewRateLimit(requestLimitInterval, platformStatusReqRate),
TickerBatch: request.NewRateLimit(requestLimitInterval, tickerBatchReqRate),
Ticker: request.NewRateLimit(requestLimitInterval, tickerReqRate),
Trade: request.NewRateLimit(requestLimitInterval, tradeReqRate),
Orderbook: request.NewRateLimit(requestLimitInterval, orderbookReqRate),
Stats: request.NewRateLimit(requestLimitInterval, statsReqRate),
Candle: request.NewRateLimit(requestLimitInterval, candleReqRate),
Configs: request.NewRateLimit(requestLimitInterval, configsReqRate),
Status: request.NewRateLimit(requestLimitInterval, statusReqRate),
Liquid: request.NewRateLimit(requestLimitInterval, liquidReqRate),
LeaderBoard: request.NewRateLimit(requestLimitInterval, leaderBoardReqRate),
MarketAveragePrice: request.NewRateLimit(requestLimitInterval, marketAveragePriceReqRate),
Fx: request.NewRateLimit(requestLimitInterval, fxReqRate),
AccountWalletBalance: request.NewRateLimit(requestLimitInterval, accountWalletBalanceReqRate),
AccountWalletHistory: request.NewRateLimit(requestLimitInterval, accountWalletHistoryReqRate),
// Orders -
RetrieveOrder: request.NewRateLimit(requestLimitInterval, retrieveOrderReqRate),
SubmitOrder: request.NewRateLimit(requestLimitInterval, submitOrderReqRate),
UpdateOrder: request.NewRateLimit(requestLimitInterval, updateOrderReqRate),
CancelOrder: request.NewRateLimit(requestLimitInterval, cancelOrderReqRate),
OrderBatch: request.NewRateLimit(requestLimitInterval, orderBatchReqRate),
CancelBatch: request.NewRateLimit(requestLimitInterval, cancelBatchReqRate),
OrderHistory: request.NewRateLimit(requestLimitInterval, orderHistoryReqRate),
GetOrderTrades: request.NewRateLimit(requestLimitInterval, getOrderTradesReqRate),
GetTrades: request.NewRateLimit(requestLimitInterval, getTradesReqRate),
GetLedgers: request.NewRateLimit(requestLimitInterval, getLedgersReqRate),
// Positions -
GetAccountMarginInfo: request.NewRateLimit(requestLimitInterval, getAccountMarginInfoReqRate),
GetActivePositions: request.NewRateLimit(requestLimitInterval, getActivePositionsReqRate),
ClaimPosition: request.NewRateLimit(requestLimitInterval, claimPositionReqRate),
GetPositionHistory: request.NewRateLimit(requestLimitInterval, getPositionAuditReqRate),
GetPositionAudit: request.NewRateLimit(requestLimitInterval, getPositionAuditReqRate),
UpdateCollateralOnPosition: request.NewRateLimit(requestLimitInterval, updateCollateralOnPositionReqRate),
// Margin funding -
GetActiveFundingOffers: request.NewRateLimit(requestLimitInterval, getActiveFundingOffersReqRate),
SubmitFundingOffer: request.NewRateLimit(requestLimitInterval, submitFundingOfferReqRate),
CancelFundingOffer: request.NewRateLimit(requestLimitInterval, cancelFundingOfferReqRate),
CancelAllFundingOffer: request.NewRateLimit(requestLimitInterval, cancelAllFundingOfferReqRate),
CloseFunding: request.NewRateLimit(requestLimitInterval, closeFundingReqRate),
FundingAutoRenew: request.NewRateLimit(requestLimitInterval, fundingAutoRenewReqRate),
KeepFunding: request.NewRateLimit(requestLimitInterval, keepFundingReqRate),
GetOffersHistory: request.NewRateLimit(requestLimitInterval, getOffersHistoryReqRate),
GetFundingLoans: request.NewRateLimit(requestLimitInterval, getOffersHistoryReqRate),
GetFundingLoanHistory: request.NewRateLimit(requestLimitInterval, getFundingLoanHistoryReqRate),
GetFundingCredits: request.NewRateLimit(requestLimitInterval, getFundingCreditsReqRate),
GetFundingCreditsHistory: request.NewRateLimit(requestLimitInterval, getFundingCreditsHistoryReqRate),
GetFundingTrades: request.NewRateLimit(requestLimitInterval, getFundingTradesReqRate),
GetFundingInfo: request.NewRateLimit(requestLimitInterval, getFundingInfoReqRate),
// Account actions
GetUserInfo: request.NewRateLimit(requestLimitInterval, getUserInfoReqRate),
TransferBetweenWallets: request.NewRateLimit(requestLimitInterval, transferBetweenWalletsReqRate),
GetDepositAddress: request.NewRateLimit(requestLimitInterval, getDepositAddressReqRate),
Withdrawal: request.NewRateLimit(requestLimitInterval, withdrawalReqRate),
GetMovements: request.NewRateLimit(requestLimitInterval, getMovementsReqRate),
GetAlertList: request.NewRateLimit(requestLimitInterval, getAlertListReqRate),
SetPriceAlert: request.NewRateLimit(requestLimitInterval, setPriceAlertReqRate),
DeletePriceAlert: request.NewRateLimit(requestLimitInterval, deletePriceAlertReqRate),
GetBalanceForOrdersOffers: request.NewRateLimit(requestLimitInterval, getBalanceForOrdersOffersReqRate),
UserSettingsWrite: request.NewRateLimit(requestLimitInterval, userSettingsWriteReqRate),
UserSettingsRead: request.NewRateLimit(requestLimitInterval, userSettingsReadReqRate),
UserSettingsDelete: request.NewRateLimit(requestLimitInterval, userSettingsDeleteReqRate),
// Account V1 endpoints
GetAccountFees: request.NewRateLimit(requestLimitInterval, getAccountFeesReqRate),
GetWithdrawalFees: request.NewRateLimit(requestLimitInterval, getWithdrawalFeesReqRate),
GetAccountSummary: request.NewRateLimit(requestLimitInterval, getAccountSummaryReqRate),
NewDepositAddress: request.NewRateLimit(requestLimitInterval, newDepositAddressReqRate),
GetKeyPermissions: request.NewRateLimit(requestLimitInterval, getKeyPermissionsReqRate),
GetMarginInfo: request.NewRateLimit(requestLimitInterval, getMarginInfoReqRate),
GetAccountBalance: request.NewRateLimit(requestLimitInterval, getAccountBalanceReqRate),
WalletTransfer: request.NewRateLimit(requestLimitInterval, walletTransferReqRate),
WithdrawV1: request.NewRateLimit(requestLimitInterval, withdrawV1ReqRate),
OrderV1: request.NewRateLimit(requestLimitInterval, orderV1ReqRate),
OrderMulti: request.NewRateLimit(requestLimitInterval, orderMultiReqRate),
StatsV1: request.NewRateLimit(requestLimitInterval, statsV1ReqRate),
Fundingbook: request.NewRateLimit(requestLimitInterval, fundingbookReqRate),
Lends: request.NewRateLimit(requestLimitInterval, lendsReqRate),
}
}