mirror of
https://github.com/d0zingcat/gocryptotrader.git
synced 2026-05-23 15:10:15 +00:00
currency: Adds matching lookup table built from available pairs (#1312)
* currency: Add pair matching update (cherry-pick) * exchange/currency: Add tests and update func * linter fix, also if using json unmarshal functionality stop usage of string conversion without delimiter * gemini: fix test * currency/manager: potential optimisation * exchanges: purge derive from wrapper cases and add warning comment * glorious: nits * glorious: nits * linter: fix * glorious: nits * whoops * whoops * glorious: nits continued * glorious: diff THANKS! * hitbtc: fix update tradable pairs strings splitting. continue if not enabled tickers update pair. * glorious: nits * linter: fix * Update exchanges/exmo/exmo_wrapper.go Co-authored-by: Scott <gloriousCode@users.noreply.github.com> * bitstamp: fix test when 32 biterinos architecturinos * capture more strings for speed * swapsies because whos running 32bit \0/? --------- Co-authored-by: Ryan O'Hara-Reid <ryan.oharareid@thrasher.io> Co-authored-by: Scott <gloriousCode@users.noreply.github.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
"unicode"
|
||||
|
||||
"github.com/thrasher-corp/gocryptotrader/common"
|
||||
"github.com/thrasher-corp/gocryptotrader/common/convert"
|
||||
@@ -1731,3 +1732,38 @@ func (b *Base) SetLeverage(_ context.Context, _ asset.Item, _ currency.Pair, _ m
|
||||
func (b *Base) GetLeverage(_ context.Context, _ asset.Item, _ currency.Pair, _ margin.Type, _ order.Side) (float64, error) {
|
||||
return -1, common.ErrNotYetImplemented
|
||||
}
|
||||
|
||||
// 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.
|
||||
func (b *Base) MatchSymbolWithAvailablePairs(symbol string, a asset.Item, hasDelimiter bool) (currency.Pair, error) {
|
||||
if hasDelimiter {
|
||||
for x := range symbol {
|
||||
if unicode.IsPunct(rune(symbol[x])) {
|
||||
symbol = symbol[:x] + symbol[x+1:]
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
return b.CurrencyPairs.Match(symbol, a)
|
||||
}
|
||||
|
||||
// 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.
|
||||
func (b *Base) MatchSymbolCheckEnabled(symbol string, a asset.Item, hasDelimiter bool) (pair currency.Pair, enabled bool, err error) {
|
||||
pair, err = b.MatchSymbolWithAvailablePairs(symbol, a, hasDelimiter)
|
||||
if err != nil {
|
||||
return pair, false, err
|
||||
}
|
||||
|
||||
enabled, err = b.IsPairEnabled(pair, a)
|
||||
return
|
||||
}
|
||||
|
||||
// IsPairEnabled checks if a pair is enabled for an enabled asset type.
|
||||
// TODO: Optimisation map for enabled pair matching, instead of linear traversal.
|
||||
func (b *Base) IsPairEnabled(pair currency.Pair, a asset.Item) (bool, error) {
|
||||
return b.CurrencyPairs.IsPairEnabled(pair, a)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user