package com.xcong.excoin.modules.okxNewPrice.indicator.strategy; import com.xcong.excoin.modules.okxNewPrice.okxWs.param.TradeRequestParam; import com.xcong.excoin.modules.okxNewPrice.utils.WsMapBuild; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * 技术指标策略抽象基类,提供通用功能 */ @Slf4j @Getter @Setter public abstract class AbstractTechnicalIndicatorStrategy implements TechnicalIndicatorStrategy { protected static final int MAX_PRICE_HISTORY = 100; // 最大价格历史记录数量 protected List priceHistory = new ArrayList<>(); protected boolean initialized = false; protected String strategyName = ""; // 策略名称 @Override public void initialize() { priceHistory.clear(); initialized = true; log.info("策略初始化完成: {}", strategyName); } @Override public void updatePrices(List prices) { if (!initialized) { initialize(); } if (prices == null || prices.isEmpty()) { return; } // 更新价格历史记录 priceHistory.addAll(prices); // 限制价格历史记录数量 if (priceHistory.size() > MAX_PRICE_HISTORY) { priceHistory = priceHistory.subList(priceHistory.size() - MAX_PRICE_HISTORY, priceHistory.size()); } log.debug("价格历史记录更新完成,当前数量: {}", priceHistory.size()); } @Override public boolean isValid() { return initialized; } /** * 创建交易请求参数 * @param accountName 账户名称 * @param markPx 当前标记价格 * @param posSide 仓位方向 * @param signal 交易信号 * @return 交易请求参数 */ protected TradeRequestParam createTradeRequestParam(String accountName, String markPx, String posSide, TradeSignal signal) { TradeRequestParam param = new TradeRequestParam(); param.setAccountName(accountName); param.setMarkPx(markPx); param.setPosSide(posSide); log.info("账户: {}, 价格: {}, 仓位方向: {}, 信号: {}", accountName, markPx, posSide, signal.getName()); return param; } /** * 日志记录交易信号 * @param accountName 账户名称 * @param markPx 当前标记价格 * @param signal 交易信号 */ protected void logSignal(String accountName, String markPx, TradeSignal signal) { log.info("策略: {}, 账户: {}, 价格: {}, 信号: {}", strategyName, accountName, markPx, signal.getName()); } }