| | |
| | | |
| | | import com.alibaba.fastjson.JSONArray; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.xcong.excoin.modules.okxApi.OkxGridTradeService; |
| | | import com.xcong.excoin.modules.okxApi.IOkxStrategy; |
| | | import com.xcong.excoin.modules.okxApi.wsHandler.OkxChannelHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.java_websocket.client.WebSocketClient; |
| | |
| | | * |
| | | * <h3>双回调</h3> |
| | | * <ul> |
| | | * <li>{@link OkxGridTradeService#onKline(BigDecimal)} — 驱动网格策略(处理开仓/止盈逻辑)</li> |
| | | * <li>{@link OkxGridTradeService#setMarkPrice(BigDecimal)} — PnLPriceMode.MARK_PRICE 计算未实现盈亏</li> |
| | | * <li>{@link IOkxStrategy#onKline(BigDecimal)} — 驱动策略(处理开仓/止盈逻辑)</li> |
| | | * <li>{@link IOkxStrategy#setMarkPrice(BigDecimal)} — PnLPriceMode.MARK_PRICE 计算未实现盈亏</li> |
| | | * </ul> |
| | | * |
| | | * <h3>订阅格式</h3> |
| | |
| | | /** 交易对标识,如 "ETH-USDT-SWAP" */ |
| | | private final String instId; |
| | | |
| | | /** 网格交易服务,接收标记价格回调 */ |
| | | private final OkxGridTradeService gridTradeService; |
| | | /** 策略服务实例,接收标记价格回调 */ |
| | | private final IOkxStrategy strategy; |
| | | |
| | | /** 订阅确认状态 */ |
| | | private volatile boolean subscribed = false; |
| | |
| | | /** |
| | | * 构造标记价格频道处理器。 |
| | | * |
| | | * @param instId 交易对标识(如 "ETH-USDT-SWAP") |
| | | * @param gridTradeService OKX 网格交易策略服务实例 |
| | | * @param instId 交易对标识(如 "ETH-USDT-SWAP") |
| | | * @param strategy OKX 交易策略服务实例 |
| | | */ |
| | | public MarkPriceOkxChannelHandler(String instId, OkxGridTradeService gridTradeService) { |
| | | public MarkPriceOkxChannelHandler(String instId, IOkxStrategy strategy) { |
| | | this.instId = instId; |
| | | this.gridTradeService = gridTradeService; |
| | | this.strategy = strategy; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | BigDecimal markPrice = new BigDecimal(markPxStr); |
| | | |
| | | if (gridTradeService != null) { |
| | | gridTradeService.setMarkPrice(markPrice); |
| | | gridTradeService.onKline(markPrice); |
| | | if (strategy != null) { |
| | | strategy.setMarkPrice(markPrice); |
| | | strategy.onKline(markPrice); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("[OKX-WS] 处理 mark-price 数据失败", e); |