From 61a2275faa5bdbee04eb8a4322d57b59b16651ad Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Thu, 18 Dec 2025 18:08:56 +0800
Subject: [PATCH] refactor(okxWs): 简化账户就绪状态检查逻辑

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/README.md |  285 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 285 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/README.md b/src/main/java/com/xcong/excoin/modules/okxNewPrice/README.md
new file mode 100644
index 0000000..cb6e715
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/README.md
@@ -0,0 +1,285 @@
+# OKX 新价格量化交易模块文档
+
+## 1. 包结构
+
+```
+okxNewPrice/
+├── celue/                    # 策略层
+│   ├── CaoZuoService.java      # 操作服务接口
+│   └── CaoZuoServiceImpl.java  # 操作服务实现
+├── jiaoyi/                   # 交易层
+│   ├── IMQService.java         # 消息队列服务接口
+│   └── IMQServiceImpl.java     # 消息队列服务实现
+├── okxWs/                    # OKX WebSocket 处理层
+│   ├── enums/                  # WebSocket 相关枚举
+│   │   ├── CoinEnums.java         # 币相关枚举
+│   │   ├── ExchangeInfoEnum.java  # 交易所信息枚举
+│   │   └── OrderParamEnums.java   # 订单参数枚举
+│   ├── wanggeList/             # 网格列表相关
+│   │   ├── WangGeListEnum.java     # 网格枚举
+│   │   ├── WangGeListQueue.java    # 网格队列
+│   │   ├── WangGeListService.java  # 网格服务接口
+│   │   └── WangGeListServiceImpl.java  # 网格服务实现
+│   ├── AccountWs.java          # 账户信息处理
+│   ├── BalanceAndPositionWs.java   # 余额和持仓处理
+│   ├── InstrumentsWs.java      # 合约信息处理
+│   ├── LoginWs.java            # 登录处理
+│   ├── OrderInfoWs.java        # 订单信息处理
+│   ├── PositionsWs.java        # 持仓信息处理
+│   └── TradeOrderWs.java       # 交易订单处理
+├── okxpi/                     # OKX API 相关
+│   ├── config/                 # 配置相关
+│   ├── enumerates/             # 枚举
+│   ├── order/                  # 订单相关
+│   ├── query/                  # 查询相关
+│   ├── trade/                  # 交易相关
+│   ├── verify/                 # 验证相关
+│   └── ...                     # 其他API工具类
+├── utils/                     # 工具类
+│   ├── FebsException.java      # 异常类
+│   ├── FebsResponse.java       # 响应类
+│   ├── SSLConfig.java          # SSL配置
+│   ├── SignUtils.java          # 签名工具
+│   ├── WsMapBuild.java         # WebSocket Map构建工具
+│   └── WsParamBuild.java       # WebSocket 参数构建工具
+├── wangge/                    # 网格相关
+│   ├── WangGeEnum.java         # 网格枚举
+│   ├── WangGeQueue.java        # 网格队列
+│   ├── WangGeService.java      # 网格服务接口
+│   └── WangGeServiceImpl.java  # 网格服务实现
+├── zhanghu/                   # 账户相关
+│   ├── ApiMessageServiceImpl.java  # API消息服务实现
+│   ├── IApiMessageService.java     # API消息服务接口
+│   └── ZhangHuEnum.java            # 账户枚举
+├── OkxNewPriceWebSocketClient.java  # 价格WebSocket客户端
+├── OkxQuantWebSocketClient.java     # 量化WebSocket客户端
+├── OkxWebSocketClientMain.java      # WebSocket客户端主类
+└── OkxWebSocketClientManager.java   # WebSocket客户端管理器
+```
+
+## 2. 核心组件说明
+
+### 2.1 WebSocket 客户端管理
+
+#### OkxWebSocketClientManager
+- **作用**:统一管理所有 OKX WebSocket 客户端实例
+- **核心功能**:
+  - 初始化价格 WebSocket 客户端和多账号量化客户端
+  - 提供客户端的获取和销毁功能
+  - 管理客户端生命周期
+- **关键方法**:
+  - `init()`:初始化所有客户端
+  - `destroy()`:销毁所有客户端
+  - `getAllClients()`:获取所有量化客户端实例
+
+#### OkxNewPriceWebSocketClient
+- **作用**:价格 WebSocket 客户端,负责获取实时价格数据
+- **核心功能**:
+  - 连接 OKX 公共 WebSocket 接口获取标记价格
+  - 将价格数据保存到 Redis
+  - 价格变化时触发量化操作
+  - 支持心跳检测和自动重连
+- **关键方法**:
+  - `init()`:初始化客户端
+  - `destroy()`:销毁客户端
+  - `processPushData()`:处理价格推送数据
+  - `triggerQuantOperations()`:触发所有账号的量化操作
+
+#### OkxQuantWebSocketClient
+- **作用**:量化交易 WebSocket 客户端,每个账号对应一个实例
+- **核心功能**:
+  - 连接 OKX 私有 WebSocket 接口
+  - 处理账户、持仓、订单等私有数据
+  - 支持多账号独立操作
+  - 支持心跳检测和自动重连
+- **关键方法**:
+  - `init()`:初始化客户端
+  - `destroy()`:销毁客户端
+  - `websocketLogin()`:登录 WebSocket
+  - `subscribeChannels()`:订阅相关频道
+
+### 2.2 策略层
+
+#### CaoZuoService
+- **作用**:交易策略服务接口
+- **核心功能**:
+  - 决定是否进行交易操作
+  - 根据价格和网格信息决定交易方向
+  - 处理多头和空头策略
+
+#### CaoZuoServiceImpl
+- **作用**:交易策略服务实现类
+- **核心功能**:
+  - 检查账户和持仓状态
+  - 根据当前价格获取对应的网格
+  - 实现多头和空头的具体交易逻辑
+  - 管理网格队列和交易决策
+- **关键方法**:
+  - `caoZuo()`:主交易逻辑
+  - `caoZuoLong()`:多头交易逻辑
+  - `caoZuoShort()`:空头交易逻辑
+
+### 2.3 网格策略
+
+#### WangGeListEnum
+- **作用**:网格数据枚举,定义不同价格区间的网格参数
+- **核心参数**:
+  - `name`:网格名称
+  - `jiage_shangxian`:价格上限
+  - `jiage_xiaxian`:价格下限
+  - `jian_ju`:网格间距
+  - `fang_xiang`:交易方向(long/short)
+- **关键方法**:
+  - `getGridByPrice()`:根据价格获取对应的网格
+
+#### WangGeListService
+- **作用**:网格服务接口,提供网格相关操作
+- **核心功能**:
+  - 初始化网格队列
+  - 管理网格的开仓和平仓队列
+
+### 2.4 持仓管理
+
+#### PositionsWs
+- **作用**:持仓信息处理类
+- **核心功能**:
+  - 管理持仓数据(双层 Map 结构:账号_方向 -> 数据)
+  - 提供持仓数据的获取和更新方法
+  - 支持多账号多方向持仓管理
+- **关键方法**:
+  - `initAccountName()`:初始化带方向的账号名
+  - `handleEvent()`:处理持仓数据推送
+  - `getAccountMap()`:获取指定账号的持仓数据
+
+## 3. 工作流程
+
+### 3.1 系统初始化流程
+
+1. **客户端初始化**:
+   - Spring 容器启动时,`OkxWebSocketClientManager` 自动初始化
+   - 创建并初始化 `OkxNewPriceWebSocketClient` 实例
+   - 为每个账号创建并初始化 `OkxQuantWebSocketClient` 实例
+
+2. **WebSocket 连接**:
+   - `OkxNewPriceWebSocketClient` 连接公共价格 WebSocket
+   - 每个 `OkxQuantWebSocketClient` 连接私有 WebSocket 并登录
+   - 订阅相关频道(价格、账户、持仓、订单等)
+
+### 3.2 价格触发交易流程
+
+```
+┌─────────────────────────┐     ┌─────────────────────────┐
+│ OkxNewPriceWebSocketClient │     │ WangGeListEnum         │
+│ └─ processPushData()    │────▶│ └─ getGridByPrice()     │
+└─────────────────────────┘     └─────────────────────────┘
+         ▲                              ▼
+         │                     ┌─────────────────────────┐
+         │                     │ CaoZuoServiceImpl      │
+         │                     │ └─ caoZuo()            │
+         │                     └─────────────────────────┘
+         │                              ▼
+         │                     ┌─────────────────────────┐
+         │                     │ TradeOrderWs           │
+         │                     │ └─ orderEvent()        │
+         │                     └─────────────────────────┘
+         │                              ▼
+┌────────┴─────────────────────────────────────────────┐
+│ OkxQuantWebSocketClient                              │
+│ └─ handleWebSocketMessage()                          │
+└──────────────────────────────────────────────────────┘
+```
+
+1. **价格接收**:
+   - `OkxNewPriceWebSocketClient` 接收实时价格推送
+   - 调用 `processPushData()` 处理价格数据
+
+2. **策略决策**:
+   - 根据当前价格获取对应的网格参数(`WangGeListEnum.getGridByPrice()`)
+   - 调用 `CaoZuoServiceImpl.caoZuo()` 进行策略决策
+   - 根据网格方向调用对应的多头或空头策略
+
+3. **订单执行**:
+   - 调用 `TradeOrderWs.orderEvent()` 执行交易订单
+   - 通过 `OkxQuantWebSocketClient` 发送订单指令
+
+### 3.3 持仓数据管理流程
+
+1. **数据接收**:
+   - `OkxQuantWebSocketClient` 接收持仓数据推送
+   - 调用 `PositionsWs.handleEvent()` 处理持仓数据
+
+2. **数据存储**:
+   - 使用双层 Map 存储持仓数据:`accountName_posSide -> data`
+   - 支持多头和空头方向的独立存储
+
+3. **数据使用**:
+   - 策略层通过 `PositionsWs.getAccountMap()` 获取持仓数据
+   - 根据持仓数据和当前价格决定交易操作
+
+## 4. 关键特性
+
+### 4.1 多网格策略
+
+- **实现方式**:通过 `WangGeListEnum` 定义多个价格区间的网格
+- **核心功能**:
+  - 每个网格可设置独立的交易方向(多头/空头)
+  - 根据当前价格自动匹配对应的网格
+  - 支持跨网格的仓位迁移和止损
+
+### 4.2 多账号管理
+
+- **实现方式**:每个账号对应一个 `OkxQuantWebSocketClient` 实例
+- **核心功能**:
+  - 支持多个交易所账号独立操作
+  - 每个账号可设置独立的交易参数
+  - 账号间数据隔离,互不影响
+
+### 4.3 长/空头策略支持
+
+- **实现方式**:通过 `PositionsWs` 的双层 Map 结构
+- **核心功能**:
+  - 支持多头和空头方向的独立持仓管理
+  - 每个方向有独立的交易逻辑
+  - 支持方向切换时的仓位调整
+
+### 4.4 自动重连和心跳机制
+
+- **实现方式**:在 WebSocket 客户端中实现
+- **核心功能**:
+  - 定时发送心跳包维持连接
+  - 连接断开时自动重连(指数退避策略)
+  - 异常处理和资源清理
+
+## 5. 配置与扩展
+
+### 5.1 网格参数配置
+
+- **当前实现**:通过 `WangGeListEnum` 硬编码配置
+- **扩展建议**:
+  - 将网格参数改为可配置项(数据库或配置文件)
+  - 支持动态调整网格参数
+  - 提供网格参数管理界面
+
+### 5.2 交易参数配置
+
+- **核心参数**:
+  - 网格间距
+  - 交易方向(多头/空头)
+  - 止损点
+  - 交易数量
+- **扩展建议**:
+  - 支持每个账号独立配置交易参数
+  - 提供参数优化建议
+  - 支持回测功能
+
+## 6. 总结
+
+`okxNewPrice` 包是一个完整的 OKX 量化交易系统,具有以下特点:
+
+1. **模块化设计**:清晰的分层结构,便于维护和扩展
+2. **多账号支持**:每个账号独立运行,互不影响
+3. **多网格策略**:根据价格自动切换网格,支持多头和空头策略
+4. **实时响应**:基于 WebSocket 的实时数据推送和交易执行
+5. **高可靠性**:支持心跳检测、自动重连和异常处理
+
+该系统实现了从价格获取、策略决策到订单执行的完整流程,为量化交易提供了稳定可靠的基础架构。
\ No newline at end of file

--
Gitblit v1.9.1