64 lines
2.3 KiB
Go
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)
|
|
}
|
|
})
|
|
})
|
|
}
|