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/OkxNewPriceWebSocketClient.java | 34 ++++++++--------------------------
1 files changed, 8 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxNewPriceWebSocketClient.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxNewPriceWebSocketClient.java
index 181ecd0..782467e 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxNewPriceWebSocketClient.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OkxNewPriceWebSocketClient.java
@@ -110,7 +110,7 @@
private static final String WS_URL_MONIPAN = "wss://wspap.okx.com:8443/ws/v5/public";
private static final String WS_URL_SHIPAN = "wss://ws.okx.com:8443/ws/v5/public";
- private static final boolean isAccountType = false;
+ private static final boolean isAccountType = true;
/**
* 建立与 OKX WebSocket 服务器的连接。
@@ -310,7 +310,7 @@
}
// 获取所有OkxQuantWebSocketClient实例
for (OkxQuantWebSocketClient client : clientManager.getAllClients()) {
- String accountName = getAccountNameFromClient(client);
+ String accountName = client.getAccountName();
if (accountName != null) {
/**
* 处理历史网格的订单
@@ -319,10 +319,12 @@
* 如果不一致则需要处理
*/
String fangXiang = gridByPriceNew.getFang_xiang();
- String fangXiangOld = CoinEnums.POSSIDE_LONG.equals(fangXiang) ? CoinEnums.POSSIDE_SHORT.getCode() : CoinEnums.POSSIDE_LONG.getCode();
+ String fangXiangOld = CoinEnums.POSSIDE_LONG.getCode().equals(fangXiang) ? CoinEnums.POSSIDE_SHORT.getCode() : CoinEnums.POSSIDE_LONG.getCode();
log.info("历史网格方向为:{}", fangXiangOld);
- TradeRequestParam tradeRequestParamOld = caoZuoService.caoZuoZhiSunEvent(accountName, markPx, fangXiangOld);
- TradeOrderWs.orderEvent(client.getWebSocketClient(), tradeRequestParamOld);
+ if (!fangXiang.equals(fangXiangOld)){
+ TradeRequestParam tradeRequestParamOld = caoZuoService.caoZuoZhiSunEvent(accountName, markPx, fangXiangOld);
+ TradeOrderWs.orderEvent(client.getWebSocketClient(), tradeRequestParamOld);
+ }
/**
* 处理当前网格的订单,触发量化操作
@@ -336,26 +338,6 @@
}
} catch (Exception e) {
log.error("触发量化操作失败", e);
- }
- }
-
- /**
- * 从OkxQuantWebSocketClient实例中获取账号名称
- * 由于OkxQuantWebSocketClient没有直接暴露账号名称的方法,这里需要通过反射获取
- * 更好的方式是修改OkxQuantWebSocketClient,添加getAccountName方法
- */
- private String getAccountNameFromClient(OkxQuantWebSocketClient client) {
- try {
- // 通过反射获取account字段的值
- java.lang.reflect.Field accountField = OkxQuantWebSocketClient.class.getDeclaredField("account");
- accountField.setAccessible(true);
- Object account = accountField.get(client);
- // 调用account的name()方法获取账号名称
- java.lang.reflect.Method nameMethod = account.getClass().getMethod("name");
- return (String) nameMethod.invoke(account);
- } catch (Exception e) {
- log.error("获取账号名称失败", e);
- return null;
}
}
@@ -448,7 +430,7 @@
*/
private void reconnectWithBackoff() throws InterruptedException {
int attempt = 0;
- int maxAttempts = 5;
+ int maxAttempts = 3;
long delayMs = 5000;
while (attempt < maxAttempts) {
--
Gitblit v1.9.1