mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-16 07:26:47 +00:00
* 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
219 lines
7.4 KiB
Go
219 lines
7.4 KiB
Go
package exchange
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/thrasher-corp/gocryptotrader/config"
|
|
"github.com/thrasher-corp/gocryptotrader/currency"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/kline"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/protocol"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/request"
|
|
"github.com/thrasher-corp/gocryptotrader/exchanges/websocket/wshandler"
|
|
)
|
|
|
|
// Endpoint authentication types
|
|
const (
|
|
RestAuthentication uint8 = 0
|
|
WebsocketAuthentication uint8 = 1
|
|
// Repeated exchange strings
|
|
// FeeType custom type for calculating fees based on method
|
|
WireTransfer InternationalBankTransactionType = iota
|
|
PerfectMoney
|
|
Neteller
|
|
AdvCash
|
|
Payeer
|
|
Skrill
|
|
Simplex
|
|
SEPA
|
|
Swift
|
|
RapidTransfer
|
|
MisterTangoSEPA
|
|
Qiwi
|
|
VisaMastercard
|
|
WebMoney
|
|
Capitalist
|
|
WesternUnion
|
|
MoneyGram
|
|
Contact
|
|
// Const declarations for fee types
|
|
BankFee FeeType = iota
|
|
InternationalBankDepositFee
|
|
InternationalBankWithdrawalFee
|
|
CryptocurrencyTradeFee
|
|
CyptocurrencyDepositFee
|
|
CryptocurrencyWithdrawalFee
|
|
OfflineTradeFee
|
|
// Definitions for each type of withdrawal method for a given exchange
|
|
NoAPIWithdrawalMethods uint32 = 0
|
|
NoAPIWithdrawalMethodsText string = "NONE, WEBSITE ONLY"
|
|
AutoWithdrawCrypto uint32 = (1 << 0)
|
|
AutoWithdrawCryptoWithAPIPermission uint32 = (1 << 1)
|
|
AutoWithdrawCryptoWithSetup uint32 = (1 << 2)
|
|
AutoWithdrawCryptoText string = "AUTO WITHDRAW CRYPTO"
|
|
AutoWithdrawCryptoWithAPIPermissionText string = "AUTO WITHDRAW CRYPTO WITH API PERMISSION"
|
|
AutoWithdrawCryptoWithSetupText string = "AUTO WITHDRAW CRYPTO WITH SETUP"
|
|
WithdrawCryptoWith2FA uint32 = (1 << 3)
|
|
WithdrawCryptoWithSMS uint32 = (1 << 4)
|
|
WithdrawCryptoWithEmail uint32 = (1 << 5)
|
|
WithdrawCryptoWithWebsiteApproval uint32 = (1 << 6)
|
|
WithdrawCryptoWithAPIPermission uint32 = (1 << 7)
|
|
WithdrawCryptoWith2FAText string = "WITHDRAW CRYPTO WITH 2FA"
|
|
WithdrawCryptoWithSMSText string = "WITHDRAW CRYPTO WITH SMS"
|
|
WithdrawCryptoWithEmailText string = "WITHDRAW CRYPTO WITH EMAIL"
|
|
WithdrawCryptoWithWebsiteApprovalText string = "WITHDRAW CRYPTO WITH WEBSITE APPROVAL"
|
|
WithdrawCryptoWithAPIPermissionText string = "WITHDRAW CRYPTO WITH API PERMISSION"
|
|
AutoWithdrawFiat uint32 = (1 << 8)
|
|
AutoWithdrawFiatWithAPIPermission uint32 = (1 << 9)
|
|
AutoWithdrawFiatWithSetup uint32 = (1 << 10)
|
|
AutoWithdrawFiatText string = "AUTO WITHDRAW FIAT"
|
|
AutoWithdrawFiatWithAPIPermissionText string = "AUTO WITHDRAW FIAT WITH API PERMISSION"
|
|
AutoWithdrawFiatWithSetupText string = "AUTO WITHDRAW FIAT WITH SETUP"
|
|
WithdrawFiatWith2FA uint32 = (1 << 11)
|
|
WithdrawFiatWithSMS uint32 = (1 << 12)
|
|
WithdrawFiatWithEmail uint32 = (1 << 13)
|
|
WithdrawFiatWithWebsiteApproval uint32 = (1 << 14)
|
|
WithdrawFiatWithAPIPermission uint32 = (1 << 15)
|
|
WithdrawFiatWith2FAText string = "WITHDRAW FIAT WITH 2FA"
|
|
WithdrawFiatWithSMSText string = "WITHDRAW FIAT WITH SMS"
|
|
WithdrawFiatWithEmailText string = "WITHDRAW FIAT WITH EMAIL"
|
|
WithdrawFiatWithWebsiteApprovalText string = "WITHDRAW FIAT WITH WEBSITE APPROVAL"
|
|
WithdrawFiatWithAPIPermissionText string = "WITHDRAW FIAT WITH API PERMISSION"
|
|
WithdrawCryptoViaWebsiteOnly uint32 = (1 << 16)
|
|
WithdrawFiatViaWebsiteOnly uint32 = (1 << 17)
|
|
WithdrawCryptoViaWebsiteOnlyText string = "WITHDRAW CRYPTO VIA WEBSITE ONLY"
|
|
WithdrawFiatViaWebsiteOnlyText string = "WITHDRAW FIAT VIA WEBSITE ONLY"
|
|
NoFiatWithdrawals uint32 = (1 << 18)
|
|
NoFiatWithdrawalsText string = "NO FIAT WITHDRAWAL"
|
|
UnknownWithdrawalTypeText string = "UNKNOWN"
|
|
)
|
|
|
|
// FeeType is the type for holding a custom fee type (International withdrawal fee)
|
|
type FeeType uint8
|
|
|
|
// InternationalBankTransactionType custom type for calculating fees based on fiat transaction types
|
|
type InternationalBankTransactionType uint8
|
|
|
|
// FeeBuilder is the type which holds all parameters required to calculate a fee
|
|
// for an exchange
|
|
type FeeBuilder struct {
|
|
FeeType FeeType
|
|
// Used for calculating crypto trading fees, deposits & withdrawals
|
|
Pair currency.Pair
|
|
IsMaker bool
|
|
// Fiat currency used for bank deposits & withdrawals
|
|
FiatCurrency currency.Code
|
|
BankTransactionType InternationalBankTransactionType
|
|
// Used to multiply for fee calculations
|
|
PurchasePrice float64
|
|
Amount float64
|
|
}
|
|
|
|
// TradeHistory holds exchange history data
|
|
type TradeHistory struct {
|
|
Timestamp time.Time
|
|
TID string
|
|
Price float64
|
|
Amount float64
|
|
Exchange string
|
|
Type string
|
|
Side string
|
|
Fee float64
|
|
Description string
|
|
}
|
|
|
|
// FundHistory holds exchange funding history data
|
|
type FundHistory struct {
|
|
ExchangeName string
|
|
Status string
|
|
TransferID string
|
|
Description string
|
|
Timestamp time.Time
|
|
Currency string
|
|
Amount float64
|
|
Fee float64
|
|
TransferType string
|
|
CryptoToAddress string
|
|
CryptoFromAddress string
|
|
CryptoTxID string
|
|
BankTo string
|
|
BankFrom string
|
|
}
|
|
|
|
// Features stores the supported and enabled features
|
|
// for the exchange
|
|
type Features struct {
|
|
Supports FeaturesSupported
|
|
Enabled FeaturesEnabled
|
|
}
|
|
|
|
// FeaturesEnabled stores the exchange enabled features
|
|
type FeaturesEnabled struct {
|
|
AutoPairUpdates bool
|
|
Kline kline.ExchangeCapabilitiesEnabled
|
|
}
|
|
|
|
// FeaturesSupported stores the exchanges supported features
|
|
type FeaturesSupported struct {
|
|
REST bool
|
|
RESTCapabilities protocol.Features
|
|
Websocket bool
|
|
WebsocketCapabilities protocol.Features
|
|
WithdrawPermissions uint32
|
|
Kline kline.ExchangeCapabilitiesSupported
|
|
}
|
|
|
|
// API stores the exchange API settings
|
|
type API struct {
|
|
AuthenticatedSupport bool
|
|
AuthenticatedWebsocketSupport bool
|
|
PEMKeySupport bool
|
|
|
|
Endpoints struct {
|
|
URL string
|
|
URLDefault string
|
|
URLSecondary string
|
|
URLSecondaryDefault string
|
|
WebsocketURL string
|
|
}
|
|
|
|
Credentials struct {
|
|
Key string
|
|
Secret string
|
|
ClientID string
|
|
PEMKey string
|
|
}
|
|
|
|
CredentialsValidator struct {
|
|
// For Huobi (optional)
|
|
RequiresPEM bool
|
|
|
|
RequiresKey bool
|
|
RequiresSecret bool
|
|
RequiresClientID bool
|
|
RequiresBase64DecodeSecret bool
|
|
}
|
|
}
|
|
|
|
// Base stores the individual exchange information
|
|
type Base struct {
|
|
Name string
|
|
Enabled bool
|
|
Verbose bool
|
|
LoadedByConfig bool
|
|
SkipAuthCheck bool
|
|
API API
|
|
BaseCurrencies currency.Currencies
|
|
CurrencyPairs currency.PairsManager
|
|
Features Features
|
|
HTTPTimeout time.Duration
|
|
HTTPUserAgent string
|
|
HTTPRecording bool
|
|
HTTPDebugging bool
|
|
WebsocketResponseCheckTimeout time.Duration
|
|
WebsocketResponseMaxLimit time.Duration
|
|
WebsocketOrderbookBufferLimit int64
|
|
Websocket *wshandler.Websocket
|
|
*request.Requester
|
|
Config *config.ExchangeConfig
|
|
}
|