# OKX 量化交易系统文档 ## 1. 包结构概述 ``` com.xcong.excoin.modules.okxNewPrice/ ├── celue/ # 策略实现模块 │ ├── CaoZuoService.java # 策略接口 │ └── CaoZuoServiceImpl.java # 策略实现类 ├── jiaoyi/ # 交易相关模块 ├── okxWs/ # OKX WebSocket 相关类 │ ├── enums/ # WebSocket 相关枚举 │ ├── param/ # WebSocket 请求参数 │ ├── wanggeList/ # 网格列表管理 │ ├── AccountWs.java # 账户信息处理 │ ├── BalanceAndPositionWs.java # 余额和持仓处理 │ ├── InstrumentsWs.java # 合约信息处理 │ ├── LoginWs.java # 登录处理 │ ├── OrderInfoWs.java # 订单信息处理 │ ├── PositionsWs.java # 持仓信息处理 │ └── TradeOrderWs.java # 交易订单处理 ├── okxpi/ # OKX API 接口封装 ├── utils/ # 工具类 ├── wangge/ # 网格相关模块 ├── zhanghu/ # 账户相关模块 ├── OkxNewPriceWebSocketClient.java # 价格 WebSocket 客户端 ├── OkxQuantWebSocketClient.java # 量化交易 WebSocket 客户端 ├── OkxWebSocketClientManager.java # WebSocket 客户端管理器 └── OKX_QUANT_DOCUMENTATION.md # 本文档 ``` ## 2. 核心组件说明 ### 2.1 WebSocket 客户端管理 #### OkxWebSocketClientManager **功能**:集中管理多个 OKX WebSocket 客户端实例,包括价格客户端和账号客户端。 **核心属性**: - `quantClientMap`: 存储所有账号的 `OkxQuantWebSocketClient` 实例 - `newPriceClient`: 存储价格数据的 `OkxNewPriceWebSocketClient` 实例 **主要方法**: - `init()`: 初始化所有 WebSocket 客户端 - `destroy()`: 销毁所有 WebSocket 客户端资源 - `getClient()`: 获取指定账号的 WebSocket 客户端 - `getAllClients()`: 获取所有账号的 WebSocket 客户端 **使用流程**: 1. Spring 容器启动时自动调用 `init()` 方法 2. 初始化 `OkxNewPriceWebSocketClient` 用于获取价格数据 3. 为每个账号创建 `OkxQuantWebSocketClient` 实例 4. 所有客户端统一由管理器进行生命周期管理 ### 2.2 价格 WebSocket 客户端 #### OkxNewPriceWebSocketClient **功能**:连接 OKX 公共 WebSocket 接口,实时获取标记价格数据,并触发量化交易操作。 **核心属性**: - `webSocketClient`: WebSocket 连接客户端 - `isConnected/isConnecting/isInitialized`: 连接状态标志 - `lastMessageTime`: 最后收到消息的时间 **主要方法**: - `init()`: 初始化 WebSocket 客户端 - `destroy()`: 销毁 WebSocket 客户端资源 - `connect()`: 建立 WebSocket 连接 - `startHeartbeat()`: 启动心跳检测 - `processPushData()`: 处理价格推送数据 - `triggerQuantOperations()`: 触发量化交易操作 **价格处理流程**: 1. 连接 OKX WebSocket 公共接口 2. 订阅标记价格通道 3. 收到价格数据后保存到 Redis 4. 调用 `triggerQuantOperations()` 触发量化交易 5. 实现心跳检测和自动重连机制 ### 2.3 账号 WebSocket 客户端 #### OkxQuantWebSocketClient **功能**:连接 OKX 私有 WebSocket 接口,处理账号登录、持仓、订单等私有数据。 **核心属性**: - `account`: 账号信息枚举 - `webSocketClient`: WebSocket 连接客户端 - `isConnected/isConnecting`: 连接状态标志 **主要方法**: - `init()`: 初始化 WebSocket 客户端 - `destroy()`: 销毁 WebSocket 客户端资源 - `connect()`: 建立 WebSocket 连接 - `websocketLogin()`: 账号登录 - `subscribeChannels()`: 订阅私有通道 - `processPushData()`: 处理数据推送 **登录与订阅流程**: 1. 连接 OKX WebSocket 私有接口 2. 发送登录请求 3. 登录成功后订阅账户、持仓、订单等通道 4. 接收并处理私有数据推送 5. 实现心跳检测和自动重连机制 ## 3. 网格策略实现 ### 3.1 网格配置 #### WangGeListEnum **功能**:定义不同价格区间的网格参数,包括价格上下限、方向、步距等。 **核心属性**: - `name`: 网格名称 - `jiage_shangxian`: 价格上限 - `jiage_xiaxian`: 价格下限 - `jian_ju`: 网格步距 - `fang_xiang`: 持仓方向 (long/short) - `zhi_sun_dian`: 止损点 **主要方法**: - `getGridByPrice()`: 根据当前价格获取对应的网格 **网格定义示例**: ```java UP("上层做空", "2", "3100", "3000", "2", "short", "3100"), CENTER("中间做多", "2", "3000", "2900", "2", "long", "2900"), CENTER_ONE("中间做空", "2", "2900", "2870", "2", "short", "2870"), DOWN("下层做多", "2", "2870", "2850", "2", "long", "2850"); ``` ### 3.2 策略实现 #### CaoZuoService/CaoZuoServiceImpl **功能**:实现量化交易策略逻辑,包括加仓、减仓、止损等操作。 **核心方法**: - `caoZuoHandler()`: 主要策略逻辑入口 - `caoZuoZhiSunEvent()`: 止损事件处理 - `caoZuoInitEvent()`: 初始化订单处理 - `chooseEvent()`: 事件选择处理 - `caoZuoLong()`: 多头策略处理 - `caoZuoShort()`: 空头策略处理 **策略执行流程**: 1. 检查账户状态和系统开关 2. 判断当前价格所在网格 3. 检查是否需要止损 4. 检查持仓状态: - 无持仓:执行初始化订单 - 有持仓:根据网格策略决定加仓或减仓 5. 根据多空方向执行相应策略 ### 3.3 订单执行 #### TradeOrderWs **功能**:构建和发送订单请求到 OKX WebSocket 接口。 **核心方法**: - `orderEvent()`: 执行订单事件 **订单执行流程**: 1. 验证下单参数和账户状态 2. 检查账户和持仓通道是否就绪 3. 构建订单请求 JSON 4. 发送订单到 WebSocket 接口 5. 更新订单状态和就绪标志 ## 4. 系统交互流程 ### 4.1 启动流程 ``` [Spring 容器启动] → OkxWebSocketClientManager.init() → 初始化 newPriceClient → 初始化所有 quantClient → 建立 WebSocket 连接 ``` ### 4.2 价格触发交易流程 ``` OkxNewPriceWebSocketClient.onMessage() → processPushData() → triggerQuantOperations() → WangGeListEnum.getGridByPrice() → 对每个账号执行: 1. 检查反向持仓并止损 → caoZuoZhiSunEvent() 2. 执行当前网格策略 → caoZuoHandler() → chooseEvent() → caoZuoLong()/caoZuoShort() 3. 发送订单 → TradeOrderWs.orderEvent() ``` ### 4.3 订单执行流程 ``` TradeOrderWs.orderEvent() → 验证参数 → 检查就绪状态 → 构建订单JSON → 发送订单 → 更新状态标志 ``` ## 5. 数据结构 ### 5.1 订单请求参数 #### TradeRequestParam **功能**:封装交易订单请求参数。 **核心属性**: - `accountName`: 账号名称 - `markPx`: 标记价格 - `instId`: 合约ID - `tdMode`: 交易模式 - `posSide`: 持仓方向 - `ordType`: 订单类型 - `side`: 买卖方向 - `sz`: 数量 - `clOrdId`: 客户订单ID - `tradeType`: 交易类型 ### 5.2 数据存储结构 系统使用双层 Map 结构存储不同账号的数据: ```java // 第一层 key 为账号名称,第二层 key 为数据项 Map> accountDataMap = new ConcurrentHashMap<>(); ``` 主要数据存储类: - `AccountWs.ACCOUNTWSMAP`: 账户信息 - `PositionsWs.POSITIONSWSMAP`: 持仓信息 - `OrderInfoWs.ORDERINFOWSMAP`: 订单信息 - `TradeOrderWs.TRADEORDERWSMAP`: 交易订单信息 ## 6. 网格策略核心算法 ### 6.1 网格匹配算法 ```java public static WangGeListEnum getGridByPrice(BigDecimal price) { for (WangGeListEnum grid : WangGeListEnum.values()) { BigDecimal upperLimit = new BigDecimal(grid.jiage_shangxian); BigDecimal lowerLimit = new BigDecimal(grid.jiage_xiaxian); if (upperLimit.compareTo(lowerLimit) > 0) { if (price.compareTo(lowerLimit) > 0 && price.compareTo(upperLimit) <= 0) { return grid; } } } return null; } ``` ### 6.2 交易决策算法 ```java public TradeRequestParam caoZuoHandler(String accountName, String markPx, String posSide) { // 1. 检查系统开关和账户状态 // 2. 判断止损条件 // 3. 检查保证金和仓位情况 // 4. 根据持仓数量决定操作类型 // 5. 返回交易请求参数 } ``` ## 7. 错误处理与容错机制 ### 7.1 WebSocket 连接管理 - 实现心跳检测机制,定期发送 ping 请求 - 自动重连机制,连接断开后使用指数退避策略重连 - 连接状态管理,避免重复连接 ### 7.2 订单执行保障 - 订单参数验证,确保参数完整性 - 账户和持仓通道就绪检查 - 订单状态跟踪,避免重复下单 ### 7.3 风险控制 - 止损机制,限制单次交易亏损 - 保证金检查,避免满仓操作 - 系统开关,支持紧急暂停交易 ## 8. 扩展与定制 ### 8.1 网格参数配置 可通过修改 `WangGeListEnum` 枚举值来配置不同的网格参数: ```java // 格式:名称, 小数位数, 价格上限, 价格下限, 步距, 方向, 止损点 NEW_GRID("新网格", "2", "4000", "3500", "5", "long", "3500") ``` ### 8.2 策略扩展 可通过实现 `CaoZuoService` 接口来扩展新的交易策略: ```java public class CustomCaoZuoServiceImpl implements CaoZuoService { // 实现自定义策略逻辑 } ``` ### 8.3 多账号支持 系统天然支持多账号管理,只需在 `ExchangeInfoEnum` 中添加新的账号配置即可。 ## 9. 性能优化 1. **并发处理**:使用 `ConcurrentHashMap` 存储账号数据,支持高并发访问 2. **线程管理**:使用线程池处理异步任务,避免线程泄漏 3. **连接复用**:多个账号共享相同的 WebSocket 连接参数,减少连接开销 4. **数据缓存**:使用 Redis 缓存价格数据,提高数据访问效率 ## 10. 监控与日志 系统使用 SLF4J 日志框架,记录关键操作和错误信息: - WebSocket 连接状态 - 价格变化和网格匹配 - 订单执行过程 - 错误和异常信息 通过日志可以监控系统运行状态和排查问题。 ## 11. 总结 OKX 量化交易系统是一个基于 WebSocket 的实时交易系统,实现了多网格策略、自动交易执行和风险控制功能。系统采用模块化设计,各组件职责明确,便于维护和扩展。 核心功能包括: - 多网格策略配置和管理 - 实时价格监控和网格匹配 - 自动交易决策和执行 - 多账号管理和统一控制 - 完善的错误处理和风险控制 系统可以根据市场价格变化自动执行交易策略,实现量化交易的自动化和智能化。