1
This commit is contained in:
68
services/binanceservice/spotsymbolservice.go
Normal file
68
services/binanceservice/spotsymbolservice.go
Normal file
@ -0,0 +1,68 @@
|
||||
package binanceservice
|
||||
|
||||
import (
|
||||
"go-admin/models"
|
||||
"go-admin/models/spot"
|
||||
"go-admin/pkg/utility"
|
||||
"sync"
|
||||
|
||||
log "github.com/go-admin-team/go-admin-core/logger"
|
||||
)
|
||||
|
||||
var quoteAssetSymbols = []string{"USDT", "ETH", "BTC", "SOL", "BNB", "DOGE"}
|
||||
|
||||
func GetSpotSymbols() (map[string]models.TradeSet, []string, error) {
|
||||
spotApi := SpotRestApi{}
|
||||
symbols, err := spotApi.GetExchangeInfo()
|
||||
tradeSets := make(map[string]models.TradeSet, len(symbols))
|
||||
|
||||
if err != nil {
|
||||
log.Error("获取规范信息失败", err)
|
||||
return tradeSets, []string{}, err
|
||||
}
|
||||
|
||||
var wg sync.WaitGroup
|
||||
var mu sync.Mutex // 用于保护 tradeSets 的并发写入
|
||||
|
||||
for _, item := range symbols {
|
||||
if utility.ContainsStr(quoteAssetSymbols, item.QuoteAsset) && item.Status == "TRADING" && item.IsSpotTradingAllowed {
|
||||
wg.Add(1)
|
||||
go func(item spot.Symbol) {
|
||||
defer wg.Done()
|
||||
tradeSet := models.TradeSet{
|
||||
Coin: item.BaseAsset,
|
||||
Currency: item.QuoteAsset,
|
||||
}
|
||||
|
||||
for _, filter := range item.Filters {
|
||||
switch filter.FilterType {
|
||||
case "PRICE_FILTER":
|
||||
tradeSet.PriceDigit = utility.GetPrecision(filter.TickSize)
|
||||
tradeSet.MinBuyVal = utility.StringAsFloat(filter.MinPrice)
|
||||
case "LOT_SIZE":
|
||||
tradeSet.AmountDigit = utility.GetPrecision(filter.StepSize)
|
||||
tradeSet.MinQty = utility.StringAsFloat(filter.MinQty)
|
||||
tradeSet.MaxQty = utility.StringAsFloat(filter.MaxQty)
|
||||
}
|
||||
}
|
||||
|
||||
mu.Lock()
|
||||
tradeSets[item.Symbol] = tradeSet
|
||||
mu.Unlock()
|
||||
}(item)
|
||||
}
|
||||
}
|
||||
|
||||
wg.Wait() // 等待所有 goroutine 完成
|
||||
log.Info("初始化交易对")
|
||||
|
||||
deleteSymbols, err := spotApi.GetSpotTicker24h(&tradeSets)
|
||||
|
||||
if err != nil {
|
||||
log.Error("初始化币安现货交易对失败", err)
|
||||
return map[string]models.TradeSet{}, deleteSymbols, err
|
||||
} else {
|
||||
log.Info("初始化现货交易对完毕")
|
||||
return tradeSets, deleteSymbols, err
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user