From 7001ba00b4d94fce6be117b37af5461ce5a4d34f Mon Sep 17 00:00:00 2001 From: thuanle Date: Mon, 27 Apr 2026 03:31:48 +0700 Subject: [PATCH] refactor binance symbol resolver --- internal/configs/binance/asset.go | 3 ++ internal/helper/binancex/resolver.go | 38 +++++++++++++++++++- internal/helper/binancex/symbol.go | 52 +++------------------------- 3 files changed, 44 insertions(+), 49 deletions(-) diff --git a/internal/configs/binance/asset.go b/internal/configs/binance/asset.go index c3a51ff..0d06e06 100644 --- a/internal/configs/binance/asset.go +++ b/internal/configs/binance/asset.go @@ -1,6 +1,9 @@ package binance var SymbolPrefixList = []string{"1000000", "1000", "1M"} + +var SymbolSuffixList = []string{"USDT", "USDC"} + var SymbolSuffixMap = map[string]string{ "USDT": "", "USDC": "c", diff --git a/internal/helper/binancex/resolver.go b/internal/helper/binancex/resolver.go index 817a2be..c60b0b1 100644 --- a/internal/helper/binancex/resolver.go +++ b/internal/helper/binancex/resolver.go @@ -3,11 +3,47 @@ package binancex import ( "strings" + "me.thuanle/bbot/internal/configs/binance" "me.thuanle/bbot/internal/data" + "me.thuanle/bbot/internal/utils/stringx" ) func Token2FutureSymbols(token string) []string { - return Token2Symbols(token) + var syms []string + if !stringx.IsAlphaNumeric(token) { + return syms + } + + token = strings.ToUpper(token) + + for _, prefix := range checkingPrefixList { + prefix = strings.ToUpper(prefix) + + s := prefix + token + + if data.Market.IsFuturesPair(s) { + syms = append(syms, s) + continue + } + + for _, suffix := range binance.SymbolSuffixList { + suffix = strings.ToUpper(suffix) + abbr := strings.ToUpper(binance.SymbolSuffixMap[suffix]) + + sym := s + suffix + if data.Market.IsFuturesPair(sym) { + syms = append(syms, sym) + continue + } + + symAbr, found := stringx.ReplaceSuffix(s, abbr, suffix) + if found && data.Market.IsFuturesPair(symAbr) { + syms = append(syms, symAbr) + continue + } + } + } + return syms } func Token2SpotSymbols(token string) []string { diff --git a/internal/helper/binancex/symbol.go b/internal/helper/binancex/symbol.go index 02287a4..b45c06d 100644 --- a/internal/helper/binancex/symbol.go +++ b/internal/helper/binancex/symbol.go @@ -14,7 +14,8 @@ func Symbol2Token(sym string) string { for _, prefix := range binance.SymbolPrefixList { token, _ = strings.CutPrefix(token, prefix) } - for suffix, abbr := range binance.SymbolSuffixMap { + for _, suffix := range binance.SymbolSuffixList { + abbr := binance.SymbolSuffixMap[suffix] var f bool token, f = stringx.ReplaceSuffix(token, suffix, abbr) if f { @@ -28,57 +29,12 @@ var ( checkingPrefixList = append(binance.SymbolPrefixList, "") ) -func testSym(sym string) bool { - return data.Market.IsFuturesPair(sym) -} - -func Token2Symbols(token string) []string { - var syms []string - if !stringx.IsAlphaNumeric(token) { - return syms - } - - token = strings.ToUpper(token) - - for _, prefix := range checkingPrefixList { - prefix = strings.ToUpper(prefix) - - s := prefix + token - - //no suffix - if testSym(s) { - syms = append(syms, s) - continue - } - - for suffix, abbr := range binance.SymbolSuffixMap { - suffix = strings.ToUpper(suffix) - abbr = strings.ToUpper(abbr) - - //suffix - sym := s + suffix - if testSym(sym) { - syms = append(syms, sym) - continue - } - - //suffix abbr - symAbr, found := stringx.ReplaceSuffix(s, abbr, suffix) - if found && testSym(symAbr) { - syms = append(syms, symAbr) - continue - } - } - } - return syms -} - func IsToken(s string) bool { // First check regular symbols - if len(Token2Symbols(s)) > 0 { + if len(Token2FutureSymbols(s)) > 0 { return true } - + // Then check Alpha tokens s = strings.ToUpper(s) return data.Market.IsAlphaToken(s)