package com.xcong.excoin.modules.okxApi;
import java.math.BigDecimal;
/**
* OKX 策略通用接口 — WS 频道处理器的回调契约。
*
*
定义所有 OKX 交易策略必须实现的核心回调方法,使得不同的策略实现
* 可以无缝接入相同的 WebSocket 基础设施。
*
*
实现类
*
* - {@link OkxProfitRecycleStrategy} — 盈利回收循环策略
*
*
* WS 回调映射
*
* | WS频道 | 回调方法 | 说明 |
* | mark-price | onKline / setMarkPrice | 价格驱动 + PnL计算 |
* | positions | onPositionUpdate | 仓位变更通知 |
* | orders | onAutoOrder | 条件单状态变更 |
*
*
* @author Administrator
*/
public interface IOkxStrategy {
/**
* K线/价格数据回调(公开频道 mark-price 推送)。
*
* @param price 最新价格(标记价或最新价)
*/
void onKline(BigDecimal price);
/**
* 标记价格设置(用于 PnL 计算)。
*
* @param markPrice 标记价格
*/
void setMarkPrice(BigDecimal markPrice);
/**
* 仓位更新回调(私有频道 positions 推送)。
*
* @param contract 合约名称
* @param direction 交易方向(LONG / SHORT)
* @param size 持仓张数(绝对值)
* @param entryPrice 开仓均价
*/
void onPositionUpdate(String contract, Direction direction,
BigDecimal size, BigDecimal entryPrice);
/**
* 自动订单状态变更回调(私有频道 orders 推送)。
*
* @param orderId 条件单算法 ID(algoId)
* @param status 订单状态(如 "finished")
* @param reason 状态原因(如 "filled")
* @param orderType 订单类型(如 "entry-long", "plan-close-long-position")
* @param tradeId 成交 ID
*/
void onAutoOrder(String orderId, String status, String reason,
String orderType, String tradeId);
/**
* 策略是否处于活跃状态(非 STOPPED/WAITING_KLINE)。
*
* @return true 表示策略正在运行
*/
boolean isStrategyActive();
/**
* 保存 WS 客户端引用(用于判断订阅状态)。
*
* @param wsClient OKX WebSocket 客户端
*/
void setWsClient(OkxKlineWebSocketClient wsClient);
}