From 286b64cef4127c2ca917561c474842c375d2ea73 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 07 May 2026 17:01:46 +0800
Subject: [PATCH] fix(gateApi): 设置初始订单为仅减仓模式
---
src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java | 125 +++++++----------------------------------
1 files changed, 21 insertions(+), 104 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
index 42f639f..4e93ba0 100644
--- a/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/gateApi/GateKlineWebSocketClient.java
@@ -58,7 +58,9 @@
private static final String FUTURES_PING = "futures.ping";
private static final String FUTURES_PONG = "futures.pong";
private static final String GATE_INTERVAL = "1m";
- private static final String GATE_CONTRACT = "BTC_USDT";
+ private static final String GATE_CONTRACT = "XAUT_USDT";
+
+ private GateGridTradeService gridTradeService;
// 心跳超时时间(秒),小于30秒
private static final int HEARTBEAT_TIMEOUT = 10;
@@ -72,11 +74,13 @@
public GateKlineWebSocketClient(CaoZuoService caoZuoService,
GateWebSocketClientManager clientManager,
- WangGeListService wangGeListService
+ WangGeListService wangGeListService,
+ GateGridTradeService gridTradeService
) {
this.caoZuoService = caoZuoService;
this.clientManager = clientManager;
this.wangGeListService = wangGeListService;
+ this.gridTradeService = gridTradeService;
}
/**
@@ -351,115 +355,28 @@
BigDecimal vol = new BigDecimal(data.getString("v"));
BigDecimal baseVol = new BigDecimal(data.getString("a"));
String name = data.getString("n");
- long tsSeconds = data.getLong("t");
+ long t = data.getLong("t");
boolean windowClosed = data.getBooleanValue("w");
- String time = DateUtil.TimeStampToDateTime(tsSeconds * 1000);
+ String time = DateUtil.TimeStampToDateTime(t);
- System.out.println("========== Gate K线数据 ==========");
- System.out.println("名称(n): " + name);
- System.out.println("时间 : " + time);
- System.out.println("开盘(o): " + openPx);
- System.out.println("最高(h): " + highPx);
- System.out.println("最低(l): " + lowPx);
- System.out.println("收盘(c): " + closePx);
- System.out.println("成交量(v): " + vol);
- System.out.println("成交额(a): " + baseVol);
- System.out.println("K线完结(w): " + windowClosed);
- System.out.println("==================================");
+ log.info("========== Gate K线数据 ==========");
+ log.info("名称(n): " + name);
+ log.info("时间 : " + time);
+ log.info("开盘(o): " + openPx);
+ log.info("最高(h): " + highPx);
+ log.info("最低(l): " + lowPx);
+ log.info("收盘(c): " + closePx);
+ log.info("成交量(v): " + vol);
+ log.info("成交额(a): " + baseVol);
+ log.info("K线完结(w): " + windowClosed);
+ log.info("==================================");
- if (windowClosed) {
- MacdEmaStrategy strategy = new MacdEmaStrategy();
-
- List<Kline> kline1MinuteData = getKlineDataByInstIdAndBar(CoinEnums.HE_YUE.getCode(), "1m");
- List<BigDecimal> historicalPrices1M = kline1MinuteData.stream()
- .map(Kline::getC)
- .collect(Collectors.toList());
-
- MacdEmaStrategy.TradingOrder tradingOrderOpenOpen = strategy.generateTradingOrder(historicalPrices1M, MacdMaStrategy.OperationType.open.name());
- if (tradingOrderOpenOpen == null) {
- return;
- }
-
+ if (gridTradeService != null) {
+ gridTradeService.onKline(closePx, windowClosed);
}
} catch (Exception e) {
log.error("处理 K线频道推送数据失败", e);
}
- }
-
- private void doOpen(WebSocketClient webSocketClient, String accountName, MacdEmaStrategy.TradingOrder tradingOrderOpenOpen, BigDecimal closePx) {
- // 根据信号执行交易操作
- TradeRequestParam tradeRequestParam = new TradeRequestParam();
-
- String posSide = tradingOrderOpenOpen.getPosSide();
- tradeRequestParam.setPosSide(posSide);
- String currentPrice = String.valueOf(closePx);
- tradeRequestParam = caoZuoService.caoZuoStrategy(accountName, currentPrice, posSide);
-
- String side = tradingOrderOpenOpen.getSide();
- tradeRequestParam.setSide(side);
-
- String clOrdId = WsParamBuild.getOrderNum(side);
- tradeRequestParam.setClOrdId(clOrdId);
-
- String sz = InstrumentsWs.getAccountMap(accountName).get(CoinEnums.BUY_CNT_INIT.name());
- tradeRequestParam.setSz(sz);
- TradeOrderWs.orderEvent(webSocketClient, tradeRequestParam);
- }
-
- private List<Kline> getKlineDataByInstIdAndBar(String instId, String bar) {
- List<Kline> klineList = new ArrayList<>();
- try {
- LinkedHashMap<String, Object> requestParam = new LinkedHashMap<>();
- requestParam.put("instId", instId);
- requestParam.put("bar", bar);
- requestParam.put("limit", "200");
- String result = ExchangeLoginService.getInstance(ExchangeInfoEnum.OKX_UAT.name()).lineHistory(requestParam);
- JSONObject json = JSON.parseObject(result);
- String data = json.getString("data");
-
- if (data != null) {
- List<String[]> klinesList = JSON.parseArray(data, String[].class);
- if (!CollUtil.isEmpty(klinesList)) {
- for (String[] s : klinesList) {
- // 确保数组有足够的元素
- if (s != null && s.length >= 9) {
- String s1 = s[8];
- try {
- if ("1".equals(s1)){
- Kline kline = new Kline();
- kline.setTs(s[0]);
- kline.setO(new BigDecimal(s[1]));
- kline.setH(new BigDecimal(s[2]));
- kline.setL(new BigDecimal(s[3]));
- kline.setC(new BigDecimal(s[4]));
- kline.setVol(new BigDecimal(s[5]));
- kline.setConfirm(s[8]);
- klineList.add(kline);
- }
- } catch (NumberFormatException e) {
- log.error("K线数据转换为BigDecimal失败: {}", Arrays.toString(s), e);
- }
- } else {
- log.warn("K线数据数组长度不足: {}", Arrays.toString(s));
- }
- }
- }
- } else {
- log.warn("K线数据为空");
- }
- } catch (JSONException e) {
- log.error("K线数据解析失败", e);
- } catch (Exception e) {
- log.error("获取K线数据异常", e);
- }
- return klineList;
- }
-
- /**
- * 构建 Redis Key
- */
- private String buildRedisKey(String instId) {
- return "PRICE_" + instId.replace("-", "");
}
/**
--
Gitblit v1.9.1