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参数构建工具
init():初始化所有客户端destroy():销毁所有客户端getAllClients():获取所有账号客户端init() → connect() → subscribeChannels() → 接收价格数据 → processPushData() → triggerQuantOperations()init() → connect() → websocketLogin() → 订阅私有频道 → 接收数据caoZuo(String accountName):根据账号执行策略caoZuoLong(String accountName, String markPx):多头策略执行caoZuoShort(String accountName, String markPx):空头策略执行initAccountName(String accountName, String posSide):初始化带多空方向的账号名handleEvent(JSONObject response, String accountName):处理仓位数据推送jiage_shangxian:价格上限jiage_xiaxian:价格下限fang_xiang:操作方向(long/short)jian_ju:网格间距getGridByPrice(BigDecimal price):根据当前价格获取匹配的网格1. Spring容器启动,OkxWebSocketClientManager初始化
2. 创建OkxNewPriceWebSocketClient实例并初始化
3. 遍历ExchangeInfoEnum,为每个账号创建OkxQuantWebSocketClient实例
4. 所有客户端建立WebSocket连接并进行认证
5. 订阅相应的WebSocket频道
1. OkxNewPriceWebSocketClient接收价格数据
2. 调用`processPushData()`处理价格数据
3. 调用`triggerQuantOperations()`触发策略执行
4. 遍历所有账号客户端:
a. 获取账号名称
b. 调用`CaoZuoService.caoZuo(accountName)`确定操作方向
c. 调用`TradeOrderWs.orderEvent()`执行订单操作
1. 获取当前价格
2. 调用`WangGeListEnum.getGridByPrice(price)`确定网格位置
3. 根据网格的`fang_xiang`参数确定操作方向
4. 结合当前仓位状态和市场情况,决定最终操作(买/卖/止损/初始化)
5. 返回操作方向给调用者
┌─────────────────────────────────────────────────────────┐
│ 应用层 │
├─────────────────────────────────────────────────────────┤
│ OkxWebSocketClientManager │
├─────────────────┬───────────────────────────────────────┤
│ │ │
│ OkxNewPrice │ OkxQuantWebSocketClient (多实例) │
│ WebSocketClient │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ │ Account1│ │ Account2│ │ AccountN│ │
│ │ └─────────┘ └─────────┘ └─────────┘ │
├─────────────────┴───────────────────────────────────────┤
│ WebSocket通信层 │
├─────────────────────────────────────────────────────────┤
│ OKX WebSocket API │
└─────────────────────────────────────────────────────────┘
1. OKX公共WebSocket → OkxNewPriceWebSocketClient → Redis存储价格
2. OKX私有WebSocket → OkxQuantWebSocketClient → 私有数据处理
3. 价格变化 → CaoZuoService策略执行 → TradeOrderWs订单执行
4. 订单结果 → OrderInfoWs处理 → 更新订单状态
5. 仓位变化 → PositionsWs处理 → 更新仓位数据
当前网格策略通过WangGeListEnum硬编码配置:
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");
扩展建议:
- 将网格参数迁移到数据库或配置文件
- 实现动态加载和更新网格策略
- 支持网格策略的增删改查操作
账号信息通过ExchangeInfoEnum配置,每个枚举值对应一个交易账号。
问题1:WebSocket连接频繁断开
解决:检查网络环境,调整心跳间隔和重连策略
问题2:策略执行不符合预期
解决:检查网格参数配置,分析策略执行日志,调整策略逻辑
问题3:订单执行失败
解决:检查账号权限,查看订单执行日志,分析失败原因
版本:1.0
更新日期:2025-12-17
维护人:开发团队