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

---
 src/main/java/com/xcong/excoin/modules/gateApi/Example.java |   76 +++++++++++++++++++------------------
 1 files changed, 39 insertions(+), 37 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 30e7bad..87ecc4a 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
@@ -9,7 +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();
@@ -21,53 +27,49 @@
 
         try {
 
-            String contract = "ETH_USDT";
-            String settle = "usdt";
+            String CONTRACT = "ETH_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 = "100";
             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);
+            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 e) {
             System.err.println("Exception when calling AccountApi#getAccountDetail");
-            System.err.println("Status code: " + e.getCode());
-            System.err.println("Response headers: " + e.getResponseHeaders());
             e.printStackTrace();
         }
     }

--
Gitblit v1.9.1