From b70f32814aa9dc23ad284b43e91bbc6c96c70366 Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Mon, 05 Jan 2026 15:32:08 +0800
Subject: [PATCH] feat(indicator): 添加MACD指标计算功能并优化策略参数
---
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/EMACalculator.java | 18 ++++++++++++++++++
1 files changed, 18 insertions(+), 0 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/EMACalculator.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/EMACalculator.java
index d1e0a1d..019b1a1 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/EMACalculator.java
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/EMACalculator.java
@@ -86,4 +86,22 @@
public static List<BigDecimal> calculateEMA(List<BigDecimal> prices, int period) {
return calculateEMA(prices, period, true);
}
+
+ /**
+ * 计算单个EMA值(递归计算方式)
+ *
+ * @param currentPrice 当前价格
+ * @param prevEMA 前一个EMA值
+ * @param period EMA周期
+ * @return 当前EMA值
+ */
+ public static BigDecimal calculateSingleEMA(BigDecimal currentPrice, BigDecimal prevEMA, int period) {
+ // 计算权重因子alpha = 2 / (period + 1)
+ BigDecimal alpha = BigDecimal.valueOf(2.0).divide(BigDecimal.valueOf(period + 1), 10, RoundingMode.HALF_UP);
+
+ // EMA(today) = Price(today) * alpha + EMA(yesterday) * (1 - alpha)
+ return currentPrice.multiply(alpha)
+ .add(prevEMA.multiply(BigDecimal.ONE.subtract(alpha)))
+ .setScale(10, RoundingMode.HALF_UP);
+ }
}
\ No newline at end of file
--
Gitblit v1.9.1