From bfb3c88962ab015056d9c0ebe3ca0abaf8af8000 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 05 Jan 2026 17:21:35 +0800
Subject: [PATCH] refactor(indicator): 优化MACD计算逻辑并修复数据处理顺序问题

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java |   23 +++++++++++++----------
 1 files changed, 13 insertions(+), 10 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 7568e2b..c1032c3 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
@@ -261,7 +261,8 @@
         // 1. 计算200日EMA(趋势过滤)
         List<BigDecimal> trendEma = EMACalculator.calculateEMA(close1DPrices, trendPeriod, true);
         BigDecimal latestTrendEma = trendEma.get(trendEma.size() - 1);
-        BigDecimal latestPrice = closePrices.get(closePrices.size() - 1);
+        BigDecimal latestPrice = closePrices.get(0);
+        log.info( "200日EMA:{},{}", latestTrendEma,  latestPrice);
         
         // 2. 价格必须位于200日EMA上方(多头趋势确认)
         boolean isAboveTrend = latestPrice.compareTo(latestTrendEma) > 0;
@@ -294,7 +295,9 @@
         // 1. 计算200日EMA(趋势过滤)
         List<BigDecimal> trendEma = EMACalculator.calculateEMA(close1DPrices, trendPeriod, true);
         BigDecimal latestTrendEma = trendEma.get(trendEma.size() - 1);
-        BigDecimal latestPrice = closePrices.get(closePrices.size() - 1);
+        BigDecimal latestPrice = closePrices.get(0);
+
+        log.info( "200日EMA:{},{}", latestTrendEma,  latestPrice);
         
         // 2. 价格必须位于200日EMA下方(空头趋势确认)
         boolean isBelowTrend = latestPrice.compareTo(latestTrendEma) < 0;
@@ -380,8 +383,8 @@
             return false;
         }
 
-        PriceData latest = macdData.get(macdData.size() - 1);
-        PriceData previous = macdData.get(macdData.size() - 2);
+        PriceData latest = macdData.get(0);
+        PriceData previous = macdData.get(1);
         
         // 金叉判断:DIF从下往上穿过DEA
         return previous.getDif().compareTo(previous.getDea()) < 0 && 
@@ -402,8 +405,8 @@
             return false;
         }
 
-        PriceData latest = macdData.get(macdData.size() - 1);
-        PriceData previous = macdData.get(macdData.size() - 2);
+        PriceData latest = macdData.get(0);
+        PriceData previous = macdData.get(1);
         
         // 死叉判断:DIF从上往下穿过DEA
         return previous.getDif().compareTo(previous.getDea()) > 0 && 
@@ -424,8 +427,8 @@
             return false;
         }
 
-        PriceData latest = macdData.get(macdData.size() - 1);
-        PriceData previous = macdData.get(macdData.size() - 2);
+        PriceData latest = macdData.get(0);
+        PriceData previous = macdData.get(1);
         
         // 柱状线由负转正:前一根为负,当前为正
         return previous.getMacdHist().compareTo(BigDecimal.ZERO) <= 0 && 
@@ -446,8 +449,8 @@
             return false;
         }
 
-        PriceData latest = macdData.get(macdData.size() - 1);
-        PriceData previous = macdData.get(macdData.size() - 2);
+        PriceData latest = macdData.get(0);
+        PriceData previous = macdData.get(1);
         
         // 柱状线由正转负:前一根为正,当前为负
         return previous.getMacdHist().compareTo(BigDecimal.ZERO) >= 0 && 

--
Gitblit v1.9.1