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