package com.xcong.excoin.modules.gateApi; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.math.BigDecimal; /** * Gate 策略配置 DTO,用于 Web 控制面板参数传递。 * apiSecret 不暴露给前端。 */ @Data @Builder @NoArgsConstructor @AllArgsConstructor public class GateConfigDTO { /** API Key */ private String apiKey; /** 合约名称,如 ETH_USDT */ private String contract; /** 杠杆倍数 */ private String leverage; /** 保证金模式:cross / isolated */ private String marginMode; /** 持仓模式:single / dual */ private String positionMode; /** 网格间距比例 */ private BigDecimal gridRate; /** 预期收益(USDT) */ private BigDecimal expectedProfit; /** 最大亏损(USDT) */ private BigDecimal maxLoss; /** 基底开仓张数 */ private String baseQuantity; /** 每次下单张数 */ private String quantity; /** 最大持仓张数(单方向),0=不限制 */ private int maxPositionSize; /** 止损阶梯次数,0=禁用 */ private int stopLossCount; /** 策略重启跨度阈值,0=禁用 */ private int restartGridSpan; /** 价格精度 */ private int priceScale; /** 合约乘数 */ private BigDecimal contractMultiplier; /** 未实现盈亏计价模式:LAST_PRICE / MARK_PRICE */ private String unrealizedPnlPriceMode; /** 是否为生产环境 */ private boolean isProduction; /** * 从 GateConfig 构建 DTO(不暴露 apiSecret)。 */ public static GateConfigDTO from(GateConfig config) { return GateConfigDTO.builder() .apiKey(config.getApiKey()) .contract(config.getContract()) .leverage(config.getLeverage()) .marginMode(config.getMarginMode()) .positionMode(config.getPositionMode()) .gridRate(config.getGridRate()) .expectedProfit(config.getExpectedProfit()) .maxLoss(config.getMaxLoss()) .baseQuantity(config.getBaseQuantity()) .quantity(config.getQuantity()) .maxPositionSize(config.getMaxPositionSize()) .stopLossCount(config.getStopLossCount()) .restartGridSpan(config.getRestartGridSpan()) .priceScale(config.getPriceScale()) .contractMultiplier(config.getContractMultiplier()) .unrealizedPnlPriceMode(config.getUnrealizedPnlPriceMode() != null ? config.getUnrealizedPnlPriceMode().name() : "LAST_PRICE") .isProduction(config.isProduction()) .build(); } }