1
This commit is contained in:
@ -4,7 +4,6 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
DbModels "go-admin/app/admin/models"
|
||||
"go-admin/app/admin/service/dto"
|
||||
"go-admin/common/const/rediskey"
|
||||
commondto "go-admin/common/dto"
|
||||
"go-admin/common/global"
|
||||
@ -14,6 +13,7 @@ import (
|
||||
"go-admin/pkg/httputils"
|
||||
"go-admin/pkg/utility"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"gorm.io/gorm"
|
||||
@ -34,7 +34,7 @@ var ErrorMaps = map[float64]string{
|
||||
-1111: "金额设置错误。精度错误",
|
||||
-1021: "请求的时间戳在recvWindow之外",
|
||||
-2011: "该交易对没有订单",
|
||||
-2010: "账户余额不足",
|
||||
// -2010: "账户余额不足",
|
||||
}
|
||||
|
||||
type SpotRestApi struct {
|
||||
@ -174,6 +174,36 @@ func (e SpotRestApi) Ticker() {
|
||||
helper.DefaultRedis.SetString(rediskey.SpotSymbolTicker, string(mapData))
|
||||
}
|
||||
|
||||
// 循环下单
|
||||
func (e SpotRestApi) OrderPlaceLoop(db *gorm.DB, params OrderPlacementService, retryCount int) error {
|
||||
var err error
|
||||
err = e.OrderPlace(db, params)
|
||||
|
||||
if err != nil {
|
||||
//数量不正确
|
||||
if strings.Contains(err.Error(), "LOT_SIZE") {
|
||||
return err
|
||||
}
|
||||
|
||||
for x := 1; x <= retryCount; x++ {
|
||||
err = e.OrderPlace(db, params)
|
||||
if err == nil || strings.Contains(err.Error(), "LOT_SIZE") {
|
||||
break
|
||||
}
|
||||
|
||||
// if strings.Contains(err.Error(), "余额不足") {
|
||||
// apiUserInfo, _ := GetApiInfo(params.ApiId)
|
||||
// tradeset, _ := GetTradeSet(params.Symbol, 0)
|
||||
// num, _ := getSpotPositionNum(apiUserInfo, &DbModels.LinePreOrder{Symbol: params.Symbol, QuoteSymbol: "USDT", OrderSn: params.NewClientOrderId}, tradeset)
|
||||
// log.Info(" 循环下单 余额:%v", num)
|
||||
// }
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
// OrderPlace 现货下单
|
||||
func (e SpotRestApi) OrderPlace(orm *gorm.DB, params OrderPlacementService) error {
|
||||
if orm == nil {
|
||||
@ -476,15 +506,26 @@ func GetApiGroups() []commondto.ApiGroupDto {
|
||||
|
||||
// GetSpotSymbolLastPrice 获取现货交易对最新价格
|
||||
func (e SpotRestApi) GetSpotSymbolLastPrice(targetSymbol string) (lastPrice decimal.Decimal) {
|
||||
tickerSymbol := helper.DefaultRedis.Get(rediskey.SpotSymbolTicker).Val()
|
||||
tickerSymbolMaps := make([]dto.Ticker, 0)
|
||||
sonic.Unmarshal([]byte(tickerSymbol), &tickerSymbolMaps)
|
||||
//key := fmt.Sprintf("%s:%s", global.TICKER_SPOT, targetSymbol)
|
||||
//tradeSet, _ := helper.GetObjString[models.TradeSet](helper.DefaultRedis, key)
|
||||
for _, symbolMap := range tickerSymbolMaps {
|
||||
if symbolMap.Symbol == strings.ToUpper(targetSymbol) {
|
||||
lastPrice = utility.StringToDecimal(symbolMap.Price)
|
||||
key := fmt.Sprintf(global.TICKER_SPOT, global.EXCHANGE_BINANCE, targetSymbol)
|
||||
ticker, _ := helper.DefaultRedis.GetString(key)
|
||||
|
||||
if ticker != "" {
|
||||
tradeSet := models.TradeSet{}
|
||||
sonic.Unmarshal([]byte(ticker), &tradeSet)
|
||||
|
||||
if tradeSet.LastPrice != "" {
|
||||
lastPrice = utility.StrToDecimal(tradeSet.LastPrice).Truncate(int32(tradeSet.PriceDigit))
|
||||
}
|
||||
}
|
||||
// tickerSymbol := helper.DefaultRedis.Get(rediskey.SpotSymbolTicker).Val()
|
||||
// tickerSymbolMaps := make([]dto.Ticker, 0)
|
||||
// sonic.Unmarshal([]byte(tickerSymbol), &tickerSymbolMaps)
|
||||
// //key := fmt.Sprintf("%s:%s", global.TICKER_SPOT, targetSymbol)
|
||||
// //tradeSet, _ := helper.GetObjString[models.TradeSet](helper.DefaultRedis, key)
|
||||
// for _, symbolMap := range tickerSymbolMaps {
|
||||
// if symbolMap.Symbol == strings.ToUpper(targetSymbol) {
|
||||
// lastPrice = utility.StringToDecimal(symbolMap.Price)
|
||||
// }
|
||||
// }
|
||||
return lastPrice
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user