From 81e84c3bb307e2a786d383fad7e14c0c2b4d897e Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Wed, 24 Dec 2025 18:09:28 +0800
Subject: [PATCH] feat(okxNewPrice): 添加MACD+MA复合交易策略实现

---
 src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MovingAverage.java |   71 +++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MovingAverage.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MovingAverage.java
new file mode 100644
index 0000000..5b849b7
--- /dev/null
+++ b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MovingAverage.java
@@ -0,0 +1,71 @@
+package com.xcong.excoin.modules.okxNewPrice.indicator.macdAndMatrategy;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+/**
+ * 移动平均线(Moving Average)指标实现类
+ * 
+ * 移动平均线是一种趋势跟随型技术指标,通过计算一段时间内价格的平均值,
+ * 来平滑价格波动并识别趋势方向。本类实现了简单移动平均线(SMA)的计算。
+ * 
+ * 【核心功能】
+ * 1. 计算指定周期的移动平均线
+ * 2. 支持高精度BigDecimal计算,避免浮点数精度损失
+ * 3. 提供获取最新计算结果的接口
+ * 
+ * 【使用场景】
+ * - 在MACD+MA策略中,用于判断市场长期趋势(200日MA)和中短期支撑/阻力(50日MA)
+ * - 适用于各种时间周期的价格数据
+ */
+public class MovingAverage {
+    /**
+     * 移动平均线的计算周期
+     */
+    private final int period;
+    
+    /**
+     * 移动平均线的最新计算结果
+     */
+    private BigDecimal ma = BigDecimal.ZERO;
+
+    /**
+     * 构造方法
+     * 
+     * @param period 移动平均线的计算周期
+     */
+    public MovingAverage(int period) {
+        this.period = period;
+    }
+
+    /**
+     * 计算移动平均线
+     * 
+     * @param prices 历史价格数据列表
+     */
+    public void calculate(List<BigDecimal> prices) {
+        // 如果价格数据不足计算周期,不进行计算
+        if (prices.size() < period) {
+            return;
+        }
+
+        // 计算最近period个价格的总和
+        BigDecimal sum = BigDecimal.ZERO;
+        for (int i = prices.size()-period; i < prices.size(); i++) {
+            sum = sum.add(prices.get(i));
+        }
+
+        // 计算平均值,保留8位小数,四舍五入
+        ma = sum.divide(new BigDecimal(period), 8, RoundingMode.HALF_UP);
+    }
+
+    /**
+     * 获取最新计算的移动平均线值
+     *
+     * @return 移动平均线值
+     */
+    public BigDecimal getMa() {
+        return ma;
+    }
+}

--
Gitblit v1.9.1