From 4c70b99382c01d707b41060c3c3b81d538f1c1db Mon Sep 17 00:00:00 2001
From: Administrator <15274802129@163.com>
Date: Fri, 26 Dec 2025 15:53:39 +0800
Subject: [PATCH] fix(indicator): 修复MACD指标计算和策略逻辑错误
---
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java | 29 ++++++++++++++++-------------
1 files changed, 16 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java b/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java
index 4c47269..cea66cc 100644
--- a/src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.java
+++ b/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;
+
+ // 3. 简化的波动率检查
+ boolean volatilityFilter = volatility.compareTo(BigDecimal.ZERO) > 0;
- // 4. 波动率过滤检查(0.5% ~ 5%)
- boolean volatilityFilter = isVolatilityInRange(volatility);
-
- // 所有条件必须同时满足
- 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 &&
--
Gitblit v1.9.1