Administrator
3 days ago e88414aaa42a9c5e9bf0fb70ea986d07e2883402
refactor(gateApi): 优化期货交易配置和日志记录

- 添加 lombok slf4j 注解用于日志记录
- 将常量变量名改为大写格式以提高可读性
- 更新期货账户初始化逻辑并添加初始本金日志输出
- 修正持仓模式设置方法调用和异常处理
- 移除多余参数传递简化杠杆更新调用
- 统一保证金模式字符串格式为大写
- 移除未使用的 BigDecimal 导入声明
3 files modified
78 ■■■■ changed files
src/main/java/com/xcong/excoin/modules/gateApi/Example.java 74 ●●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateGridTradeService.java 2 ●●● patch | view | raw | blame | history
src/main/java/com/xcong/excoin/modules/gateApi/GateWebSocketClientManager.java 2 ●●● patch | view | raw | blame | history
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();
        }
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();
            }
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"))