mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-17 07:26:48 +00:00
* Fix coinbene ticker pair parsing * Update swap path plus add get instruments method * Fix tests * Add additional swap ticker fields * Add endpoint to auth payload request
248 lines
10 KiB
Go
248 lines
10 KiB
Go
package coinbene
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
|
"golang.org/x/time/rate"
|
|
)
|
|
|
|
const (
|
|
// Contract rate limit time interval and request rates
|
|
contractRateInterval = time.Second * 2
|
|
orderbookContractReqRate = 20
|
|
tickersContractReqRate = 20
|
|
klineContractReqRate = 20
|
|
tradesContractReqRate = 20
|
|
contractInstrumentsReqRate = 20
|
|
contractAccountInfoContractReqRate = 10
|
|
positionInfoContractReqRate = 10
|
|
placeOrderContractReqRate = 20
|
|
cancelOrderContractReqRate = 20
|
|
getOpenOrdersContractReqRate = 5
|
|
openOrdersByPageContractReqRate = 5
|
|
getOrderInfoContractReqRate = 10
|
|
getClosedOrdersContractReqRate = 5
|
|
getClosedOrdersbyPageContractReqRate = 5
|
|
cancelMultipleOrdersContractReqRate = 5
|
|
getOrderFillsContractReqRate = 10
|
|
getFundingRatesContractReqRate = 10
|
|
|
|
// Spot rate limit time interval and request rates
|
|
spotRateInterval = time.Second
|
|
getPairsSpotReqRate = 2
|
|
getPairsInfoSpotReqRate = 3
|
|
getOrderbookSpotReqRate = 6
|
|
getTickerListSpotReqRate = 6
|
|
getSpecificTickerSpotReqRate = 6
|
|
getMarketTradesSpotReqRate = 3
|
|
// getKlineSpotReqRate = 1
|
|
// getExchangeRateSpotReqRate = 1
|
|
getAccountInfoSpotReqRate = 3
|
|
queryAccountAssetInfoSpotReqRate = 6
|
|
placeOrderSpotReqRate = 6
|
|
batchOrderSpotReqRate = 3
|
|
queryOpenOrdersSpotReqRate = 3
|
|
queryClosedOrdersSpotReqRate = 3
|
|
querySpecficOrderSpotReqRate = 6
|
|
queryTradeFillsSpotReqRate = 3
|
|
cancelOrderSpotReqRate = 6
|
|
cancelOrdersBatchSpotReqRate = 3
|
|
|
|
// Rate limit functionality
|
|
contractOrderbook request.EndpointLimit = iota
|
|
contractTickers
|
|
contractKline
|
|
contractTrades
|
|
contractInstruments
|
|
contractAccountInfo
|
|
contractPositionInfo
|
|
contractPlaceOrder
|
|
contractCancelOrder
|
|
contractGetOpenOrders
|
|
contractOpenOrdersByPage
|
|
contractGetOrderInfo
|
|
contractGetClosedOrders
|
|
contractGetClosedOrdersbyPage
|
|
contractCancelMultipleOrders
|
|
contractGetOrderFills
|
|
contractGetFundingRates
|
|
|
|
spotPairs
|
|
spotPairInfo
|
|
spotOrderbook
|
|
spotTickerList
|
|
spotSpecificTicker
|
|
spotMarketTrades
|
|
spotKline // Not implemented yet
|
|
spotExchangeRate // Not implemented yet
|
|
spotAccountInfo
|
|
spotAccountAssetInfo
|
|
spotPlaceOrder
|
|
spotBatchOrder
|
|
spotQueryOpenOrders
|
|
spotQueryClosedOrders
|
|
spotQuerySpecficOrder
|
|
spotQueryTradeFills
|
|
spotCancelOrder
|
|
spotCancelOrdersBatch
|
|
)
|
|
|
|
// RateLimit implements the request.Limiter interface
|
|
type RateLimit struct {
|
|
ContractOrderbook *rate.Limiter
|
|
ContractTickers *rate.Limiter
|
|
ContractKline *rate.Limiter
|
|
ContractTrades *rate.Limiter
|
|
ContractInstruments *rate.Limiter
|
|
ContractAccountInfo *rate.Limiter
|
|
ContractPositionInfo *rate.Limiter
|
|
ContractPlaceOrder *rate.Limiter
|
|
ContractCancelOrder *rate.Limiter
|
|
ContractGetOpenOrders *rate.Limiter
|
|
ContractOpenOrdersByPage *rate.Limiter
|
|
ContractGetOrderInfo *rate.Limiter
|
|
ContractGetClosedOrders *rate.Limiter
|
|
ContractGetClosedOrdersbyPage *rate.Limiter
|
|
ContractCancelMultipleOrders *rate.Limiter
|
|
ContractGetOrderFills *rate.Limiter
|
|
ContractGetFundingRates *rate.Limiter
|
|
SpotPairs *rate.Limiter
|
|
SpotPairInfo *rate.Limiter
|
|
SpotOrderbook *rate.Limiter
|
|
SpotTickerList *rate.Limiter
|
|
SpotSpecificTicker *rate.Limiter
|
|
SpotMarketTrades *rate.Limiter
|
|
// spotKline // Not implemented yet
|
|
// spotExchangeRate // Not implemented yet
|
|
SpotAccountInfo *rate.Limiter
|
|
SpotAccountAssetInfo *rate.Limiter
|
|
SpotPlaceOrder *rate.Limiter
|
|
SpotBatchOrder *rate.Limiter
|
|
SpotQueryOpenOrders *rate.Limiter
|
|
SpotQueryClosedOrders *rate.Limiter
|
|
SpotQuerySpecficOrder *rate.Limiter
|
|
SpotQueryTradeFills *rate.Limiter
|
|
SpotCancelOrder *rate.Limiter
|
|
SpotCancelOrdersBatch *rate.Limiter
|
|
}
|
|
|
|
// Limit limits outbound requests
|
|
func (r *RateLimit) Limit(f request.EndpointLimit) error {
|
|
switch f {
|
|
case contractOrderbook:
|
|
time.Sleep(r.ContractOrderbook.Reserve().Delay())
|
|
case contractTickers:
|
|
time.Sleep(r.ContractTickers.Reserve().Delay())
|
|
case contractKline:
|
|
time.Sleep(r.ContractKline.Reserve().Delay())
|
|
case contractTrades:
|
|
time.Sleep(r.ContractTrades.Reserve().Delay())
|
|
case contractInstruments:
|
|
time.Sleep(r.ContractInstruments.Reserve().Delay())
|
|
case contractAccountInfo:
|
|
time.Sleep(r.ContractAccountInfo.Reserve().Delay())
|
|
case contractPositionInfo:
|
|
time.Sleep(r.ContractPositionInfo.Reserve().Delay())
|
|
case contractPlaceOrder:
|
|
time.Sleep(r.ContractPlaceOrder.Reserve().Delay())
|
|
case contractCancelOrder:
|
|
time.Sleep(r.ContractCancelOrder.Reserve().Delay())
|
|
case contractGetOpenOrders:
|
|
time.Sleep(r.ContractGetOpenOrders.Reserve().Delay())
|
|
case contractOpenOrdersByPage:
|
|
time.Sleep(r.ContractOpenOrdersByPage.Reserve().Delay())
|
|
case contractGetOrderInfo:
|
|
time.Sleep(r.ContractGetOrderInfo.Reserve().Delay())
|
|
case contractGetClosedOrders:
|
|
time.Sleep(r.ContractGetClosedOrders.Reserve().Delay())
|
|
case contractGetClosedOrdersbyPage:
|
|
time.Sleep(r.ContractGetClosedOrdersbyPage.Reserve().Delay())
|
|
case contractCancelMultipleOrders:
|
|
time.Sleep(r.ContractCancelMultipleOrders.Reserve().Delay())
|
|
case contractGetOrderFills:
|
|
time.Sleep(r.ContractGetOrderFills.Reserve().Delay())
|
|
case contractGetFundingRates:
|
|
time.Sleep(r.ContractGetFundingRates.Reserve().Delay())
|
|
case spotPairs:
|
|
time.Sleep(r.SpotPairs.Reserve().Delay())
|
|
case spotPairInfo:
|
|
time.Sleep(r.SpotPairInfo.Reserve().Delay())
|
|
case spotOrderbook:
|
|
time.Sleep(r.SpotOrderbook.Reserve().Delay())
|
|
case spotTickerList:
|
|
time.Sleep(r.SpotTickerList.Reserve().Delay())
|
|
case spotSpecificTicker:
|
|
time.Sleep(r.SpotSpecificTicker.Reserve().Delay())
|
|
case spotMarketTrades:
|
|
time.Sleep(r.SpotMarketTrades.Reserve().Delay())
|
|
// case spotKline: // Not implemented yet
|
|
// time.Sleep(r.SpotKline.Reserve().Delay())
|
|
// case spotExchangeRate:
|
|
// time.Sleep(r.SpotExchangeRate.Reserve().Delay())
|
|
case spotAccountInfo:
|
|
time.Sleep(r.SpotAccountInfo.Reserve().Delay())
|
|
case spotAccountAssetInfo:
|
|
time.Sleep(r.SpotAccountAssetInfo.Reserve().Delay())
|
|
case spotPlaceOrder:
|
|
time.Sleep(r.SpotPlaceOrder.Reserve().Delay())
|
|
case spotBatchOrder:
|
|
time.Sleep(r.SpotBatchOrder.Reserve().Delay())
|
|
case spotQueryOpenOrders:
|
|
time.Sleep(r.SpotQueryOpenOrders.Reserve().Delay())
|
|
case spotQueryClosedOrders:
|
|
time.Sleep(r.SpotQueryClosedOrders.Reserve().Delay())
|
|
case spotQuerySpecficOrder:
|
|
time.Sleep(r.SpotQuerySpecficOrder.Reserve().Delay())
|
|
case spotQueryTradeFills:
|
|
time.Sleep(r.SpotQueryTradeFills.Reserve().Delay())
|
|
case spotCancelOrder:
|
|
time.Sleep(r.SpotCancelOrder.Reserve().Delay())
|
|
case spotCancelOrdersBatch:
|
|
time.Sleep(r.SpotCancelOrdersBatch.Reserve().Delay())
|
|
default:
|
|
return errors.New("rate limit error endpoint functionality not set")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// SetRateLimit returns the rate limit for the exchange
|
|
func SetRateLimit() *RateLimit {
|
|
return &RateLimit{
|
|
ContractOrderbook: request.NewRateLimit(contractRateInterval, orderbookContractReqRate),
|
|
ContractTickers: request.NewRateLimit(contractRateInterval, tickersContractReqRate),
|
|
ContractKline: request.NewRateLimit(contractRateInterval, klineContractReqRate),
|
|
ContractTrades: request.NewRateLimit(contractRateInterval, tradesContractReqRate),
|
|
ContractInstruments: request.NewRateLimit(contractRateInterval, contractInstrumentsReqRate),
|
|
ContractAccountInfo: request.NewRateLimit(contractRateInterval, contractAccountInfoContractReqRate),
|
|
ContractPositionInfo: request.NewRateLimit(contractRateInterval, positionInfoContractReqRate),
|
|
ContractPlaceOrder: request.NewRateLimit(contractRateInterval, placeOrderContractReqRate),
|
|
ContractCancelOrder: request.NewRateLimit(contractRateInterval, cancelOrderContractReqRate),
|
|
ContractGetOpenOrders: request.NewRateLimit(contractRateInterval, getOpenOrdersContractReqRate),
|
|
ContractOpenOrdersByPage: request.NewRateLimit(contractRateInterval, openOrdersByPageContractReqRate),
|
|
ContractGetOrderInfo: request.NewRateLimit(contractRateInterval, getOrderInfoContractReqRate),
|
|
ContractGetClosedOrders: request.NewRateLimit(contractRateInterval, getClosedOrdersContractReqRate),
|
|
ContractGetClosedOrdersbyPage: request.NewRateLimit(contractRateInterval, getClosedOrdersbyPageContractReqRate),
|
|
ContractCancelMultipleOrders: request.NewRateLimit(contractRateInterval, cancelMultipleOrdersContractReqRate),
|
|
ContractGetOrderFills: request.NewRateLimit(contractRateInterval, getOrderFillsContractReqRate),
|
|
ContractGetFundingRates: request.NewRateLimit(contractRateInterval, getFundingRatesContractReqRate),
|
|
SpotPairs: request.NewRateLimit(spotRateInterval, getPairsSpotReqRate),
|
|
SpotPairInfo: request.NewRateLimit(spotRateInterval, getPairsInfoSpotReqRate),
|
|
SpotOrderbook: request.NewRateLimit(spotRateInterval, getOrderbookSpotReqRate),
|
|
SpotTickerList: request.NewRateLimit(spotRateInterval, getTickerListSpotReqRate),
|
|
SpotSpecificTicker: request.NewRateLimit(spotRateInterval, getSpecificTickerSpotReqRate),
|
|
SpotMarketTrades: request.NewRateLimit(spotRateInterval, getMarketTradesSpotReqRate),
|
|
SpotAccountInfo: request.NewRateLimit(spotRateInterval, getAccountInfoSpotReqRate),
|
|
SpotAccountAssetInfo: request.NewRateLimit(spotRateInterval, queryAccountAssetInfoSpotReqRate),
|
|
SpotPlaceOrder: request.NewRateLimit(spotRateInterval, placeOrderSpotReqRate),
|
|
SpotBatchOrder: request.NewRateLimit(spotRateInterval, batchOrderSpotReqRate),
|
|
SpotQueryOpenOrders: request.NewRateLimit(spotRateInterval, queryOpenOrdersSpotReqRate),
|
|
SpotQueryClosedOrders: request.NewRateLimit(spotRateInterval, queryClosedOrdersSpotReqRate),
|
|
SpotQuerySpecficOrder: request.NewRateLimit(spotRateInterval, querySpecficOrderSpotReqRate),
|
|
SpotQueryTradeFills: request.NewRateLimit(spotRateInterval, queryTradeFillsSpotReqRate),
|
|
SpotCancelOrder: request.NewRateLimit(spotRateInterval, cancelOrderSpotReqRate),
|
|
SpotCancelOrdersBatch: request.NewRateLimit(spotRateInterval, cancelOrdersBatchSpotReqRate),
|
|
}
|
|
}
|