Administrator
2026-06-08 6775730a44ad9a564a0f6038f4d0b5e11e21833e
fix(gateApi): 修复网格交易盈亏计算逻辑

- 使用绝对值计算多仓和空仓总张数,避免负值影响手续费估算
- 在日志中增加总张数信息以便调试
- 确保平仓手续费计算基于实际持仓规模而非净持仓
1 files modified
9 ■■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 9 ●●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -1598,14 +1598,15 @@
            BigDecimal totalEquity = unrealisedPnl.add(available);
            // 估算平仓手续费:(多仓张数+空仓张数) × 合约面值 × 当前价 × taker费率
            BigDecimal closeContractValue = longPositionSize.add(shortPositionSize)
                    .multiply(CT_VAL).multiply(lastKlinePrice != null ? lastKlinePrice : BigDecimal.ZERO);
            BigDecimal totalSize = longPositionSize.abs().add(shortPositionSize.abs());
            BigDecimal closeContractValue =
                    totalSize.multiply(CT_VAL).multiply(lastKlinePrice != null ? lastKlinePrice : BigDecimal.ZERO);
            BigDecimal estimatedFee = closeContractValue.multiply(TAKER_FEE_RATE);
            BigDecimal netEquity = totalEquity.subtract(estimatedFee);
            BigDecimal target = initialPrincipal.add(config.getExpectedProfit());
            log.info("[Gate] 盈亏检查 upl:{}, avail:{}, 合计:{}, 估手续费:{}, 净权益:{}, 目标:{}",
                    unrealisedPnl, available, totalEquity, estimatedFee, netEquity, target);
            log.info("[Gate] 盈亏检查,总张数:{}, upl:{}, avail:{}, 合计:{}, 估手续费:{}, 净权益:{}, 目标:{}",
                    totalSize,unrealisedPnl, available, totalEquity, estimatedFee, netEquity, target);
            if (netEquity.compareTo(target) > 0) {
                log.info("[Gate] 盈亏达标(净权益{}>目标{}),重置策略", netEquity, target);
                state = StrategyState.STOPPED;