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<BigDecimal> 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<BigDecimal> 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());
|
}
|
}
|