From e88414aaa42a9c5e9bf0fb70ea986d07e2883402 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Sat, 09 May 2026 18:07:29 +0800
Subject: [PATCH] refactor(gateApi): 优化期货交易配置和日志记录

---
 src/main/java/com/xcong/excoin/modules/gateApi/Example.java                    |   74 +++++++++++++++++++------------------
 src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java       |    2 
 src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java |    2 
 3 files changed, 40 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/Example.java b/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
index 5839cf6..7cafc94 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
@@ -9,9 +9,13 @@
 import io.gate.gateapi.auth.*;
 import io.gate.gateapi.models.*;
 import io.gate.gateapi.api.AccountApi;
+import lombok.extern.slf4j.Slf4j;
 
 import java.io.IOException;
+import java.math.BigDecimal;
 
+
+@Slf4j
 public class Example {
     public static void main(String[] args) {
         ApiClient defaultClient = Configuration.getDefaultApiClient();
@@ -23,50 +27,48 @@
 
         try {
 
-            String contract = "BTC_USDT";
-            String settle = "usdt";
+            String CONTRACT = "BTC_USDT";
+            String SETTLE = "usdt";
             //保证金模式 isolated/cross
-            String marginMode = "cross";
-            AccountApi accountApi = new AccountApi(defaultClient);
-            AccountDetail accountDetail = accountApi.getAccountDetail();
-            System.out.println(accountDetail.toString());
-
-
-            /**
-             * 获取账户余额
-             */
+            String MARGINMODE = "CROSS";
+            String LEVERAGE = "50";
             FuturesApi futuresApi = new FuturesApi(defaultClient);
-            FuturesAccount futuresAccount = futuresApi.listFuturesAccounts(settle);
-            String available = futuresAccount.getAvailable();
-            String result = "可用余额:" + available;
-            System.out.println(result);
+            FuturesAccount account = futuresApi.listFuturesAccounts(SETTLE);
+            log.info("[Gate] 初始本金: {} USDT", account.getTotal());
 
-            /**
-             * 设置仓位模式
-             * 可选值:single, dual, dual_plus,分别表示单向、双向、分仓
-             */
-
-            String position_mode = "dual";
-            String positionMode = futuresAccount.getPositionMode();
-            if (!position_mode.equals(positionMode)){
-                futuresApi.setPositionMode(settle, position_mode);
+            //设置持仓模式为双向持仓
+            Boolean inDualMode = account.getInDualMode();
+            if (!inDualMode) {
+                try {
+                    futuresApi.setDualModeCall(SETTLE,true,null).execute();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
             }
 
-            /**
-             * 设置杠杆倍数(双向持仓模式专用)
-             * 设置合理的杠杆倍数,不能为0
-             */
-            String leverage = "25";
-            futuresApi.updateDualModePositionLeverageCall(
-                    settle,
-                    contract,
-                    leverage,
-                    marginMode,
-                    null).execute();
+            try {
+                futuresApi.updateDualModePositionLeverageCall(
+                        SETTLE, CONTRACT, LEVERAGE,
+                        null, null).execute();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+
+            if (!MARGINMODE.equals(account.getMarginMode())) {
+
+                UpdateDualCompPositionCrossModeRequest updateDualCompPositionCrossModeRequest = new UpdateDualCompPositionCrossModeRequest();
+                updateDualCompPositionCrossModeRequest.setMode(MARGINMODE);
+                updateDualCompPositionCrossModeRequest.setContract(CONTRACT);
+                try {
+                    futuresApi.updateDualCompPositionCrossModeCall(SETTLE, updateDualCompPositionCrossModeRequest, null).execute();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         } catch (GateApiException e) {
             System.err.println(String.format("Gate api exception, label: %s, message: %s", e.getErrorLabel(), e.getMessage()));
             e.printStackTrace();
-        } catch (ApiException | IOException e) {
+        } catch (ApiException e) {
             System.err.println("Exception when calling AccountApi#getAccountDetail");
             e.printStackTrace();
         }
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
index fc47591..bffcda1 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java
@@ -183,7 +183,7 @@
             try {
                 futuresApi.updateDualModePositionLeverageCall(
                         SETTLE, config.getContract(), config.getLeverage(),
-                        config.getMarginMode(), null).execute();
+                        null, null).execute();
             } catch (IOException e) {
                 e.printStackTrace();
             }
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
index 3aee86e..93ffff4 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java
@@ -53,7 +53,7 @@
                     .apiSecret("1861e4f52de4bb53369ea3208d9ede38ece4777368030f96c77d27934c46c274")
                     .contract("ETH_USDT")
                     .leverage("100")
-                    .marginMode("cross")
+                    .marginMode("CROSS")
                     .positionMode("dual")
                     .gridRate(new BigDecimal("0.0015"))
                     .overallTp(new BigDecimal("5"))

--
Gitblit v1.9.1