3 files modified
42 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 30 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java 1 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java 11 ●●●● patch | view | raw | blame | history
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();
src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
@@ -232,6 +232,7 @@
                    isConnected.set(false);
                }
            };
            webSocketClient.setConnectionLostTimeout(0);
            webSocketClient.connect();
        } catch (URISyntaxException e) {
            log.error("[WS] URI格式错误", e);
src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
@@ -60,16 +60,17 @@
        try {
            //实盘
            config = GateConfig.builder()
                    .apiKey("a2338398e00b7935104520e16be96918")
                    .apiSecret("9111d897f2346d5217619f2da76536632715fef4d7eb304c6c61e869a2a74e98")
                    .apiKey("08d6108fc29378fe64d6f0e89745b3fb")
                    .apiSecret("4d16e40117477a2344f6fd5872c5b075dc9664a599e65422d3e6791ff64379f1")
                    .contract("ETH_USDT")
                    .leverage("100")
                    .marginMode("CROSS")
                    .positionMode("dual")
                    .gridRate(new BigDecimal("0.0025"))
                    .expectedProfit(new BigDecimal("2"))
                    .maxLoss(new BigDecimal("15"))
                    .quantity("1")
                    .expectedProfit(new BigDecimal("3"))
                    .maxLoss(new BigDecimal("10"))
                    .baseQuantity("30")
                    .quantity("3")
                    .priceScale(2)
                    .contractMultiplier(new BigDecimal("0.01"))
                    .unrealizedPnlPriceMode(GateConfig.PnLPriceMode.LAST_PRICE)