From 7d135ad0916dca539af66c09c612c559c6c4cab8 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 05 Jan 2026 17:56:39 +0800
Subject: [PATCH] fix(strategy): 修复MACD策略EMA计算和交易信号处理问题
---
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java
index 48f80ab..f5ebaf3 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java
@@ -11,6 +11,8 @@
import lombok.extern.slf4j.Slf4j;
import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
/**
@@ -264,7 +266,10 @@
*/
private boolean isLongEntryCondition(MACDResult macdResult, List<BigDecimal> closePrices, List<BigDecimal> close1DPrices) {
// 1. 计算200日EMA(趋势过滤)
- List<BigDecimal> trendEma = EMACalculator.calculateEMA(close1DPrices, trendPeriod, true);
+ // 复制并反转日线数据,确保从旧到新计算EMA
+ List<BigDecimal> reversed1DPrices = new ArrayList<>(close1DPrices);
+ Collections.reverse(reversed1DPrices);
+ List<BigDecimal> trendEma = EMACalculator.calculateEMA(reversed1DPrices, trendPeriod, true);
BigDecimal latestTrendEma = trendEma.get(trendEma.size() - 1);
BigDecimal latestPrice = closePrices.get(0);
log.info( "200日EMA:{}, 最新价格:{}", latestTrendEma, latestPrice);
@@ -298,7 +303,10 @@
*/
private boolean isShortEntryCondition(MACDResult macdResult, List<BigDecimal> closePrices, List<BigDecimal> close1DPrices) {
// 1. 计算200日EMA(趋势过滤)
- List<BigDecimal> trendEma = EMACalculator.calculateEMA(close1DPrices, trendPeriod, true);
+ // 复制并反转日线数据,确保从旧到新计算EMA
+ List<BigDecimal> reversed1DPrices = new ArrayList<>(close1DPrices);
+ Collections.reverse(reversed1DPrices);
+ List<BigDecimal> trendEma = EMACalculator.calculateEMA(reversed1DPrices, trendPeriod, true);
BigDecimal latestTrendEma = trendEma.get(trendEma.size() - 1);
BigDecimal latestPrice = closePrices.get(0);
--
Gitblit v1.9.1