| | |
| | | List<BigDecimal> trendEma = EMACalculator.calculateEMA(reversed1DPrices, trendPeriod, true); |
| | | BigDecimal latestTrendEma = trendEma.get(trendEma.size() - 1); |
| | | BigDecimal latestPrice = closePrices.get(0); |
| | | log.info( "200日EMA:{}, 最新价格:{}", latestTrendEma, latestPrice); |
| | | |
| | | // 2. 价格必须位于200日EMA上方(多头趋势确认) |
| | | boolean isAboveTrend = latestPrice.compareTo(latestTrendEma) > 0; |
| | |
| | | // 5. 底背离检查(增强多头信号可靠性) |
| | | boolean isBottomDivergence = MACDCalculator.isBottomDivergence(closePrices, macdResult); |
| | | |
| | | log.info("多头信号检查, 价格位于200日EMA上方: {}, 金叉: {}, MACD柱状线由负转正: {}, 底背离: {}", |
| | | isAboveTrend, isGoldenCross, isMacdHistTurningPositive, isBottomDivergence); |
| | | log.info("多头信号检查, 200日EMA价格{}位于上方: {}, 金叉: {}, MACD柱状线由负转正: {}, 底背离: {}", |
| | | latestTrendEma,isAboveTrend, isGoldenCross, isMacdHistTurningPositive, isBottomDivergence); |
| | | |
| | | // 多头开仓条件:柱状线转强 + 金叉 + (趋势向上或底背离) |
| | | return isMacdHistTurningPositive && isGoldenCross && ( isAboveTrend|| isBottomDivergence); |
| | |
| | | BigDecimal latestTrendEma = trendEma.get(trendEma.size() - 1); |
| | | BigDecimal latestPrice = closePrices.get(0); |
| | | |
| | | log.info( "200日EMA:{}, 最新价格:{}", latestTrendEma, latestPrice); |
| | | |
| | | // 2. 价格必须位于200日EMA下方(空头趋势确认) |
| | | boolean isBelowTrend = latestPrice.compareTo(latestTrendEma) < 0; |
| | | |
| | |
| | | // 5. 顶背离检查(增强空头信号可靠性) |
| | | boolean isTopDivergence = MACDCalculator.isTopDivergence(closePrices, macdResult); |
| | | |
| | | log.info("空头信号检查, 价格位于200日EMA下方: {}, 死叉: {}, MACD柱状线由正转负: {}, 顶背离: {}", |
| | | log.info("空头信号检查, 200日EMA价格{}位于下方: {}, 死叉: {}, MACD柱状线由正转负: {}, 顶背离: {}", |
| | | isBelowTrend, isDeathCross, isMacdHistTurningNegative, isTopDivergence); |
| | | |
| | | // 空头开仓条件:柱状线转弱 + 死叉 + (趋势向下或顶背离) |