From 1819eaee93e47888dad4e1be4e3c611576426581 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sat, 09 May 2026 16:59:12 +0800
Subject: [PATCH] refactor(gateApi): 优化网格交易价格队列添加逻辑
---
src/main/java/com/xcong/excoin/modules/gateApi/GateConfig.java | 36 ++++++++++++++++++++++++++++++++++--
1 files changed, 34 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..ca6446c 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,13 +27,22 @@
* <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
+ }
/** Gate API v4 密钥 */
private final String apiKey;
@@ -58,6 +68,14 @@
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.apiKey = builder.apiKey;
@@ -72,6 +90,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;
}
/**
@@ -112,6 +134,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();
@@ -133,6 +159,10 @@
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 apiKey(String apiKey) { this.apiKey = apiKey; return this; }
public Builder apiSecret(String apiSecret) { this.apiSecret = apiSecret; return this; }
@@ -146,6 +176,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