This commit is contained in:
2026-01-09 15:48:31 +08:00
parent e32eabbf95
commit c8e189e9c7
28 changed files with 2795 additions and 0 deletions

166
market/setting.go Normal file
View File

@@ -0,0 +1,166 @@
package market
import (
"encoding/json"
"log"
"sync"
"git.apinb.com/bsm-sdk/core/utils"
)
var (
AllowSymbolsEndpoint string = "http://market.senlin.ai/symbols/allow"
SymbolsSettingEndpoint string = "http://market.senlin.ai/symbols/get/"
AllowSymbols *symbols
)
type PairSetting struct {
Symbol string `json:"symbol"`
PricePrecision int `json:"pricePrecision"` // 价格小数点位数
QuantityPrecision int `json:"quantityPrecision"` // 数量小数点位数
MinNotional float64 `json:"minNotional"` // 最小名义价值
MinTradeNum float64 `json:"minTradeNum"` // 最小开单数量(基础币)
BaseAssetPrecision int `json:"baseAssetPrecision"` // 标的资产精度
Commit string `json:"commit"` // 备注
Level int `json:"level"` // 仓位等级
MinClosePrecision float64 `json:"minClosePrecision"` // 平仓利润率百分比
TickSize float64 `json:"tickSize"` // 最小价格变动单位
//LowestPrice float64 `json:"lowestPrice"` // 最低价,低位不做空
//HightPrice float64 `json:"hightPrice"` // 最高价,高位不做多
//MaxMarginSize float64 `json:"maxMarginSize"` // 最大仓位
}
type symbols struct {
sync.RWMutex
Data map[string]*PairSetting
}
func NewAllowAllSymbols() {
AllowSymbols = &symbols{
Data: make(map[string]*PairSetting),
}
}
func (m *symbols) Set(symbol string, setting *PairSetting) {
m.Lock()
defer m.Unlock()
m.Data[symbol] = setting
}
func (m *symbols) Get(symbol string) *PairSetting {
m.RLock()
defer m.RUnlock()
return m.Data[symbol]
}
func (m *symbols) Del(symbol string) {
m.Lock()
defer m.Unlock()
delete(m.Data, symbol)
}
func (m *symbols) SetData(Data map[string]*PairSetting) {
m.RLock()
defer m.RUnlock()
m.Data = Data
}
func (m *symbols) All() map[string]*PairSetting {
m.RLock()
defer m.RUnlock()
return m.Data
}
// 读取行情接口,返回行情接口的最小止盈百分比
func FetchMarketSymbolsSetting(leverage int) ([]string, map[string]*PairSetting, error) {
var data map[string]*PairSetting
body, err := utils.HttpGet(AllowSymbolsEndpoint)
if err != nil {
return nil, nil, err
}
log.Println("AllowSymbolsSetting", string(body))
err = json.Unmarshal(body, &data)
if err != nil {
return nil, nil, err
}
var symboles []string
for k, val := range data {
data[k].MinClosePrecision = val.MinClosePrecision * float64(leverage) // 根据杠杆调整最小平仓利润率
symboles = append(symboles, k)
}
return symboles, data, nil
}
// 读取行情接口,不处理最小止盈百分比
func FetchMarketSymbolsSetting_V2(leverage int) (map[string]*PairSetting, error) {
var data map[string]*PairSetting
body, err := utils.HttpGet(AllowSymbolsEndpoint)
if err != nil {
return nil, err
}
log.Println("AllowSymbolsSetting", string(body))
err = json.Unmarshal(body, &data)
if err != nil {
return nil, err
}
return data, nil
}
func InitAllowSymbolsSetting(posSymbols []string) (map[string]*PairSetting, error) {
data := make(map[string]*PairSetting)
for _, symbol := range posSymbols {
if _, ok := data[symbol]; !ok {
var pairSetting PairSetting
body, err := utils.HttpGet(SymbolsSettingEndpoint + symbol)
if err != nil {
return nil, err
}
err = json.Unmarshal(body, &pairSetting)
if err != nil {
return nil, err
}
data[symbol] = &pairSetting
}
}
AllowSymbols.SetData(data)
log.Println("GetAllowSymbolsSetting Lenght:", len(data))
return data, nil
}
func RefreshAllowSymbolsSetting(posSymbols []string) error {
var data map[string]*PairSetting
body, err := utils.HttpGet(AllowSymbolsEndpoint)
if err != nil {
return err
}
log.Println("AllowSymbolsSetting", string(body))
err = json.Unmarshal(body, &data)
if err != nil {
return err
}
for _, symbol := range posSymbols {
if _, ok := data[symbol]; !ok {
var pairSetting PairSetting
body, err := utils.HttpGet(SymbolsSettingEndpoint + symbol)
if err != nil {
return err
}
err = json.Unmarshal(body, &pairSetting)
if err != nil {
return err
}
data[symbol] = &pairSetting
}
}
AllowSymbols.SetData(data)
log.Println("RefreshAllowSymbolsSetting Lenght:", len(data))
return nil
}