| | |
| | | .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())) |
| | | .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; |
| | | } |
| | | } |
| | | } |