mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-13 15:09:42 +00:00
* deribit implementation * add ws impll * cleanup * Update deribit_wrapper.go * Add missing endpoints * Fix config file * asset type update * Update code structure * Update authenticated private endpoints unit tests * Updating websocket * Updating websocket connection and subscription handling * Finishing up adding subscription push data * Adding websocket public endpoint * Adding WS endpoints * Adding websocket unit tests * Minor clean-up * Integrating websocket endpoints into the wrapper funcs * Updating exchange documentations * Fixing test issues * Code cleaning-up * fix test issues * Updating validations and logic errors * Updating wrapper issues * fix test issues * Slight test update * Unit test and code structure update * Update websocket tempos * Slight update on code structure * Minor update on unit tests * Update depending on review comments * Minor code fix and doc re-generating * Update on Candlestick wrapper functions * Minor updates * minor unit test updates * Minor updates on weboscket and unit tests * minor linter fix * codespell and rate limiter issues * single linter issue fix * adding rate limiter * Add ratelimiter to websocket conn and overall code update * fix websocket push data issue * Implementing missing wrapper function * Websocket fix * Minor update on missing endpoint and other * fixing websocket issues and cleaningup * Minor tempo fix * Minor linter issues * unit test update * Indexing error fix * Websocket connection fix * string formatting fix * Small fix on unit tests * fix minor json conversion issue * websocket and documentation update * websocket, wrapper and unit test updates * Documentation and unit tests update * Fix unit tests * wrapper fix for new change * Unit test fix * timestamp conversion and unit tests update * Minor instrument ID conversion fix * instrument formats and unit test update * formatting and unit test fix * config update * Updating websocket and adding the Spot support * Add small unit test fix * unit test and websocket handlers update * Linter issues fix * minor documentation and code update * Minor fix * added a wrapper func GetLatestFundingRates * Types, wrapper update, and unit tests * Minor config update * fix wrapper unit tests * Resolve all panic and wrapper test issues * minor unit test fix * fix issues and adding newly added endpoints * updates and added remaining endpoints with unit tests * Update unit tests using assert * Added missing endpoints and unit tests * Minor updates and clean-ups * Resolve tradable pair fetching panic * Mutex fix * Added Options assets test and minor fixes * subscription mothod updated * Remove misadded code lines * resolve websocket * Updating tests, types, endpoint methods and others * Added GetFuturesContractDetails and minor fix * fix linter issue * revert change on candlestic time * Added filters to candles * minor unit test and wrapper fix * Minor unit tests update * cahnge param key for GetOrderMarginByID * updating unit tests and resolve issues * Update websocket unit tests * Minor fix based on review * Revert unit test change * fix pair config issue * Added missing wrapper functions * Fix missing review changes * Fix options request pair formatting * fix AllExchangeWrappers test issue * Changes with unit test and wrapper based on the review * Fix to options reg-exp * wrapper functions fix * Update MaximumFundingRateHistory filter and minor fixes * Fix besed on review comment * Fix issues on review comment * linter fix * fix minor unit test issue * Fix unit test issues * Update trade order cancellation responses * fix config files issue * lint update config files * Update unit tests * Update return values and response handling * added missing endpoint and fixes based on review comment * toggle useTestNet back * Update cancel by label and other fix * fix forgotten cancel all response type * update CancelResp type * Fix unmarshaling error * updated websocket orderbook load issue * fix websocket lock and groups * Change Items to Tranche and fix linter issues * Fix orderbook issue * Update unit tests offline error handling, and endpoints argument and error handling * Contributors documentation update and change error return type * Updated unit tests based on review comment * Update unit tests and removed password change endpoint * Fix race condition * Update on tests, test pairs, and wrapper config * Update test tradable pairs loading * Update unit tests, fix linter issues, and update wrapper functions * remove credentials * Update test and fix authentication method and few authenticated endpoints * fix codespell issue * group the repeated currency code check to a func * added unit test for repeated pair check func * Added a base coin and related updates --------- Co-authored-by: E Sequeira <earncef@earncef.com>
250 lines
6.3 KiB
Go
250 lines
6.3 KiB
Go
package asset
|
|
|
|
import (
|
|
"encoding/json"
|
|
"errors"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
var (
|
|
// ErrNotSupported is an error for an unsupported asset type
|
|
ErrNotSupported = errors.New("unsupported asset type")
|
|
// ErrNotEnabled is an error for an asset not enabled
|
|
ErrNotEnabled = errors.New("asset type not enabled")
|
|
// ErrInvalidAsset is returned when the assist isn't valid
|
|
ErrInvalidAsset = errors.New("asset is invalid")
|
|
)
|
|
|
|
// Item stores the asset type
|
|
type Item uint32
|
|
|
|
// Items stores a list of assets types
|
|
type Items []Item
|
|
|
|
// Const vars for asset package
|
|
const (
|
|
Empty Item = 0
|
|
Spot Item = 1 << iota
|
|
Margin
|
|
CrossMargin
|
|
MarginFunding
|
|
Index
|
|
Binary
|
|
PerpetualContract
|
|
PerpetualSwap
|
|
Futures
|
|
DeliveryFutures
|
|
UpsideProfitContract
|
|
DownsideProfitContract
|
|
CoinMarginedFutures
|
|
USDTMarginedFutures
|
|
USDCMarginedFutures
|
|
Options
|
|
OptionCombo
|
|
FutureCombo
|
|
|
|
// Added to represent a USDT and USDC based linear derivatives(futures/perpetual) assets in Bybit V5.
|
|
LinearContract
|
|
|
|
optionsFlag = OptionCombo | Options
|
|
futuresFlag = PerpetualContract | PerpetualSwap | Futures | DeliveryFutures | UpsideProfitContract | DownsideProfitContract | CoinMarginedFutures | USDTMarginedFutures | USDCMarginedFutures | LinearContract | FutureCombo
|
|
supportedFlag = Spot | Margin | CrossMargin | MarginFunding | Index | Binary | PerpetualContract | PerpetualSwap | Futures | DeliveryFutures | UpsideProfitContract | DownsideProfitContract | CoinMarginedFutures | USDTMarginedFutures | USDCMarginedFutures | Options | LinearContract | OptionCombo | FutureCombo
|
|
|
|
spot = "spot"
|
|
margin = "margin"
|
|
crossMargin = "cross_margin" // for Gateio exchange
|
|
marginFunding = "marginfunding"
|
|
index = "index"
|
|
binary = "binary"
|
|
perpetualContract = "perpetualcontract"
|
|
perpetualSwap = "perpetualswap"
|
|
swap = "swap"
|
|
futures = "futures"
|
|
deliveryFutures = "delivery"
|
|
upsideProfitContract = "upsideprofitcontract"
|
|
downsideProfitContract = "downsideprofitcontract"
|
|
coinMarginedFutures = "coinmarginedfutures"
|
|
usdtMarginedFutures = "usdtmarginedfutures"
|
|
usdcMarginedFutures = "usdcmarginedfutures"
|
|
options = "options"
|
|
optionCombo = "option_combo"
|
|
futureCombo = "future_combo"
|
|
)
|
|
|
|
var (
|
|
supportedList = Items{Spot, Margin, CrossMargin, MarginFunding, Index, Binary, PerpetualContract, PerpetualSwap, Futures, DeliveryFutures, UpsideProfitContract, DownsideProfitContract, CoinMarginedFutures, USDTMarginedFutures, USDCMarginedFutures, Options, LinearContract, OptionCombo, FutureCombo}
|
|
)
|
|
|
|
// Supported returns a list of supported asset types
|
|
func Supported() Items {
|
|
return supportedList
|
|
}
|
|
|
|
// String converts an Item to its string representation
|
|
func (a Item) String() string {
|
|
switch a {
|
|
case Spot:
|
|
return spot
|
|
case Margin:
|
|
return margin
|
|
case CrossMargin:
|
|
return crossMargin
|
|
case MarginFunding:
|
|
return marginFunding
|
|
case Index:
|
|
return index
|
|
case Binary:
|
|
return binary
|
|
case PerpetualContract:
|
|
return perpetualContract
|
|
case PerpetualSwap:
|
|
return perpetualSwap
|
|
case Futures:
|
|
return futures
|
|
case DeliveryFutures:
|
|
return deliveryFutures
|
|
case UpsideProfitContract:
|
|
return upsideProfitContract
|
|
case DownsideProfitContract:
|
|
return downsideProfitContract
|
|
case CoinMarginedFutures:
|
|
return coinMarginedFutures
|
|
case USDTMarginedFutures:
|
|
return usdtMarginedFutures
|
|
case USDCMarginedFutures:
|
|
return usdcMarginedFutures
|
|
case Options:
|
|
return options
|
|
case OptionCombo:
|
|
return optionCombo
|
|
case FutureCombo:
|
|
return futureCombo
|
|
default:
|
|
return ""
|
|
}
|
|
}
|
|
|
|
// Strings converts an asset type array to a string array
|
|
func (a Items) Strings() []string {
|
|
assets := make([]string, len(a))
|
|
for x := range a {
|
|
assets[x] = a[x].String()
|
|
}
|
|
return assets
|
|
}
|
|
|
|
// Contains returns whether or not the supplied asset exists
|
|
// in the list of Items
|
|
func (a Items) Contains(i Item) bool {
|
|
if i.IsValid() {
|
|
for x := range a {
|
|
if a[x] == i {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// JoinToString joins an asset type array and converts it to a string
|
|
// with the supplied separator
|
|
func (a Items) JoinToString(separator string) string {
|
|
return strings.Join(a.Strings(), separator)
|
|
}
|
|
|
|
// IsValid returns whether or not the supplied asset type is valid or
|
|
// not
|
|
func (a Item) IsValid() bool {
|
|
return a != Empty && supportedFlag&a == a
|
|
}
|
|
|
|
// UnmarshalJSON conforms type to the umarshaler interface
|
|
func (a *Item) UnmarshalJSON(d []byte) error {
|
|
var assetString string
|
|
err := json.Unmarshal(d, &assetString)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if assetString == "" {
|
|
return nil
|
|
}
|
|
|
|
ai, err := New(assetString)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
*a = ai
|
|
return nil
|
|
}
|
|
|
|
// MarshalJSON conforms type to the marshaller interface
|
|
func (a Item) MarshalJSON() ([]byte, error) {
|
|
return json.Marshal(a.String())
|
|
}
|
|
|
|
// New takes an input matches to relevant package assets
|
|
func New(input string) (Item, error) {
|
|
input = strings.ToLower(input)
|
|
switch input {
|
|
case spot:
|
|
return Spot, nil
|
|
case margin:
|
|
return Margin, nil
|
|
case marginFunding:
|
|
return MarginFunding, nil
|
|
case crossMargin:
|
|
return CrossMargin, nil
|
|
case deliveryFutures:
|
|
return DeliveryFutures, nil
|
|
case index:
|
|
return Index, nil
|
|
case binary:
|
|
return Binary, nil
|
|
case perpetualContract:
|
|
return PerpetualContract, nil
|
|
case perpetualSwap, swap:
|
|
return PerpetualSwap, nil
|
|
case futures:
|
|
return Futures, nil
|
|
case upsideProfitContract:
|
|
return UpsideProfitContract, nil
|
|
case downsideProfitContract:
|
|
return DownsideProfitContract, nil
|
|
case coinMarginedFutures:
|
|
return CoinMarginedFutures, nil
|
|
case usdtMarginedFutures:
|
|
return USDTMarginedFutures, nil
|
|
case usdcMarginedFutures:
|
|
return USDCMarginedFutures, nil
|
|
case options, "option":
|
|
return Options, nil
|
|
case optionCombo:
|
|
return OptionCombo, nil
|
|
case futureCombo:
|
|
return FutureCombo, nil
|
|
default:
|
|
return 0, fmt.Errorf("%w '%v', only supports %s",
|
|
ErrNotSupported,
|
|
input,
|
|
supportedList)
|
|
}
|
|
}
|
|
|
|
// UseDefault returns default asset type
|
|
func UseDefault() Item {
|
|
return Spot
|
|
}
|
|
|
|
// IsFutures checks if the asset type is a futures contract based asset
|
|
func (a Item) IsFutures() bool {
|
|
return a != Empty && futuresFlag&a == a
|
|
}
|
|
|
|
// IsOptions checks if the asset type is options contract based asset
|
|
func (a Item) IsOptions() bool {
|
|
return a != Empty && optionsFlag&a == a
|
|
}
|