Files
exchange_go/services/binanceservice/spot_callback.go
2025-03-27 16:18:32 +08:00

64 lines
2.3 KiB
Go

package binanceservice
import (
"go-admin/app/admin/models"
models2 "go-admin/models"
"go-admin/pkg/utility"
"go-admin/services/cacheservice"
"go-admin/services/positionservice"
"time"
"github.com/go-admin-team/go-admin-core/logger"
"github.com/shopspring/decimal"
"gorm.io/gorm"
)
// HandleMarketSliceTakeProfit
// @Description: 限价拆分为市价后处理止盈止损
func HandleSpotMarketSliceTakeProfit(db *gorm.DB, orderCopy models.LinePreOrder, extOrderId int, apiUserInfo models.LineApiUser, tradeSet models2.TradeSet) {
mainId := orderCopy.Id
if orderCopy.MainId > 0 {
mainId = orderCopy.MainId
}
totalNum := getSpotPositionAvailableQuantity(db, apiUserInfo, &orderCopy, tradeSet) //getSpotTotalNum(apiUserInfo, preOrder, tradeSet)
totalNum = totalNum.Mul(decimal.NewFromFloat(0.998)).Truncate(int32(tradeSet.AmountDigit))
nextSpotReduceTrigger(db, mainId, totalNum, tradeSet)
//延时执行
time.AfterFunc(15*time.Second, func() {
utility.SafeGo(func() {
orderExt := models.LinePreOrderExt{}
db.Model(&orderExt).Where("order_id =?", extOrderId).First(&orderExt)
positionService := positionservice.BinancePositionManagement{}
var side = ""
if orderCopy.OrderType != 0 {
if orderCopy.Site == "BUY" {
side = "SELL"
} else {
side = "BUY"
}
} else {
side = orderCopy.Site
}
positionData, err := positionService.GetPosition(orderCopy.ApiId, orderCopy.SymbolType, orderCopy.ExchangeType, orderCopy.Symbol, side)
if err != nil {
logger.Errorf("获取持仓信息失败,err:", err)
} else {
sysConfig := cacheservice.GetConfigCacheByKey(db, "market_take_profit_ratio")
stopSysConfig := cacheservice.GetConfigCacheByKey(db, "market_stop_loss_ratio")
marketTakeProfitRatio := utility.StrToDecimal(sysConfig.ConfigValue)
marketStopLossRatio := utility.StrToDecimal(stopSysConfig.ConfigValue)
totalNum := getSpotPositionAvailableQuantity(db, apiUserInfo, &orderCopy, tradeSet) //getSpotTotalNum(apiUserInfo, preOrder, tradeSet)
totalNum = totalNum.Mul(decimal.NewFromFloat(0.998)).Truncate(int32(tradeSet.AmountDigit))
SpotTakeProfit(db, &orderCopy, totalNum, positionData, orderExt, tradeSet, marketTakeProfitRatio, marketStopLossRatio)
}
})
})
}