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