From 1cbbbb86a6ed0036540ff40f9d0051d400d692b4 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 11 May 2026 17:01:35 +0800
Subject: [PATCH] refactor(gateApi): 优化网格交易逻辑和止盈策略
---
src/main/java/com/xcong/excoin/modules/gateApi/Example.java | 97 ++++++++++++++++++++++++++++++------------------
1 files changed, 60 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..c8f8ff3 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/Example.java
@@ -9,8 +9,35 @@
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;
+
+
+/**
+ * Gate SDK API 使用示例。
+ *
+ * <h3>演示内容</h3>
+ * <ol>
+ * <li>通过 API Key/Secret 初始化客户端</li>
+ * <li>查询期货账户余额</li>
+ * <li>设置双向持仓模式</li>
+ * <li>设置杠杆倍数</li>
+ * <li>切换保证金模式(全仓/逐仓)</li>
+ * </ol>
+ *
+ * <h3>注意</h3>
+ * 此文件仅作为 SDK 用法参考,不影响实际策略运行。
+ * 当前策略中相同功能的实现在 {@code GateGridTradeService.init()} 中。
+ *
+ * @author Administrator
+ */
+@Slf4j
public class Example {
+ /**
+ * 示例入口:依次执行查询账户 → 设置双向持仓 → 设杠杆 → 切换保证金模式。
+ */
public static void main(String[] args) {
ApiClient defaultClient = Configuration.getDefaultApiClient();
defaultClient.setBasePath("https://api-testnet.gateapi.io/api/v4");
@@ -21,53 +48,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