package com.xcong.excoin.modules.okxNewPrice; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * OKX 网格交易模块全局配置,策略的唯一参数入口。 * *

定位

* 通过 Builder 模式将所有运行参数集中管理,避免策略参数散落在多个类中。 * 运行时动态参数(step、gridElements、baseLongTraderParam、baseShortTraderParam) * 由 {@link OkxGridTradeService} 在策略执行过程中写入。 * *

参数分类

* * * * * * * * * *
类别参数用途
认证apiKey, secretKey, passphraseREST/WS 签名认证
交易标的instId, leverage, quantity, ctVal合约、杠杆、张数、面值
持仓tdMode, posSide全仓/逐仓、多/空
网格策略gridRate, gridQueueSize, priceScale间距比例、队列容量、价格精度
止盈止损expectedProfit, maxLoss整体止盈/亏损阈值(USDT),触发后策略重置
风控marginRatioLimit保证金占比上限
运行时step, gridElements, baseLongTraderParam, baseShortTraderParam由策略动态填充
* * @author Administrator */ public class OkxConfig { /** OKX API 密钥 */ private final String apiKey; /** OKX API 签名密钥 */ private final String secretKey; /** OKX API 密码短语 */ private final String passphrase; /** 合约名称(如 ETH-USDT-SWAP) */ private final String instId; /** 杠杆倍数 */ private final String leverage; /** 保证金模式(cross / isolated) */ private final String tdMode; /** 持仓方向(long / short),仅用于网格策略中的方向判定 */ private final String posSide; /** 网格间距比例(如 0.0025 表示 0.25%) */ private final BigDecimal gridRate; /** 预期收益(USDT),达到后自动重置策略 */ private final BigDecimal expectedProfit; /** 最大亏损阈值(USDT) */ private final BigDecimal maxLoss; /** 每次下单张数 */ private final String quantity; /** 基底开仓张数(初始化时多空各开的张数) */ private final String baseQuantity; /** 是否为模拟盘 */ private final boolean isSimulate; /** 网格队列容量 */ private final int gridQueueSize; /** 保证金占初始本金比例上限 */ private final BigDecimal marginRatioLimit; /** 合约面值(单张合约代表的基础资产数量,如 ETH=0.1, BTC=0.01) */ private final BigDecimal ctVal; /** 价格精度(交易所价格的最小小数位数,如 1=0.1精度,2=0.01精度) */ private final int priceScale; /** 网格绝对步长(shortBaseEntryPrice × gridRate),运行时由队列生成逻辑设置 */ private BigDecimal step; /** 网格元素列表,由队列初始化时同步填充 */ private volatile List gridElements = new ArrayList<>(); /** 基座多头挂单参数,在基座成交后填充 */ private OkxTraderParam baseLongTraderParam; /** 基座空头挂单参数,在基座成交后填充 */ private OkxTraderParam baseShortTraderParam; private OkxConfig(Builder builder) { this.apiKey = builder.apiKey; this.secretKey = builder.secretKey; this.passphrase = builder.passphrase; this.instId = builder.instId; this.leverage = builder.leverage; this.tdMode = builder.tdMode; this.posSide = builder.posSide; this.gridRate = builder.gridRate; this.expectedProfit = builder.expectedProfit; this.maxLoss = builder.maxLoss; this.quantity = builder.quantity; this.baseQuantity = builder.baseQuantity; this.isSimulate = builder.isSimulate; this.gridQueueSize = builder.gridQueueSize; this.marginRatioLimit = builder.marginRatioLimit; this.ctVal = builder.ctVal; this.priceScale = builder.priceScale; } // ==================== 认证信息 ==================== public String getApiKey() { return apiKey; } public String getSecretKey() { return secretKey; } public String getPassphrase() { return passphrase; } // ==================== 交易标的 ==================== public String getInstId() { return instId; } public String getLeverage() { return leverage; } public String getTdMode() { return tdMode; } public String getPosSide() { return posSide; } // ==================== 策略参数 ==================== public BigDecimal getGridRate() { return gridRate; } public BigDecimal getExpectedProfit() { return expectedProfit; } public BigDecimal getMaxLoss() { return maxLoss; } public String getQuantity() { return quantity; } public String getBaseQuantity() { return baseQuantity; } public int getGridQueueSize() { return gridQueueSize; } // ==================== 风控 ==================== public BigDecimal getMarginRatioLimit() { return marginRatioLimit; } public BigDecimal getCtVal() { return ctVal; } public int getPriceScale() { return priceScale; } // ==================== 环境 ==================== public boolean isSimulate() { return isSimulate; } // ==================== 运行时参数 ==================== public BigDecimal getStep() { return step; } public void setStep(BigDecimal step) { this.step = step; } public List getGridElements() { return gridElements; } public void setGridElements(List gridElements) { this.gridElements = gridElements; OkxGridElement.rebuildIndex(gridElements); } public OkxTraderParam getBaseLongTraderParam() { return baseLongTraderParam; } public void setBaseLongTraderParam(OkxTraderParam baseLongTraderParam) { this.baseLongTraderParam = baseLongTraderParam; } public OkxTraderParam getBaseShortTraderParam() { return baseShortTraderParam; } public void setBaseShortTraderParam(OkxTraderParam baseShortTraderParam) { this.baseShortTraderParam = baseShortTraderParam; } public static Builder builder() { return new Builder(); } public static class Builder { private String apiKey; private String secretKey; private String passphrase; private String instId = "ETH-USDT-SWAP"; private String leverage = "100"; private String tdMode = "cross"; private String posSide = "long"; private BigDecimal gridRate = new BigDecimal("0.0025"); private BigDecimal expectedProfit = new BigDecimal("2"); private BigDecimal maxLoss = new BigDecimal("15"); private String quantity = "1"; private String baseQuantity = "10"; private boolean isSimulate = false; private int gridQueueSize = 300; private BigDecimal marginRatioLimit = new BigDecimal("0.2"); private BigDecimal ctVal = new BigDecimal("0.1"); private int priceScale = 2; 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 instId(String instId) { this.instId = instId; return this; } public Builder leverage(String leverage) { this.leverage = leverage; return this; } public Builder tdMode(String tdMode) { this.tdMode = tdMode; return this; } public Builder posSide(String posSide) { this.posSide = posSide; return this; } public Builder gridRate(BigDecimal gridRate) { this.gridRate = gridRate; return this; } public Builder expectedProfit(BigDecimal expectedProfit) { this.expectedProfit = expectedProfit; return this; } public Builder maxLoss(BigDecimal maxLoss) { this.maxLoss = maxLoss; return this; } public Builder quantity(String quantity) { this.quantity = quantity; return this; } public Builder baseQuantity(String baseQuantity) { this.baseQuantity = baseQuantity; return this; } public Builder isSimulate(boolean isSimulate) { this.isSimulate = isSimulate; return this; } public Builder gridQueueSize(int gridQueueSize) { this.gridQueueSize = gridQueueSize; return this; } public Builder marginRatioLimit(BigDecimal marginRatioLimit) { this.marginRatioLimit = marginRatioLimit; return this; } public Builder ctVal(BigDecimal ctVal) { this.ctVal = ctVal; return this; } public Builder priceScale(int priceScale) { this.priceScale = priceScale; return this; } public OkxConfig build() { return new OkxConfig(this); } } }