Administrator
2025-12-26 4c70b99382c01d707b41060c3c3b81d538f1c1db
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java
@@ -207,22 +207,25 @@
     * @param volatility 当前波动率
     * @return 是否满足多头开仓条件
     */
    private boolean isLongEntryCondition(MACDResult macdResult, List<BigDecimal> closePrices,
                                         BigDecimal volatility) {
        // 1. EMA金叉检查(短期EMA > 长期EMA)
    private boolean isLongEntryCondition(MACDResult macdResult, List<BigDecimal> closePrices, BigDecimal volatility) {
        // 1. EMA金叉检查(简化为只检查当前短期EMA > 当前长期EMA)
        List<PriceData> macdData = macdResult.getMacdData();
        if (macdData.size() < 1) {
            return false;
        }
        boolean emaGoldenCross = isEmaGoldenCross(macdResult);
        // 2. MACD柱状线扩张+金叉检查
        boolean macdGoldenCross = isMacdGoldenCrossAndExpanding(macdResult);
        PriceData latest = macdData.get(macdData.size() - 1);
        boolean emaShortAboveLong = latest.getEmaShort().compareTo(latest.getEmaLong()) > 0;
        // 3. 价格突破前高检查
        boolean priceBreakout = BullishSignalDetector.isBullishSignalFormed(macdResult, closePrices);
        // 2. MACD柱状线为正
        boolean macdPositive = latest.getMacdHist().compareTo(BigDecimal.ZERO) > 0;
        // 4. 波动率过滤检查(0.5% ~ 5%)
        boolean volatilityFilter = isVolatilityInRange(volatility);
        // 3. 简化的波动率检查
        boolean volatilityFilter = volatility.compareTo(BigDecimal.ZERO) > 0;
        // 所有条件必须同时满足
        return emaGoldenCross && macdGoldenCross && priceBreakout && volatilityFilter;
        // 只需要EMA短期在长期上方、MACD柱状线为正且波动率大于0
        return emaGoldenCross && emaShortAboveLong && macdPositive && volatilityFilter;
    }
    /**
@@ -384,7 +387,7 @@
     * @return 波动率是否在0.5%~5%范围内
     */
    private boolean isVolatilityInRange(BigDecimal volatility) {
        BigDecimal minVolatility = new BigDecimal("0.5");
        BigDecimal minVolatility = new BigDecimal("0.1"); // 降低最小波动率阈值
        BigDecimal maxVolatility = new BigDecimal("5.0");
        return volatility.compareTo(minVolatility) >= 0 &&