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/OKX_QUANT_DOCUMENTATION.md |  254 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 254 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/OKX_QUANT_DOCUMENTATION.md b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OKX_QUANT_DOCUMENTATION.md
new file mode 100644
index 0000000..f4897c8
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/OKX_QUANT_DOCUMENTATION.md
@@ -0,0 +1,254 @@
+# OKX量化交易模块技术文档
+
+## 1. 包结构
+
+```
+com.xcong.excoin.modules.okxNewPrice
+├── OkxWebSocketClientManager.java      # WebSocket客户端管理器
+├── OkxNewPriceWebSocketClient.java     # 公共价格WebSocket客户端
+├── OkxQuantWebSocketClient.java        # 多账号量化交易WebSocket客户端
+├── README.md                           # 模块说明文档
+├── celue/                              # 策略执行层
+│   ├── CaoZuoService.java              # 策略执行接口
+│   └── CaoZuoServiceImpl.java          # 策略执行实现
+├── okxWs/                              # OKX WebSocket通信层
+│   ├── AccountWs.java                  # 账户信息处理
+│   ├── BalanceAndPositionWs.java       # 余额和仓位处理
+│   ├── LoginWs.java                    # 登录处理
+│   ├── OrderInfoWs.java                # 订单信息处理
+│   ├── PositionsWs.java                # 仓位信息处理
+│   ├── TradeOrderWs.java               # 交易订单处理
+│   ├── enums/                          # 枚举定义
+│   └── wanggeList/                     # 网格策略配置
+│       ├── WangGeListEnum.java         # 网格参数枚举
+│       └── WangGeListServiceImpl.java  # 网格策略服务
+├── okxpi/                              # OKX API工具
+└── utils/                              # 工具类
+    ├── SSLConfig.java                  # SSL配置
+    ├── WsMapBuild.java                 # Map构建工具
+    └── WsParamBuild.java               # WebSocket参数构建工具
+```
+
+## 2. 核心组件说明
+
+### 2.1 WebSocket客户端管理
+
+#### OkxWebSocketClientManager
+- **功能**:管理所有OKX WebSocket客户端实例,包括价格客户端和多账号量化客户端
+- **核心特性**:
+  - 统一初始化、连接和销毁管理
+  - 多账号客户端映射(accountName → OkxQuantWebSocketClient)
+  - 单一价格客户端管理
+- **关键方法**:
+  - `init()`:初始化所有客户端
+  - `destroy()`:销毁所有客户端
+  - `getAllClients()`:获取所有账号客户端
+
+### 2.2 WebSocket客户端
+
+#### OkxNewPriceWebSocketClient
+- **功能**:连接OKX公共WebSocket接口,获取实时标记价格
+- **核心特性**:
+  - 心跳检测和自动重连
+  - 价格数据解析和Redis存储
+  - 价格变化触发策略执行
+- **关键流程**:
+  - `init()` → `connect()` → `subscribeChannels()` → 接收价格数据 → `processPushData()` → `triggerQuantOperations()`
+
+#### OkxQuantWebSocketClient
+- **功能**:连接OKX私有WebSocket接口,处理账号相关数据
+- **核心特性**:
+  - 账号登录认证
+  - 订阅账号、订单、仓位等私有频道
+  - 处理私有数据推送
+- **关键流程**:
+  - `init()` → `connect()` → `websocketLogin()` → 订阅私有频道 → 接收数据
+
+### 2.3 策略执行层
+
+#### CaoZuoService
+- **功能**:执行量化交易策略,决定买卖操作方向
+- **核心方法**:
+  - `caoZuo(String accountName)`:根据账号执行策略
+  - `caoZuoLong(String accountName, String markPx)`:多头策略执行
+  - `caoZuoShort(String accountName, String markPx)`:空头策略执行
+- **策略逻辑**:
+  - 根据当前价格确定所在网格位置
+  - 结合网格方向参数决定操作方向
+  - 考虑仓位状态和风险控制
+
+### 2.4 数据管理
+
+#### PositionsWs
+- **功能**:管理账户仓位数据,支持多空方向分离
+- **核心特性**:
+  - 双层Map存储:accountName → dataKey → value
+  - 支持多空方向分离(accountName_posSide)
+  - 数据就绪状态标记
+- **关键方法**:
+  - `initAccountName(String accountName, String posSide)`:初始化带多空方向的账号名
+  - `handleEvent(JSONObject response, String accountName)`:处理仓位数据推送
+
+### 2.5 网格策略
+
+#### WangGeListEnum
+- **功能**:定义网格策略参数
+- **核心参数**:
+  - `jiage_shangxian`:价格上限
+  - `jiage_xiaxian`:价格下限
+  - `fang_xiang`:操作方向(long/short)
+  - `jian_ju`:网格间距
+- **关键方法**:
+  - `getGridByPrice(BigDecimal price)`:根据当前价格获取匹配的网格
+
+## 3. 业务流程
+
+### 3.1 系统初始化流程
+
+```
+1. Spring容器启动,OkxWebSocketClientManager初始化
+2. 创建OkxNewPriceWebSocketClient实例并初始化
+3. 遍历ExchangeInfoEnum,为每个账号创建OkxQuantWebSocketClient实例
+4. 所有客户端建立WebSocket连接并进行认证
+5. 订阅相应的WebSocket频道
+```
+
+### 3.2 价格触发交易流程
+
+```
+1. OkxNewPriceWebSocketClient接收价格数据
+2. 调用`processPushData()`处理价格数据
+3. 调用`triggerQuantOperations()`触发策略执行
+4. 遍历所有账号客户端:
+   a. 获取账号名称
+   b. 调用`CaoZuoService.caoZuo(accountName)`确定操作方向
+   c. 调用`TradeOrderWs.orderEvent()`执行订单操作
+```
+
+### 3.3 网格策略执行流程
+
+```
+1. 获取当前价格
+2. 调用`WangGeListEnum.getGridByPrice(price)`确定网格位置
+3. 根据网格的`fang_xiang`参数确定操作方向
+4. 结合当前仓位状态和市场情况,决定最终操作(买/卖/止损/初始化)
+5. 返回操作方向给调用者
+```
+
+## 4. 技术架构
+
+### 4.1 客户端架构
+
+```
+┌─────────────────────────────────────────────────────────┐
+│                     应用层                               │
+├─────────────────────────────────────────────────────────┤
+│  OkxWebSocketClientManager                              │
+├─────────────────┬───────────────────────────────────────┤
+│                 │                                       │
+│ OkxNewPrice     │  OkxQuantWebSocketClient (多实例)     │
+│ WebSocketClient │  ┌─────────┐ ┌─────────┐ ┌─────────┐  │
+│                 │  │ Account1│ │ Account2│ │ AccountN│  │
+│                 │  └─────────┘ └─────────┘ └─────────┘  │
+├─────────────────┴───────────────────────────────────────┤
+│                     WebSocket通信层                      │
+├─────────────────────────────────────────────────────────┤
+│                     OKX WebSocket API                   │
+└─────────────────────────────────────────────────────────┘
+```
+
+### 4.2 数据流向
+
+```
+1. OKX公共WebSocket → OkxNewPriceWebSocketClient → Redis存储价格
+2. OKX私有WebSocket → OkxQuantWebSocketClient → 私有数据处理
+3. 价格变化 → CaoZuoService策略执行 → TradeOrderWs订单执行
+4. 订单结果 → OrderInfoWs处理 → 更新订单状态
+5. 仓位变化 → PositionsWs处理 → 更新仓位数据
+```
+
+## 5. 关键特性
+
+### 5.1 WebSocket连接管理
+- **心跳检测**:定期发送ping请求,检测连接有效性
+- **自动重连**:连接断开时,使用指数退避算法自动重连
+- **连接状态监控**:实时监控连接状态(connected/connecting/initialized)
+
+### 5.2 多账号支持
+- **独立客户端**:每个账号拥有独立的WebSocket客户端实例
+- **账号隔离**:账号数据隔离存储,避免数据冲突
+- **统一管理**:通过OkxWebSocketClientManager统一管理所有账号客户端
+
+### 5.3 网格策略
+- **多网格支持**:支持设置多个网格区域
+- **方向控制**:每个网格可配置独立的操作方向(long/short)
+- **动态匹配**:根据当前价格自动匹配对应的网格策略
+
+### 5.4 多空支持
+- **仓位分离**:多头和空头仓位数据分离存储
+- **独立操作**:多空方向可独立进行策略执行
+- **风险控制**:针对多空方向独立设置风险控制参数
+
+## 6. 配置与扩展
+
+### 6.1 网格策略配置
+当前网格策略通过`WangGeListEnum`硬编码配置:
+
+```java
+UP("上层做空", "2", "3100", "3000", "2", "short", "3100"),
+CENTER("中间指定一个方向", "2", "3000", "2950", "2", "long", "2950"),
+DOWN("下层做空", "2", "2950", "2920", "2", "short", "2950"),
+DOWN_ONE("下层做多", "2", "2920", "2900", "2", "long", "2900");
+```
+
+**扩展建议**:
+- 将网格参数迁移到数据库或配置文件
+- 实现动态加载和更新网格策略
+- 支持网格策略的增删改查操作
+
+### 6.2 账号配置
+账号信息通过`ExchangeInfoEnum`配置,每个枚举值对应一个交易账号。
+
+### 6.3 性能优化
+- **线程池管理**:合理配置线程池大小,避免资源浪费
+- **连接复用**:考虑连接复用策略,减少连接数量
+- **数据缓存**:合理使用缓存,减少重复计算
+
+## 7. 开发与维护
+
+### 7.1 开发流程
+1. 理解现有策略逻辑和数据流
+2. 根据需求修改或扩展策略
+3. 更新相关配置(如网格参数)
+4. 测试策略有效性
+5. 部署到生产环境
+
+### 7.2 常见问题
+
+**问题1**:WebSocket连接频繁断开
+**解决**:检查网络环境,调整心跳间隔和重连策略
+
+**问题2**:策略执行不符合预期
+**解决**:检查网格参数配置,分析策略执行日志,调整策略逻辑
+
+**问题3**:订单执行失败
+**解决**:检查账号权限,查看订单执行日志,分析失败原因
+
+### 7.3 日志与监控
+- 关键操作日志:记录WebSocket连接、策略执行、订单操作等关键事件
+- 错误日志:记录异常情况,便于问题排查
+- 性能监控:监控系统性能指标,及时发现性能瓶颈
+
+## 8. 未来规划
+
+1. **动态策略配置**:支持通过后台管理系统动态配置网格策略
+2. **策略回测**:实现策略回测功能,提高策略有效性
+3. **风险控制增强**:增加更完善的风险控制机制
+4. **多交易所支持**:扩展支持其他交易所
+5. **数据可视化**:实现交易数据可视化展示
+
+---
+
+**版本**:1.0
+**更新日期**:2025-12-17
+**维护人**:开发团队
\ No newline at end of file

--
Gitblit v1.9.1