mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-14 07:26:47 +00:00
* state: Add management system (init) * linter: fix * engine: gofmt * gct: after merge fixup * documentation: add * rpc: implement services for testing * gctcli: gofmt state_management.go * documentation: reinstate lost information * state: Add pair check to determine trading operation * exchanges: add interface for specific state scoped subsystem functionality * engine/order_man: reduce code footprint using new method * RPC: implement pair trading request and change exported name to something specific to state * engine: add tests * engine: Add to withdraw manager * documentation: reinstate soxipy in contrib. list * engine: const fake name * Glorious: NITERINOS * merge: fix issues * engine: csm incorporate service name into log output * engine: fix linter issues * gct: fix tests * currencystate: remove management type * rpc: fix tests * backtester: fix tests * Update engine/currency_state_manager.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update engine/currency_state_manager.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/currencystate/currency_state.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/alert/alert.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/alert/alert.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits * config: integrate with config and remove flag delay adjustment * gctcli: fix issues after name changes * engine: gofmt manager file * Update engine/rpcserver.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * engine: Add enable/disable manager functions, add default popoulation for potential assets * linter: fix * engine/test: bump subsystem count * Update engine/currency_state_manager.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * Update exchanges/bithumb/bithumb.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * glorious: nits addressed * alert: fix commenting for its generalized purpose * glorious: nits * engine: use standard string in log output * bitfinex: apply patch, thanks @thrasher- * bitfinex: fix spelling * engine/currencystate: Add logs/fix logs Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
107 lines
5.6 KiB
Go
107 lines
5.6 KiB
Go
package exchange
|
|
|
|
import (
|
|
"context"
|
|
"sync"
|
|
"time"
|
|
|
|
"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/currencystate"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/order"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/orderbook"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/stream"
|
|
"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.ExchangeConfig) error
|
|
Start(wg *sync.WaitGroup)
|
|
SetDefaults()
|
|
GetName() string
|
|
IsEnabled() bool
|
|
SetEnabled(bool)
|
|
ValidateCredentials(ctx context.Context, a asset.Item) error
|
|
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) ([]string, error)
|
|
UpdateTradablePairs(ctx context.Context, forceUpdate bool) error
|
|
GetEnabledPairs(a asset.Item) (currency.Pairs, error)
|
|
GetAvailablePairs(a asset.Item) (currency.Pairs, error)
|
|
FetchAccountInfo(ctx context.Context, a asset.Item) (account.Holdings, error)
|
|
UpdateAccountInfo(ctx context.Context, a asset.Item) (account.Holdings, error)
|
|
GetAuthenticatedAPISupport(endpoint uint8) bool
|
|
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)
|
|
SupportsAutoPairUpdates() bool
|
|
SupportsRESTTickerBatchUpdates() bool
|
|
GetFeeByType(ctx context.Context, f *FeeBuilder) (float64, error)
|
|
GetLastPairsUpdateTime() int64
|
|
GetWithdrawPermissions() uint32
|
|
FormatWithdrawPermissions() string
|
|
SupportsWithdrawPermissions(permissions uint32) bool
|
|
GetFundingHistory(ctx context.Context) ([]FundHistory, error)
|
|
SubmitOrder(ctx context.Context, s *order.Submit) (order.SubmitResponse, error)
|
|
ModifyOrder(ctx context.Context, action *order.Modify) (order.Modify, 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)
|
|
GetDepositAddress(ctx context.Context, cryptocurrency currency.Code, accountID string) (string, error)
|
|
GetOrderHistory(ctx context.Context, getOrdersRequest *order.GetOrdersRequest) ([]order.Detail, error)
|
|
GetWithdrawalsHistory(ctx context.Context, code currency.Code) ([]WithdrawalHistory, error)
|
|
GetActiveOrders(ctx context.Context, getOrdersRequest *order.GetOrdersRequest) ([]order.Detail, 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)
|
|
GetHTTPClientUserAgent() string
|
|
SetClientProxyAddress(addr string) error
|
|
SupportsREST() bool
|
|
GetSubscriptions() ([]stream.ChannelSubscription, error)
|
|
GetDefaultConfig() (*config.ExchangeConfig, error)
|
|
GetBase() *Base
|
|
SupportsAsset(assetType asset.Item) bool
|
|
GetHistoricCandles(ctx context.Context, p currency.Pair, a asset.Item, timeStart, timeEnd time.Time, interval kline.Interval) (kline.Item, error)
|
|
GetHistoricCandlesExtended(ctx context.Context, p currency.Pair, a asset.Item, timeStart, timeEnd time.Time, interval kline.Interval) (kline.Item, error)
|
|
DisableRateLimiter() error
|
|
EnableRateLimiter() error
|
|
|
|
GetWebsocket() (*stream.Websocket, error)
|
|
IsWebsocketEnabled() bool
|
|
SupportsWebsocket() bool
|
|
SubscribeToWebsocketChannels(channels []stream.ChannelSubscription) error
|
|
UnsubscribeToWebsocketChannels(channels []stream.ChannelSubscription) error
|
|
IsAssetWebsocketSupported(aType asset.Item) bool
|
|
FlushWebsocketChannels() error
|
|
AuthenticateWebsocket(ctx context.Context) error
|
|
|
|
GetOrderExecutionLimits(a asset.Item, cp currency.Pair) (*order.Limits, error)
|
|
CheckOrderExecutionLimits(a asset.Item, cp currency.Pair, price, amount float64, orderType order.Type) error
|
|
UpdateOrderExecutionLimits(ctx context.Context, a asset.Item) error
|
|
|
|
CurrencyStateManagement
|
|
}
|
|
|
|
// 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
|
|
}
|