From 8b4173d1ad4be984992b0ff7b5f04135bc8440c1 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 29 Dec 2025 16:34:10 +0800
Subject: [PATCH] feat(okxNewPrice): 实现订单成交后自动触发止盈逻辑

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java |    3 ++-
 src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/OrderInfoWs.java       |   24 +++++++++++++++++++++++-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
index 1fb20c7..eda371e 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxQuantWebSocketClient.java
@@ -383,7 +383,8 @@
         // 注意:当前实现中,OrderInfoWs等类使用静态Map存储数据
         // 这会导致多账号之间的数据冲突。需要进一步修改这些类的设计,让数据存储与特定账号关联
         if (OrderInfoWs.ORDERINFOWS_CHANNEL.equals(channel)) {
-            OrderInfoWs.handleEvent(response, redisUtils, account.name());
+            TradeRequestParam tradeRequestParam = OrderInfoWs.handleEvent(response, redisUtils, account.name());
+            TradeOrderWs.orderEvent(webSocketClient, tradeRequestParam);
         }else if (AccountWs.ACCOUNTWS_CHANNEL.equals(channel)) {
             AccountWs.handleEvent(response, account.name());
         } else if (PositionsWs.POSITIONSWS_CHANNEL.equals(channel)) {
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/OrderInfoWs.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/OrderInfoWs.java
index 6edf8d1..f91b7c0 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/OrderInfoWs.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/okxWs/OrderInfoWs.java
@@ -115,7 +115,29 @@
                     WsMapBuild.saveStringToMap(accountWsMap, CoinEnums.READY_STATE.name(), CoinEnums.READY_STATE_NO.getCode());
 
                     log.info("{}: 订单详情已完成: {}, 自定义编号: {}", accountName, CoinEnums.HE_YUE.getCode(), clOrdId);
-                    return null;
+
+                    TradeRequestParam tradeRequestParam = new TradeRequestParam();
+                    tradeRequestParam.setAccountName(accountName);
+                    BigDecimal zhiYingPx = getZhiYingPx(
+                            accountName,
+                            posSide,
+                            fillFee,
+                            WsMapBuild.parseBigDecimalSafe(InstrumentsWs.getAccountMap(accountName).get(CoinEnums.CTVAL.name())),
+                            WsMapBuild.parseBigDecimalSafe(accFillSz),
+                            WsMapBuild.parseBigDecimalSafe(InstrumentsWs.getAccountMap(accountName).get(CoinEnums.CONTRACTMULTIPLIER.name())),
+                            WsMapBuild.parseBigDecimalSafe(avgPx),
+                            WsMapBuild.parseBigDecimalSafe(CoinEnums.LEVERAGE.getCode())
+                    );
+                    tradeRequestParam.setMarkPx(String.valueOf(zhiYingPx));
+                    tradeRequestParam.setInstId(CoinEnums.HE_YUE.getCode());
+                    tradeRequestParam.setTdMode(CoinEnums.CROSS.getCode());
+                    tradeRequestParam.setPosSide(posSide);
+                    tradeRequestParam.setOrdType(CoinEnums.ORDTYPE_LIMIT.getCode());
+                    tradeRequestParam.setTradeType(OrderParamEnums.TRADE_YES.getValue());
+                    tradeRequestParam.setSide(CoinEnums.POSSIDE_LONG.getCode().equals(posSide) ? CoinEnums.SIDE_SELL.getCode() : CoinEnums.SIDE_BUY.getCode());
+                    tradeRequestParam.setClOrdId(WsParamBuild.getOrderNum(tradeRequestParam.getSide()));
+                    tradeRequestParam.setSz(accFillSz);
+                    return tradeRequestParam;
 
                 }
                 return null;

--
Gitblit v1.9.1