Administrator
7 days ago 7ebe033e5cf2011c76ce60c2bc0df3cb667f78e3
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -597,6 +597,23 @@
            return;
        }
        // [Gate-需求1] 多仓止盈触发:清空止盈状态 + 取消最远多仓止损
        GridElement longTpElem = GridElement.findByLongTakeProfitOrderId(orderId);
        if (longTpElem != null && StrUtil.isNotEmpty(tradeId) && !tradeId.equals("0")) {
            longTakeProfitTraderIdParam(longTpElem, null, false);
            log.info("[Gate] 多仓止盈触发 gridId:{}, orderId:{}", longTpElem.getId(), orderId);
            cancelFarthestLongStopLoss();
            return;
        }
        // [Gate-需求1] 空仓止盈触发:清空止盈状态 + 取消最远空仓止损
        GridElement shortTpElem = GridElement.findByShortTakeProfitOrderId(orderId);
        if (shortTpElem != null && StrUtil.isNotEmpty(tradeId) && !tradeId.equals("0")) {
            shortTakeProfitTraderIdParam(shortTpElem, null, false);
            log.info("[Gate] 空仓止盈触发 gridId:{}, orderId:{}", shortTpElem.getId(), orderId);
            cancelFarthestShortStopLoss();
            return;
        }
        GridElement longStopLossElem = GridElement.findByLongStopLossOrderId(orderId);
//        if (longStopLossElem != null && longPositionSize.compareTo(BigDecimal.ZERO) > 0 && StrUtil.isNotEmpty(tradeId) && !tradeId.equals("0")) {
        if (longStopLossElem != null && StrUtil.isNotEmpty(tradeId) && !tradeId.equals("0")) {
@@ -615,6 +632,8 @@
            if (shortGridElement.isHasShortOrder() && StrUtil.isNotEmpty(tradeId) && !tradeId.equals("0") ){
                int filledQty = Integer.parseInt(shortGridElement.getShortTraderParam().getQuantity());
                shortEntryTraderIdParam(shortGridElement, null, false);
                // [Gate-需求2] 加仓后先撤空仓所有止盈+止损,再重挂
                cancelAllShortTakeProfitsAndStopLosses();
                extendShortStopLoss(filledQty,shortGridElement.getId());
                accumulatedShortLossCount = 0; // 加仓订单成交,重置止损累计
                log.info("[Gate] 空单成交 gridId:{}", filledQty);
@@ -654,6 +673,8 @@
                int filledQty = Integer.parseInt(longGridElement.getLongTraderParam().getQuantity());
                longEntryTraderIdParam(longGridElement, null, false);
                // [Gate-需求2] 加仓后先撤多仓所有止盈+止损,再重挂
                cancelAllLongTakeProfitsAndStopLosses();
                extendLongStopLoss(filledQty,longGridElement.getId());
                accumulatedLongLossCount = 0; // 加仓订单成交,重置止损累计
                log.info("[Gate] 多单成交 gridId:{}", filledQty);
@@ -1246,8 +1267,9 @@
            furthestSlId = gridId;
            interval = 2;
        }
        log.info("[Gate] 多仓追挂止损, 当前最远止损gridId:{}, 追加{}张", furthestSlId, filledQty);
        for (int i = 0; i < filledQty; i++) {
        int stopLossCount = filledQty / Integer.parseInt(config.getQuantity());
        log.info("[Gate] 多仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}个止损单", furthestSlId, filledQty, stopLossCount);
        for (int i = 0; i < stopLossCount; i++) {
            int newSlId = furthestSlId - i - interval;
            GridElement elem = GridElement.findById(newSlId);
            if (elem == null) {
@@ -1282,8 +1304,9 @@
            furthestSlId = gridId;
            interval = 2;
        }
        log.info("[Gate] 空仓追挂止损, 当前最远止损gridId:{}, 追加{}张", furthestSlId, filledQty);
        for (int i = 0; i < filledQty; i++) {
        int stopLossCount = filledQty / Integer.parseInt(config.getQuantity());
        log.info("[Gate] 空仓追挂止损, 当前最远止损gridId:{}, 成交{}张, 追加{}个止损单", furthestSlId, filledQty, stopLossCount);
        for (int i = 0; i < stopLossCount; i++) {
            int newSlId = furthestSlId + i + interval;
            GridElement elem = GridElement.findById(newSlId);
            if (elem == null) {