edit | blame | history | raw

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 结构存储不同账号的数据:

// 第一层 key 为账号名称,第二层 key 为数据项
Map<String, Map<String, String>> accountDataMap = new ConcurrentHashMap<>();

主要数据存储类:
- AccountWs.ACCOUNTWSMAP: 账户信息
- PositionsWs.POSITIONSWSMAP: 持仓信息
- OrderInfoWs.ORDERINFOWSMAP: 订单信息
- TradeOrderWs.TRADEORDERWSMAP: 交易订单信息

6. 网格策略核心算法

6.1 网格匹配算法

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 交易决策算法

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 枚举值来配置不同的网格参数:

// 格式:名称, 小数位数, 价格上限, 价格下限, 步距, 方向, 止损点
NEW_GRID("新网格", "2", "4000", "3500", "5", "long", "3500")

8.2 策略扩展

可通过实现 CaoZuoService 接口来扩展新的交易策略:

public class CustomCaoZuoServiceImpl implements CaoZuoService {
    // 实现自定义策略逻辑
}

8.3 多账号支持

系统天然支持多账号管理,只需在 ExchangeInfoEnum 中添加新的账号配置即可。

9. 性能优化

  1. 并发处理:使用 ConcurrentHashMap 存储账号数据,支持高并发访问
  2. 线程管理:使用线程池处理异步任务,避免线程泄漏
  3. 连接复用:多个账号共享相同的 WebSocket 连接参数,减少连接开销
  4. 数据缓存:使用 Redis 缓存价格数据,提高数据访问效率

10. 监控与日志

系统使用 SLF4J 日志框架,记录关键操作和错误信息:

  • WebSocket 连接状态
  • 价格变化和网格匹配
  • 订单执行过程
  • 错误和异常信息

通过日志可以监控系统运行状态和排查问题。

11. 总结

OKX 量化交易系统是一个基于 WebSocket 的实时交易系统,实现了多网格策略、自动交易执行和风险控制功能。系统采用模块化设计,各组件职责明确,便于维护和扩展。

核心功能包括:
- 多网格策略配置和管理
- 实时价格监控和网格匹配
- 自动交易决策和执行
- 多账号管理和统一控制
- 完善的错误处理和风险控制

系统可以根据市场价格变化自动执行交易策略,实现量化交易的自动化和智能化。