Files
gocryptotrader/common/key/key.go
Scott b71bf1f3d1 exchanges/futures: Implement open interest (#1417)
* adds open interest to exchanges

* ADDS TESTING YEAH

* New endpoints, BTSE, RPCS, cached

* slight design change, begin gateio

You will need to get cached for
each exchange that supports it

* gateio, huobi, rpc

* fix up kraken, cache retrieval

* okx, gateio

* finalising all implementations and tests

* definitely my final ever commit on this

* Well, well, well

* final v2

* quick fix of bug

* test coverage, assert notempty, test helper

Added a new testhelper for currency
management because its very annoying
in a parallel test setting which wastes
so much space otherwise

* minimises REST requests for Open Interest

* types.Number merge misses

* Minimises Kraken REST calls

* len change, value -> pointer receiver

* further fixup

* fixes gateio, batch calculates open interest

* single gateio, lint const fixes

* rejig and more thorough oi for huobi

* formatting expansion

* minor fix for handling expiring contracts

* rm unused Binance strings

* add bybit support, fix bybit issues

* oopsie doopsie, dont look at my whoopsie

* Fix issue, remove feature

* move an irrelevant function for the pr

* mini bybit upgrades

* fixes cli request bug
2024-01-12 15:27:35 +11:00

79 lines
2.0 KiB
Go

package key
import (
"strings"
"github.com/thrasher-corp/gocryptotrader/currency"
"github.com/thrasher-corp/gocryptotrader/exchanges/asset"
)
// ExchangePairAsset is a unique map key signature for exchange, currency pair and asset
type ExchangePairAsset struct {
Exchange string
Base *currency.Item
Quote *currency.Item
Asset asset.Item
}
// ExchangeAsset is a unique map key signature for exchange and asset
type ExchangeAsset struct {
Exchange string
Asset asset.Item
}
// PairAsset is a unique map key signature for currency pair and asset
type PairAsset struct {
Base *currency.Item
Quote *currency.Item
Asset asset.Item
}
// SubAccountCurrencyAsset is a unique map key signature for subaccount, currency code and asset
type SubAccountCurrencyAsset struct {
SubAccount string
Currency *currency.Item
Asset asset.Item
}
// Pair combines the base and quote into a pair
func (k *PairAsset) Pair() currency.Pair {
if k == nil || (k.Base == nil && k.Quote == nil) {
return currency.EMPTYPAIR
}
return currency.NewPair(k.Base.Currency(), k.Quote.Currency())
}
// Pair combines the base and quote into a pair
func (k *ExchangePairAsset) Pair() currency.Pair {
if k == nil || (k.Base == nil && k.Quote == nil) {
return currency.EMPTYPAIR
}
return currency.NewPair(k.Base.Currency(), k.Quote.Currency())
}
// MatchesExchangeAsset checks if the key matches the exchange and asset
func (k *ExchangePairAsset) MatchesExchangeAsset(exch string, item asset.Item) bool {
if k == nil {
return false
}
return strings.EqualFold(k.Exchange, exch) && k.Asset == item
}
// MatchesPairAsset checks if the key matches the pair and asset
func (k *ExchangePairAsset) MatchesPairAsset(pair currency.Pair, item asset.Item) bool {
if k == nil {
return false
}
return k.Base == pair.Base.Item &&
k.Quote == pair.Quote.Item &&
k.Asset == item
}
// MatchesExchange checks if the exchange matches
func (k *ExchangePairAsset) MatchesExchange(exch string) bool {
if k == nil {
return false
}
return strings.EqualFold(k.Exchange, exch)
}