| | |
| | | .priceScale(GateWebSocketClientManager.DEFAULT_PRICE_SCALE) |
| | | .contractMultiplier(new BigDecimal(GateWebSocketClientManager.DEFAULT_CONTRACT_MULTIPLIER)) |
| | | .unrealizedPnlPriceMode(GateConfig.PnLPriceMode.valueOf(GateWebSocketClientManager.DEFAULT_PNL_MODE)) |
| | | .isProduction(true) |
| | | .isProduction(false) |
| | | .reopenMaxRetries(GateWebSocketClientManager.DEFAULT_REOPEN_MAX_RETRIES) |
| | | // 可调参数 — 从 DTO 读取 |
| | | .gridRate(nvl(dto.getGridRate(), new BigDecimal("0.005"))) |
| | |
| | | .quantity(nvl(dto.getQuantity(), "2")) |
| | | .maxPositionSize(dto.getMaxPositionSize()) |
| | | .stopLossCount(dto.getStopLossCount()) |
| | | .takeProfitGridSpan(dto.getTakeProfitGridSpan()) |
| | | .priceDriveEnabled(nvl(dto.getPriceDriveEnabled(), true)) |
| | | .rounds(dto.getRounds()) |
| | | .stopLossCountMode(nvl(dto.getStopLossCountMode(), "dual")) |
| | | .addPositionInterval(dto.getAddPositionInterval() >= 0 ? dto.getAddPositionInterval() : 3) |
| | | .addPositionQuantity(dto.getAddPositionQuantity() > 0 ? dto.getAddPositionQuantity() : 1) |
| | | .maxPositionPerSide(dto.getMaxPositionPerSide()) |
| | | .addPositionStartThreshold(dto.getAddPositionStartThreshold() >= 0 ? dto.getAddPositionStartThreshold() : 1) |
| | | .placeExcessTakeProfit(normalizeTakeProfitMode(dto.getPlaceExcessTakeProfit())) |
| | | .dualStopLossEnabled(nvl(dto.getDualStopLossEnabled(), false)) |
| | | .longStopLossPrice(dto.getLongStopLossPrice()) |
| | | .shortStopLossPrice(dto.getShortStopLossPrice()) |
| | | .build(); |
| | | } |
| | | |
| | |
| | | private static <T> T nvl(T value, T fallback) { |
| | | return value != null ? value : fallback; |
| | | } |
| | | |
| | | /** |
| | | * 归一化止盈挂单模式,兼容旧版 boolean 配置(旧 JSON 的 true/false 会被 Jackson 反序列化为字符串)。 |
| | | */ |
| | | private static String normalizeTakeProfitMode(String raw) { |
| | | if (raw == null || raw.trim().isEmpty()) { |
| | | return GateConfig.EXCESS_TP_OFF; |
| | | } |
| | | switch (raw.trim()) { |
| | | case "true": |
| | | case "concentrated": |
| | | return GateConfig.EXCESS_TP_CONCENTRATED; |
| | | case "dispersed": |
| | | return GateConfig.EXCESS_TP_DISPERSED; |
| | | default: |
| | | return GateConfig.EXCESS_TP_OFF; |
| | | } |
| | | } |
| | | } |