From 60d0e9bd70f87de69b378ab63bac60394e3ff696 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 11 May 2026 11:31:52 +0800
Subject: [PATCH] feat(gate): 添加多账号支持和日志标签区分功能

---
 src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java
index 2a5317a..83e17d8 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java
@@ -16,6 +16,7 @@
  *       .contract("XAU_USDT")
  *       .leverage("100")
  *       .gridRate(new BigDecimal("0.0035"))
+ *       .contractMultiplier("0.001")
  *       .isProduction(false)
  *       .build();
  *
@@ -26,14 +27,25 @@
  * <h3>默认值</h3>
  * <ul>
  *   <li>合约: BTC_USDT, 杠杆: 10x, 全仓, 双向持仓</li>
- *   <li>网格: 0.35%, 止盈: 0.5 USDT, 亏损: 7.5 USDT</li>
- *   <li>数量: 1 张, 环境: 测试网, 重试: 3 次</li>
+ *   <li>网格间距: 0.35%, 队列容量: 50, 保证金比例上限: 20%</li>
+ *   <li>止盈: 0.5 USDT, 亏损上限: 7.5 USDT</li>
+ *   <li>数量: 1 张, 合约乘数: 0.001, 环境: 测试网</li>
  * </ul>
  *
  * @author Administrator
  */
 public class GateConfig {
 
+    /** 未实现盈亏计价模式 */
+    public enum PnLPriceMode {
+        /** 按最新成交价计算 */
+        LAST_PRICE,
+        /** 按标记价格计算 */
+        MARK_PRICE
+    }
+
+    /** 账号标签(用于日志区分多账号) */
+    private final String label;
     /** Gate API v4 密钥 */
     private final String apiKey;
     /** Gate API v4 签名密钥 */
@@ -58,8 +70,17 @@
     private final boolean isProduction;
     /** 补仓最大重试次数 */
     private final int reopenMaxRetries;
+    /** 网格队列容量 */
+    private final int gridQueueSize;
+    /** 保证金占初始本金比例上限 */
+    private final BigDecimal marginRatioLimit;
+    /** 合约乘数(单张合约代表的基础资产数量,如 BTC_USDT=0.001, ETH_USDT=0.01) */
+    private final BigDecimal contractMultiplier;
+    /** 未实现盈亏计价模式:最新价 / 标记价格 */
+    private final PnLPriceMode unrealizedPnlPriceMode;
 
     private GateConfig(Builder builder) {
+        this.label = builder.label;
         this.apiKey = builder.apiKey;
         this.apiSecret = builder.apiSecret;
         this.contract = builder.contract;
@@ -72,6 +93,10 @@
         this.quantity = builder.quantity;
         this.isProduction = builder.isProduction;
         this.reopenMaxRetries = builder.reopenMaxRetries;
+        this.gridQueueSize = builder.gridQueueSize;
+        this.marginRatioLimit = builder.marginRatioLimit;
+        this.contractMultiplier = builder.contractMultiplier;
+        this.unrealizedPnlPriceMode = builder.unrealizedPnlPriceMode;
     }
 
     /**
@@ -100,6 +125,7 @@
                 : "wss://ws-testnet.gate.com/v4/ws/futures/usdt";
     }
 
+    public String getLabel() { return label; }
     public String getApiKey() { return apiKey; }
     public String getApiSecret() { return apiSecret; }
     public String getContract() { return contract; }
@@ -112,6 +138,10 @@
     public String getQuantity() { return quantity; }
     public boolean isProduction() { return isProduction; }
     public int getReopenMaxRetries() { return reopenMaxRetries; }
+    public int getGridQueueSize() { return gridQueueSize; }
+    public BigDecimal getMarginRatioLimit() { return marginRatioLimit; }
+    public BigDecimal getContractMultiplier() { return contractMultiplier; }
+    public PnLPriceMode getUnrealizedPnlPriceMode() { return unrealizedPnlPriceMode; }
 
     public static Builder builder() {
         return new Builder();
@@ -121,6 +151,7 @@
      * GateConfig 的流式构造器,提供合理的默认值。
      */
     public static class Builder {
+        private String label = "default";
         private String apiKey;
         private String apiSecret;
         private String contract = "BTC_USDT";
@@ -133,7 +164,12 @@
         private String quantity = "1";
         private boolean isProduction = false;
         private int reopenMaxRetries = 3;
+        private int gridQueueSize = 50;
+        private BigDecimal marginRatioLimit = new BigDecimal("0.2");
+        private BigDecimal contractMultiplier = new BigDecimal("0.001");
+        private PnLPriceMode unrealizedPnlPriceMode = PnLPriceMode.LAST_PRICE;
 
+        public Builder label(String label) { this.label = label; return this; }
         public Builder apiKey(String apiKey) { this.apiKey = apiKey; return this; }
         public Builder apiSecret(String apiSecret) { this.apiSecret = apiSecret; return this; }
         public Builder contract(String contract) { this.contract = contract; return this; }
@@ -146,6 +182,8 @@
         public Builder quantity(String quantity) { this.quantity = quantity; return this; }
         public Builder isProduction(boolean isProduction) { this.isProduction = isProduction; return this; }
         public Builder reopenMaxRetries(int reopenMaxRetries) { this.reopenMaxRetries = reopenMaxRetries; return this; }
+        public Builder contractMultiplier(BigDecimal contractMultiplier) { this.contractMultiplier = contractMultiplier; return this; }
+        public Builder unrealizedPnlPriceMode(PnLPriceMode mode) { this.unrealizedPnlPriceMode = mode; return this; }
 
         public GateConfig build() {
             return new GateConfig(this);

--
Gitblit v1.9.1