From c8b80dc38d75e89aa44574659b154ddea2e8fce5 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 07 Jan 2026 14:16:32 +0800
Subject: [PATCH] refactor(okx): 重构WebSocket客户端实现止盈止损逻辑
---
src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java | 27 +++++++++++++++++++--------
1 files changed, 19 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java
index 3a0514b..7136774 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/PositionsWs.java
@@ -3,6 +3,10 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xcong.excoin.modules.okxNewPrice.okxWs.enums.CoinEnums;
+import com.xcong.excoin.modules.okxNewPrice.okxWs.enums.OrderParamEnums;
+import com.xcong.excoin.modules.okxNewPrice.okxWs.param.TradeRequestParam;
+import com.xcong.excoin.modules.okxNewPrice.okxWs.wanggeList.WangGeListEnum;
+import com.xcong.excoin.modules.okxNewPrice.okxWs.wanggeList.WangGeListService;
import com.xcong.excoin.modules.okxNewPrice.okxpi.MallUtils;
import com.xcong.excoin.modules.okxNewPrice.utils.WsMapBuild;
import com.xcong.excoin.modules.okxNewPrice.utils.WsParamBuild;
@@ -10,6 +14,9 @@
import org.java_websocket.client.WebSocketClient;
import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -65,10 +72,7 @@
try {
JSONArray dataArray = response.getJSONArray("data");
if (dataArray == null || dataArray.isEmpty()) {
- log.info("账户持仓频道数据为空,已当前价买入,并且初始化网格");
- JSONObject posData = new JSONObject();
- initParam(posData, accountName,CoinEnums.POSSIDE_LONG.getCode());
- initParam(posData, accountName,CoinEnums.POSSIDE_SHORT.getCode());
+ log.info("账户持仓频道数据为空,等待更新");
return;
}
@@ -104,13 +108,14 @@
+ "维持保证金率: {}, 维持保证金: {}, 以美金价值为单位的持仓数量: {}, 占用保证金的币种: {}, "
+ "最新成交价: {}, 最新指数价格: {}, 盈亏平衡价: {}, 已实现收益: {}, 累计已结算收益: {}"
+ "最新标记价格: {},累计手续费: {},累计持仓费: {},",
- accountName, instId, mgnMode, posSide, pos, avgPx,
+ initAccountName(accountName, posSide), instId, mgnMode, posSide, pos, avgPx,
upl, uplRatio, lever, liqPx, imr,
mgnRatio, mmr, notionalUsd, ccy,
last, idxPx, bePx, realizedPnl, settledPnl,
markPx,fee,fundingFee
);
- initParam(posData, accountName,posSide);
+ //先更新缓存
+ Map<String, BigDecimal> stringBigDecimalMap = initParam(posData, accountName, posSide);
}
}
} catch (Exception e) {
@@ -118,7 +123,7 @@
}
}
- private static void initParam(JSONObject posData, String accountName,String posSide) {
+ private static Map<String, BigDecimal> initParam(JSONObject posData, String accountName,String posSide) {
String accountNamePositons = initAccountName(accountName, posSide);
Map<String, BigDecimal> accountMap = getAccountMap(accountNamePositons);
WsMapBuild.saveBigDecimalToMap(accountMap, "avgPx", WsMapBuild.parseBigDecimalSafe(posData.getString("avgPx")));
@@ -132,6 +137,12 @@
WsMapBuild.saveBigDecimalToMap(accountMap, "fee", WsMapBuild.parseBigDecimalSafe(posData.getString("fee")));
WsMapBuild.saveBigDecimalToMap(accountMap, "fundingFee", WsMapBuild.parseBigDecimalSafe(posData.getString("fundingFee")));
- WsMapBuild.saveBigDecimalToMap(accountMap, CoinEnums.READY_STATE.name(), WsMapBuild.parseBigDecimalSafe(CoinEnums.READY_STATE_YES.getCode()));
+ BigDecimal ordFrozImr = PositionsWs.getAccountMap(accountNamePositons).get("imr");
+ BigDecimal totalOrderUsdt = WsMapBuild.parseBigDecimalSafe(AccountWs.getAccountMap(accountName).get(CoinEnums.TOTAL_ORDER_USDT.name()))
+ .divide(new BigDecimal("2"), RoundingMode.DOWN);
+ if (ordFrozImr.compareTo(totalOrderUsdt) <= 0){
+ WsMapBuild.saveBigDecimalToMap(accountMap, CoinEnums.READY_STATE.name(), WsMapBuild.parseBigDecimalSafe(CoinEnums.READY_STATE_YES.getCode()));
+ }
+ return accountMap;
}
}
--
Gitblit v1.9.1