Administrator
2026-06-04 4e8401a3b2022b7f4251035afa82baf0db5eca9f
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -305,7 +305,23 @@
        longPriceQueue.clear();
        currentLongOrderIds.clear();
        currentShortOrderIds.clear();
        log.info("[Gate] 网格策略已启动");
        // 每次重启重新获取当前本金
        refreshInitialPrincipal();
        log.info("[Gate] 网格策略已启动, 当前本金: {} USDT", initialPrincipal);
    }
    /**
     * 重新获取当前账户权益作为初始本金。
     */
    private void refreshInitialPrincipal() {
        try {
            FuturesAccount account = futuresApi.listFuturesAccounts(SETTLE);
            this.initialPrincipal = new BigDecimal(account.getTotal());
        } catch (Exception e) {
            log.warn("[Gate] 获取初始化本金失败,使用旧值: {}", initialPrincipal);
        }
    }
    /**
@@ -908,7 +924,7 @@
                        triggerPrice,
                        FuturesPriceTrigger.RuleEnum.NUMBER_1,
                        ORDER_TYPE_CLOSE_SHORT,
                        "1",
                        config.getQuantity(),
                        profitId -> {
                            elem.setShortStopLossOrderId(profitId);
                            GridElement.refreshIndices();
@@ -928,7 +944,7 @@
                        triggerPrice,
                        FuturesPriceTrigger.RuleEnum.NUMBER_2,
                        ORDER_TYPE_CLOSE_LONG,
                        "-1",
                        negate(config.getQuantity()),
                        profitId -> {
                            elem.setLongStopLossOrderId(profitId);
                            GridElement.refreshIndices();
@@ -1375,7 +1391,7 @@
        BigDecimal priceDiff = longEntryPrice.subtract(triggerPrice).abs();
        int entryQty = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
        entryQty = Math.max(1, entryQty);
        String size = String.valueOf(entryQty);
        String size = new BigDecimal(String.valueOf(entryQty)).multiply(new BigDecimal(config.getQuantity())).toString();
        log.info("[Gate] 多仓止损触发 gridId:{}, 在gridId:{}挂{}张多单, 均价:{}, 价差:{}, 步长:{}",
                gridId, newEntryGridId, entryQty, longEntryPrice, priceDiff, config.getStep());
        newEntryGrid.getLongTraderParam().setQuantity(size);
@@ -1415,7 +1431,7 @@
        BigDecimal priceDiff = shortEntryPrice.subtract(triggerPrice).abs();
        int entryQty = priceDiff.divide(config.getStep(), 0, RoundingMode.DOWN).intValue();
        entryQty = Math.max(1, entryQty);
        String size = String.valueOf(entryQty);
        String size = new BigDecimal(String.valueOf(entryQty)).multiply(new BigDecimal(config.getQuantity())).toString();
        log.info("[Gate] 空仓止损触发 gridId:{}, 在gridId:{}挂{}张空单, 均价:{}, 价差:{}, 步长:{}",
                gridId, newEntryGridId, entryQty, shortEntryPrice, priceDiff, config.getStep());
        newEntryGrid.getShortTraderParam().setQuantity(size);
@@ -1446,7 +1462,7 @@
                    triggerPrice,
                    FuturesPriceTrigger.RuleEnum.NUMBER_2,
                    ORDER_TYPE_CLOSE_LONG,
                    "-1",
                    negate(config.getQuantity()),
                    profitId -> {
                        elem.setLongStopLossOrderId(profitId);
                        GridElement.refreshIndices();
@@ -1479,7 +1495,7 @@
                    triggerPrice,
                    FuturesPriceTrigger.RuleEnum.NUMBER_1,
                    ORDER_TYPE_CLOSE_SHORT,
                    "1",
                    config.getQuantity(),
                    profitId -> {
                        elem.setShortStopLossOrderId(profitId);
                        GridElement.refreshIndices();