edit | blame | history | raw

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 实例
  1. WebSocket 连接
  • OkxNewPriceWebSocketClient 连接公共价格 WebSocket
  • 每个 OkxQuantWebSocketClient 连接私有 WebSocket 并登录
  • 订阅相关频道(价格、账户、持仓、订单等)

3.2 价格触发交易流程

┌─────────────────────────┐     ┌─────────────────────────┐
│ OkxNewPriceWebSocketClient │     │ WangGeListEnum         │
│ └─ processPushData()    │────▶│ └─ getGridByPrice()     │
└─────────────────────────┘     └─────────────────────────┘
         ▲                              ▼
         │                     ┌─────────────────────────┐
         │                     │ CaoZuoServiceImpl      │
         │                     │ └─ caoZuo()            │
         │                     └─────────────────────────┘
         │                              ▼
         │                     ┌─────────────────────────┐
         │                     │ TradeOrderWs           │
         │                     │ └─ orderEvent()        │
         │                     └─────────────────────────┘
         │                              ▼
┌────────┴─────────────────────────────────────────────┐
│ OkxQuantWebSocketClient                              │
│ └─ handleWebSocketMessage()                          │
└──────────────────────────────────────────────────────┘
  1. 价格接收
  • OkxNewPriceWebSocketClient 接收实时价格推送
  • 调用 processPushData() 处理价格数据
  1. 策略决策
  • 根据当前价格获取对应的网格参数(WangGeListEnum.getGridByPrice()
  • 调用 CaoZuoServiceImpl.caoZuo() 进行策略决策
  • 根据网格方向调用对应的多头或空头策略
  1. 订单执行
  • 调用 TradeOrderWs.orderEvent() 执行交易订单
  • 通过 OkxQuantWebSocketClient 发送订单指令

3.3 持仓数据管理流程

  1. 数据接收
  • OkxQuantWebSocketClient 接收持仓数据推送
  • 调用 PositionsWs.handleEvent() 处理持仓数据
  1. 数据存储
  • 使用双层 Map 存储持仓数据:accountName_posSide -> data
  • 支持多头和空头方向的独立存储
  1. 数据使用
  • 策略层通过 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. 高可靠性:支持心跳检测、自动重连和异常处理

该系统实现了从价格获取、策略决策到订单执行的完整流程,为量化交易提供了稳定可靠的基础架构。