src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java
@@ -140,8 +140,8 @@ private final boolean tpTriggerOppositeAddEnabled; /** 对向加仓挂单数量:止盈成交后在对向挂出的开仓张数,0=不启用。默认 0 */ private final int tpTriggerOppositeAddQuantity; /** 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数。默认 0 */ private final int baseTakeProfitPerGrid; /** 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数,支持小数。默认 0 */ private final BigDecimal baseTakeProfitPerGrid; /** 止盈网格数量:基础仓位止盈挂单的网格数量。默认 0 */ private final int baseTakeProfitGridCount; /** 网格绝对步长(shortBaseEntryPrice × gridRate),运行时由队列生成逻辑设置 */ @@ -310,7 +310,7 @@ /** @return 对向加仓挂单数量:止盈成交后在对向挂出的开仓张数 */ public int getTpTriggerOppositeAddQuantity() { return tpTriggerOppositeAddQuantity; } /** @return 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数 */ public int getBaseTakeProfitPerGrid() { return baseTakeProfitPerGrid; } public BigDecimal getBaseTakeProfitPerGrid() { return baseTakeProfitPerGrid; } /** @return 止盈网格数量:基础仓位止盈挂单的网格数量 */ public int getBaseTakeProfitGridCount() { return baseTakeProfitGridCount; } @@ -436,7 +436,7 @@ /** 对向加仓挂单数量:止盈成交后在对向挂出的开仓张数,默认 0 */ private int tpTriggerOppositeAddQuantity = 0; /** 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数,默认 0 */ private int baseTakeProfitPerGrid = 0; private BigDecimal baseTakeProfitPerGrid = BigDecimal.ZERO; /** 止盈网格数量:基础仓位止盈挂单的网格数量,默认 0 */ private int baseTakeProfitGridCount = 0; @@ -513,7 +513,7 @@ /** 设置对向加仓挂单数量:止盈成交后在对向挂出的开仓张数 */ public Builder tpTriggerOppositeAddQuantity(int tpTriggerOppositeAddQuantity) { this.tpTriggerOppositeAddQuantity = tpTriggerOppositeAddQuantity; return this; } /** 设置单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数 */ public Builder baseTakeProfitPerGrid(int baseTakeProfitPerGrid) { this.baseTakeProfitPerGrid = baseTakeProfitPerGrid; return this; } public Builder baseTakeProfitPerGrid(BigDecimal baseTakeProfitPerGrid) { this.baseTakeProfitPerGrid = baseTakeProfitPerGrid; return this; } /** 设置止盈网格数量:基础仓位止盈挂单的网格数量 */ public Builder baseTakeProfitGridCount(int baseTakeProfitGridCount) { this.baseTakeProfitGridCount = baseTakeProfitGridCount; return this; } src/main/java/com/xcong/excoin/modules/gateApi/GateConfigDTO.java
@@ -81,8 +81,8 @@ private Boolean tpTriggerOppositeAddEnabled; /** 对向加仓挂单数量:止盈成交后在对向挂出的开仓张数,0=不启用 */ private Integer tpTriggerOppositeAddQuantity; /** 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数,0=不启用 */ private Integer baseTakeProfitPerGrid; /** 单格止盈张数:基础仓位止盈挂单时每个网格挂的止盈张数,支持小数,0=不启用 */ private BigDecimal baseTakeProfitPerGrid; /** 止盈网格数量:基础仓位止盈挂单的网格数量,0=不启用 */ private Integer baseTakeProfitGridCount; @@ -198,7 +198,7 @@ .shortStopLossPrice(null) .tpTriggerOppositeAddEnabled(false) .tpTriggerOppositeAddQuantity(0) .baseTakeProfitPerGrid(0) .baseTakeProfitPerGrid(BigDecimal.ZERO) .baseTakeProfitGridCount(0) .build(); } src/main/java/com/xcong/excoin/modules/gateApi/GateConfigPersistenceService.java
@@ -117,7 +117,7 @@ .shortStopLossPrice(dto.getShortStopLossPrice()) .tpTriggerOppositeAddEnabled(nvl(dto.getTpTriggerOppositeAddEnabled(), false)) .tpTriggerOppositeAddQuantity(dto.getTpTriggerOppositeAddQuantity() != null && dto.getTpTriggerOppositeAddQuantity() > 0 ? dto.getTpTriggerOppositeAddQuantity() : 0) .baseTakeProfitPerGrid(dto.getBaseTakeProfitPerGrid() != null && dto.getBaseTakeProfitPerGrid() > 0 ? dto.getBaseTakeProfitPerGrid() : 0) .baseTakeProfitPerGrid(dto.getBaseTakeProfitPerGrid() != null && dto.getBaseTakeProfitPerGrid().compareTo(BigDecimal.ZERO) > 0 ? dto.getBaseTakeProfitPerGrid() : BigDecimal.ZERO) .baseTakeProfitGridCount(dto.getBaseTakeProfitGridCount() != null && dto.getBaseTakeProfitGridCount() > 0 ? dto.getBaseTakeProfitGridCount() : 0) .build(); } src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -3053,9 +3053,9 @@ * @param entryGridId 入场网格 ID */ private void placeBaseTakeProfit(int posSize, boolean isLong, int entryGridId) { int perGrid = config.getBaseTakeProfitPerGrid(); BigDecimal perGrid = config.getBaseTakeProfitPerGrid(); int gridCount = config.getBaseTakeProfitGridCount(); if (perGrid <= 0 || gridCount <= 0) { if (perGrid == null || perGrid.compareTo(BigDecimal.ZERO) <= 0 || gridCount <= 0) { return; } int baseQty = Integer.parseInt(config.getBaseQuantity()); @@ -3078,10 +3078,10 @@ // 分配范围到止损位的前一格截止(与分散止盈一致) int endId = endElem.getId() - dir; int remaining = maxQty; BigDecimal remaining = BigDecimal.valueOf(maxQty); int placed = 0; int id = startId; while (placed < gridCount && remaining > 0) { while (placed < gridCount && remaining.compareTo(BigDecimal.ZERO) > 0) { if (isLong ? id > endId : id < endId) { break; } @@ -3089,11 +3089,11 @@ if (elem == null) { break; } int qty = Math.min(perGrid, remaining); BigDecimal qty = perGrid.min(remaining); final GridElement fe = elem; final int gid = id; final BigDecimal triggerPrice = elem.getGridPrice(); final String size = isLong ? negate(String.valueOf(qty)) : String.valueOf(qty); final String size = isLong ? negate(qty.toPlainString()) : qty.toPlainString(); final String orderType = isLong ? ORDER_TYPE_CLOSE_LONG : ORDER_TYPE_CLOSE_SHORT; final FuturesPriceTrigger.RuleEnum rule = isLong ? FuturesPriceTrigger.RuleEnum.NUMBER_1 : FuturesPriceTrigger.RuleEnum.NUMBER_2; @@ -3108,7 +3108,7 @@ isLong ? "多仓" : "空仓", gid, triggerPrice, size, profitId); } ); remaining -= qty; remaining = remaining.subtract(qty); placed++; id += dir; }