# 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. **高可靠性**:支持心跳检测、自动重连和异常处理 该系统实现了从价格获取、策略决策到订单执行的完整流程,为量化交易提供了稳定可靠的基础架构。