refactor binance symbol resolver

This commit is contained in:
2026-04-27 03:31:48 +07:00
parent 47d07f2092
commit 2c5a9e23bf
3 changed files with 44 additions and 49 deletions
+3
View File
@@ -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",
+37 -1
View File
@@ -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 {
+4 -48
View File
@@ -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)