package com.xcong.excoin.modules.okxApi; import java.math.BigDecimal; /** * OKX 模块统一配置。 * *

通过 Builder 模式集中管理所有运行参数,避免参数散落在多个文件中。 * 提供 REST API 和 WebSocket 地址的自动环境切换(模拟盘/实盘)。 * *

使用示例

*
 *   OkxConfig config = OkxConfig.builder()
 *       .apiKey("...")
 *       .secretKey("...")
 *       .passphrase("...")
 *       .contract("BTC-USDT-SWAP")
 *       .leverage("100")
 *       .gridRate(new BigDecimal("0.0035"))
 *       .contractMultiplier(new BigDecimal("1"))
 *       .isProduction(false)
 *       .build();
 *
 *   String wsKlineUrl = config.getWsKlineUrl();
 *   String wsPrivateUrl = config.getWsPrivateUrl();
 * 
* *

默认值

* * * @author Administrator */ public class OkxConfig { public enum PnLPriceMode { LAST_PRICE, MARK_PRICE } private final String apiKey; private final String secretKey; private final String passphrase; private final String contract; private final String leverage; private final String marginMode; private final String posMode; private final BigDecimal gridRate; private final BigDecimal overallTp; private final BigDecimal maxLoss; private final String quantity; private final boolean isProduction; private final int gridQueueSize; private final BigDecimal marginRatioLimit; private final BigDecimal contractMultiplier; private final PnLPriceMode unrealizedPnlPriceMode; private OkxConfig(Builder builder) { this.apiKey = builder.apiKey; this.secretKey = builder.secretKey; this.passphrase = builder.passphrase; this.contract = builder.contract; this.leverage = builder.leverage; this.marginMode = builder.marginMode; this.posMode = builder.posMode; this.gridRate = builder.gridRate; this.overallTp = builder.overallTp; this.maxLoss = builder.maxLoss; this.quantity = builder.quantity; this.isProduction = builder.isProduction; this.gridQueueSize = builder.gridQueueSize; this.marginRatioLimit = builder.marginRatioLimit; this.contractMultiplier = builder.contractMultiplier; this.unrealizedPnlPriceMode = builder.unrealizedPnlPriceMode; } // ==================== WS 地址 ==================== public String getWsKlineUrl() { return isProduction ? "wss://ws.okx.com:8443/ws/v5/business" : "wss://wspap.okx.com:8443/ws/v5/business"; } public String getWsPrivateUrl() { return isProduction ? "wss://ws.okx.com:8443/ws/v5/private" : "wss://wspap.okx.com:8443/ws/v5/private"; } // ==================== REST 地址 ==================== public String getRestBaseUrl() { return isProduction ? "https://www.okx.com" : "https://www.okx.cab"; } // ==================== 认证信息 ==================== public String getApiKey() { return apiKey; } public String getSecretKey() { return secretKey; } public String getPassphrase() { return passphrase; } // ==================== 交易标的 ==================== public String getContract() { return contract; } public String getLeverage() { return leverage; } // ==================== 持仓配置 ==================== public String getMarginMode() { return marginMode; } public String getPosMode() { return posMode; } // ==================== 策略参数 ==================== public BigDecimal getGridRate() { return gridRate; } public BigDecimal getOverallTp() { return overallTp; } public BigDecimal getMaxLoss() { return maxLoss; } public String getQuantity() { return quantity; } public int getGridQueueSize() { return gridQueueSize; } // ==================== 风险控制 ==================== public BigDecimal getMarginRatioLimit() { return marginRatioLimit; } // ==================== 盈亏计算 ==================== public BigDecimal getContractMultiplier() { return contractMultiplier; } public PnLPriceMode getUnrealizedPnlPriceMode() { return unrealizedPnlPriceMode; } // ==================== 环境 ==================== public boolean isProduction() { return isProduction; } public static Builder builder() { return new Builder(); } public static class Builder { private String apiKey; private String secretKey; private String passphrase; private String contract = "BTC-USDT-SWAP"; private String leverage = "100"; private String marginMode = "cross"; private String posMode = "long_short_mode"; private BigDecimal gridRate = new BigDecimal("0.0035"); private BigDecimal overallTp = new BigDecimal("5"); private BigDecimal maxLoss = new BigDecimal("15"); private String quantity = "1"; private boolean isProduction = false; private int gridQueueSize = 50; private BigDecimal marginRatioLimit = new BigDecimal("0.2"); private BigDecimal contractMultiplier = new BigDecimal("1"); private PnLPriceMode unrealizedPnlPriceMode = PnLPriceMode.LAST_PRICE; public Builder apiKey(String apiKey) { this.apiKey = apiKey; return this; } public Builder secretKey(String secretKey) { this.secretKey = secretKey; return this; } public Builder passphrase(String passphrase) { this.passphrase = passphrase; return this; } public Builder contract(String contract) { this.contract = contract; return this; } public Builder leverage(String leverage) { this.leverage = leverage; return this; } public Builder marginMode(String marginMode) { this.marginMode = marginMode; return this; } public Builder posMode(String posMode) { this.posMode = posMode; return this; } public Builder gridRate(BigDecimal gridRate) { this.gridRate = gridRate; return this; } public Builder overallTp(BigDecimal overallTp) { this.overallTp = overallTp; return this; } public Builder maxLoss(BigDecimal maxLoss) { this.maxLoss = maxLoss; return this; } public Builder quantity(String quantity) { this.quantity = quantity; return this; } public Builder isProduction(boolean isProduction) { this.isProduction = isProduction; return this; } public Builder contractMultiplier(BigDecimal contractMultiplier) { this.contractMultiplier = contractMultiplier; return this; } public Builder unrealizedPnlPriceMode(PnLPriceMode mode) { this.unrealizedPnlPriceMode = mode; return this; } public OkxConfig build() { return new OkxConfig(this); } } }