mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 23:16:45 +00:00
Thusfar ExpandTemplates had only been called internally. All methods consumers might want to get, in this case GetPairFormat, need to be in the interface we're passing out, otherwise users can't call them (or things that use them, like ExpandTemplates)
200 lines
11 KiB
Go
200 lines
11 KiB
Go
package exchange
|
|
|
|
import (
|
|
"context"
|
|
"text/template"
|
|
"time"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/common/key"
|
|
"github.com/thrasher-corp/gocryptotrader/config"
|
|
"github.com/thrasher-corp/gocryptotrader/currency"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/account"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/collateral"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/currencystate"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/deposit"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/fundingrate"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/futures"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/margin"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/stream"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/subscription"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/ticker"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/trade"
|
|
"github.com/thrasher-corp/gocryptotrader/portfolio/withdraw"
|
|
)
|
|
|
|
// IBotExchange enforces standard functions for all exchanges supported in
|
|
// GoCryptoTrader
|
|
type IBotExchange interface {
|
|
Setup(exch *config.Exchange) error
|
|
Bootstrap(context.Context) (continueBootstrap bool, err error)
|
|
SetDefaults()
|
|
Shutdown() error
|
|
GetName() string
|
|
SetEnabled(bool)
|
|
|
|
GetEnabledFeatures() FeaturesEnabled
|
|
GetSupportedFeatures() FeaturesSupported
|
|
// GetTradingRequirements returns trading requirements for the exchange
|
|
GetTradingRequirements() protocol.TradingRequirements
|
|
|
|
FetchTicker(ctx context.Context, p currency.Pair, a asset.Item) (*ticker.Price, error)
|
|
UpdateTicker(ctx context.Context, p currency.Pair, a asset.Item) (*ticker.Price, error)
|
|
UpdateTickers(ctx context.Context, a asset.Item) error
|
|
FetchOrderbook(ctx context.Context, p currency.Pair, a asset.Item) (*orderbook.Base, error)
|
|
UpdateOrderbook(ctx context.Context, p currency.Pair, a asset.Item) (*orderbook.Base, error)
|
|
FetchTradablePairs(ctx context.Context, a asset.Item) (currency.Pairs, error)
|
|
UpdateTradablePairs(ctx context.Context, forceUpdate bool) error
|
|
GetEnabledPairs(a asset.Item) (currency.Pairs, error)
|
|
GetAvailablePairs(a asset.Item) (currency.Pairs, error)
|
|
GetPairFormat(asset.Item, bool) (currency.PairFormat, error)
|
|
SetPairs(pairs currency.Pairs, a asset.Item, enabled bool) error
|
|
GetAssetTypes(enabled bool) asset.Items
|
|
GetRecentTrades(ctx context.Context, p currency.Pair, a asset.Item) ([]trade.Data, error)
|
|
GetHistoricTrades(ctx context.Context, p currency.Pair, a asset.Item, startTime, endTime time.Time) ([]trade.Data, error)
|
|
GetFeeByType(ctx context.Context, f *FeeBuilder) (float64, error)
|
|
GetLastPairsUpdateTime() int64
|
|
GetWithdrawPermissions() uint32
|
|
FormatWithdrawPermissions() string
|
|
GetAccountFundingHistory(ctx context.Context) ([]FundingHistory, error)
|
|
GetDepositAddress(ctx context.Context, cryptocurrency currency.Code, accountID, chain string) (*deposit.Address, error)
|
|
GetAvailableTransferChains(ctx context.Context, cryptocurrency currency.Code) ([]string, error)
|
|
GetWithdrawalsHistory(ctx context.Context, code currency.Code, a asset.Item) ([]WithdrawalHistory, error)
|
|
WithdrawCryptocurrencyFunds(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error)
|
|
WithdrawFiatFunds(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error)
|
|
WithdrawFiatFundsToInternationalBank(ctx context.Context, withdrawRequest *withdraw.Request) (*withdraw.ExchangeResponse, error)
|
|
SetHTTPClientUserAgent(ua string) error
|
|
GetHTTPClientUserAgent() (string, error)
|
|
SetClientProxyAddress(addr string) error
|
|
GetBase() *Base
|
|
GetHistoricCandles(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error)
|
|
GetHistoricCandlesExtended(ctx context.Context, pair currency.Pair, a asset.Item, interval kline.Interval, start, end time.Time) (*kline.Item, error)
|
|
DisableRateLimiter() error
|
|
EnableRateLimiter() error
|
|
GetServerTime(ctx context.Context, ai asset.Item) (time.Time, error)
|
|
GetWebsocket() (*stream.Websocket, error)
|
|
SubscribeToWebsocketChannels(channels subscription.List) error
|
|
UnsubscribeToWebsocketChannels(channels subscription.List) error
|
|
GetSubscriptions() (subscription.List, error)
|
|
GetSubscriptionTemplate(*subscription.Subscription) (*template.Template, error)
|
|
FlushWebsocketChannels() error
|
|
AuthenticateWebsocket(ctx context.Context) error
|
|
CanUseAuthenticatedWebsocketEndpoints() bool
|
|
GetOrderExecutionLimits(a asset.Item, cp currency.Pair) (order.MinMaxLevel, error)
|
|
CheckOrderExecutionLimits(a asset.Item, cp currency.Pair, price, amount float64, orderType order.Type) error
|
|
UpdateOrderExecutionLimits(ctx context.Context, a asset.Item) error
|
|
GetCredentials(ctx context.Context) (*account.Credentials, error)
|
|
EnsureOnePairEnabled() error
|
|
PrintEnabledPairs()
|
|
IsVerbose() bool
|
|
GetCurrencyTradeURL(ctx context.Context, a asset.Item, cp currency.Pair) (string, error)
|
|
|
|
// ValidateAPICredentials function validates the API keys by sending an
|
|
// authenticated REST request. See exchange specific wrapper implementation.
|
|
ValidateAPICredentials(ctx context.Context, a asset.Item) error
|
|
// VerifyAPICredentials determines if the credentials supplied have unset
|
|
// required values. See exchanges/credentials.go Base method for
|
|
// implementation.
|
|
VerifyAPICredentials(creds *account.Credentials) error
|
|
// GetDefaultCredentials returns the exchange.Base api credentials loaded by
|
|
// config.json. See exchanges/credentials.go Base method for implementation.
|
|
GetDefaultCredentials() *account.Credentials
|
|
|
|
FunctionalityChecker
|
|
AccountManagement
|
|
OrderManagement
|
|
CurrencyStateManagement
|
|
FuturesManagement
|
|
MarginManagement
|
|
|
|
// MatchSymbolWithAvailablePairs returns a currency pair based on the supplied
|
|
// symbol and asset type. If the string is expected to have a delimiter this
|
|
// will attempt to screen it out.
|
|
MatchSymbolWithAvailablePairs(symbol string, a asset.Item, hasDelimiter bool) (currency.Pair, error)
|
|
// MatchSymbolCheckEnabled returns a currency pair based on the supplied symbol
|
|
// and asset type against the available pairs list. If the string is expected to
|
|
// have a delimiter this will attempt to screen it out. It will also check if
|
|
// the pair is enabled.
|
|
MatchSymbolCheckEnabled(symbol string, a asset.Item, hasDelimiter bool) (pair currency.Pair, enabled bool, err error)
|
|
// IsPairEnabled checks if a pair is enabled for an enabled asset type
|
|
IsPairEnabled(pair currency.Pair, a asset.Item) (bool, error)
|
|
}
|
|
|
|
// OrderManagement defines functionality for order management
|
|
type OrderManagement interface {
|
|
SubmitOrder(ctx context.Context, s *order.Submit) (*order.SubmitResponse, error)
|
|
ModifyOrder(ctx context.Context, action *order.Modify) (*order.ModifyResponse, error)
|
|
CancelOrder(ctx context.Context, o *order.Cancel) error
|
|
CancelBatchOrders(ctx context.Context, o []order.Cancel) (*order.CancelBatchResponse, error)
|
|
CancelAllOrders(ctx context.Context, orders *order.Cancel) (order.CancelAllResponse, error)
|
|
GetOrderInfo(ctx context.Context, orderID string, pair currency.Pair, assetType asset.Item) (*order.Detail, error)
|
|
GetActiveOrders(ctx context.Context, getOrdersRequest *order.MultiOrderRequest) (order.FilteredOrders, error)
|
|
GetOrderHistory(ctx context.Context, getOrdersRequest *order.MultiOrderRequest) (order.FilteredOrders, error)
|
|
}
|
|
|
|
// CurrencyStateManagement defines functionality for currency state management
|
|
type CurrencyStateManagement interface {
|
|
GetCurrencyStateSnapshot() ([]currencystate.Snapshot, error)
|
|
UpdateCurrencyStates(ctx context.Context, a asset.Item) error
|
|
CanTradePair(p currency.Pair, a asset.Item) error
|
|
CanTrade(c currency.Code, a asset.Item) error
|
|
CanWithdraw(c currency.Code, a asset.Item) error
|
|
CanDeposit(c currency.Code, a asset.Item) error
|
|
}
|
|
|
|
// AccountManagement defines functionality for exchange account management
|
|
type AccountManagement interface {
|
|
UpdateAccountInfo(ctx context.Context, a asset.Item) (account.Holdings, error)
|
|
FetchAccountInfo(ctx context.Context, a asset.Item) (account.Holdings, error)
|
|
HasAssetTypeAccountSegregation() bool
|
|
}
|
|
|
|
// FunctionalityChecker defines functionality for retrieving exchange
|
|
// support/enabled features
|
|
type FunctionalityChecker interface {
|
|
IsEnabled() bool
|
|
IsAssetWebsocketSupported(a asset.Item) bool
|
|
SupportsAsset(assetType asset.Item) bool
|
|
SupportsREST() bool
|
|
SupportsWithdrawPermissions(permissions uint32) bool
|
|
SupportsRESTTickerBatchUpdates() bool
|
|
IsWebsocketEnabled() bool
|
|
SupportsWebsocket() bool
|
|
SupportsAutoPairUpdates() bool
|
|
IsWebsocketAuthenticationSupported() bool
|
|
IsRESTAuthenticationSupported() bool
|
|
}
|
|
|
|
// FuturesManagement manages futures orders, pnl and collateral calculations
|
|
type FuturesManagement interface {
|
|
GetOpenInterest(context.Context, ...key.PairAsset) ([]futures.OpenInterest, error)
|
|
ScaleCollateral(ctx context.Context, calculator *futures.CollateralCalculator) (*collateral.ByCurrency, error)
|
|
GetPositionSummary(context.Context, *futures.PositionSummaryRequest) (*futures.PositionSummary, error)
|
|
CalculateTotalCollateral(context.Context, *futures.TotalCollateralCalculator) (*futures.TotalCollateralResponse, error)
|
|
GetFuturesPositions(context.Context, *futures.PositionsRequest) ([]futures.PositionDetails, error)
|
|
GetHistoricalFundingRates(context.Context, *fundingrate.HistoricalRatesRequest) (*fundingrate.HistoricalRates, error)
|
|
GetLatestFundingRates(context.Context, *fundingrate.LatestRateRequest) ([]fundingrate.LatestRateResponse, error)
|
|
IsPerpetualFutureCurrency(asset.Item, currency.Pair) (bool, error)
|
|
GetCollateralCurrencyForContract(asset.Item, currency.Pair) (currency.Code, asset.Item, error)
|
|
|
|
GetFuturesPositionSummary(context.Context, *futures.PositionSummaryRequest) (*futures.PositionSummary, error)
|
|
GetFuturesPositionOrders(context.Context, *futures.PositionsRequest) ([]futures.PositionResponse, error)
|
|
SetCollateralMode(ctx context.Context, item asset.Item, mode collateral.Mode) error
|
|
GetCollateralMode(ctx context.Context, item asset.Item) (collateral.Mode, error)
|
|
SetLeverage(ctx context.Context, item asset.Item, pair currency.Pair, marginType margin.Type, amount float64, orderSide order.Side) error
|
|
GetLeverage(ctx context.Context, item asset.Item, pair currency.Pair, marginType margin.Type, orderSide order.Side) (float64, error)
|
|
}
|
|
|
|
// MarginManagement manages margin positions and rates
|
|
type MarginManagement interface {
|
|
SetMarginType(ctx context.Context, item asset.Item, pair currency.Pair, tp margin.Type) error
|
|
ChangePositionMargin(ctx context.Context, change *margin.PositionChangeRequest) (*margin.PositionChangeResponse, error)
|
|
GetMarginRatesHistory(context.Context, *margin.RateHistoryRequest) (*margin.RateHistoryResponse, error)
|
|
futures.PNLCalculation
|
|
GetFuturesContractDetails(ctx context.Context, item asset.Item) ([]futures.Contract, error)
|
|
}
|