This commit is contained in:
2025-02-11 18:03:30 +08:00
parent 18cbf359b7
commit 97037adbbb
6 changed files with 169 additions and 53 deletions

View File

@ -153,7 +153,7 @@ func JudgeFuturesReduce(trade models.TradeSet) {
}
db := GetDBConnection()
spotApi := SpotRestApi{}
futApi := FutRestApi{}
setting, err := GetSystemSetting(db)
if err != nil {
@ -161,13 +161,6 @@ func JudgeFuturesReduce(trade models.TradeSet) {
return
}
tradeSet, err := GetTradeSet(trade.Coin+trade.Currency, 0)
if err != nil {
log.Error("获取交易设置失败")
return
}
for _, item := range reduceVal {
reduceOrder := ReduceListItem{}
if err := sonic.Unmarshal([]byte(item), &reduceOrder); err != nil {
@ -184,14 +177,20 @@ func JudgeFuturesReduce(trade models.TradeSet) {
((strings.ToUpper(reduceOrder.Side) == "SELL" && orderPrice.Cmp(tradePrice) >= 0) ||
(strings.ToUpper(reduceOrder.Side) == "BUY" && orderPrice.Cmp(tradePrice) <= 0)) {
SpotReduceTrigger(db, reduceOrder, spotApi, setting, tradeSet, key, item)
FuturesReduceTrigger(db, reduceOrder, futApi, setting, key, item)
}
}
}
}
// 触发合约减仓
func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRestApi, setting DbModels.LineSystemSetting, tradeSet models.TradeSet, key, item string) {
func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRestApi, setting DbModels.LineSystemSetting, key, item string) {
tradeSet, _ := GetTradeSet(reduceOrder.Symbol, 1)
if tradeSet.LastPrice == "" {
return
}
lock := helper.NewRedisLock(fmt.Sprintf(rediskey.FutTrigger, reduceOrder.ApiId, reduceOrder.Symbol), 20, 5, 100*time.Millisecond)
if ok, err := lock.AcquireWait(context.Background()); err != nil {
@ -205,6 +204,13 @@ func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRes
return
}
hasrecord, _ := helper.DefaultRedis.IsElementInList(key, item)
if !hasrecord {
log.Debug("减仓缓存中不存在", item)
return
}
apiInfo, _ := GetApiInfo(takeOrder.ApiId)
if apiInfo.Id == 0 {
@ -216,7 +222,8 @@ func FuturesReduceTrigger(db *gorm.DB, reduceOrder ReduceListItem, futApi FutRes
for x := 1; x <= 4; x++ {
err = futApi.CancelFutOrder(apiInfo, takeOrder.Symbol, takeOrder.OrderSn)
if err == nil {
if err == nil || strings.Contains(err.Error(), "取消订单被拒绝") {
err = nil
break
}