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 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; } }