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