src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/BearishSignalDetector.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/BullishSignalDetector.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/EMACalculator.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MACDCalculator.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MACDCalculator.java
@@ -75,9 +75,9 @@ // 创建价格数据对象 PriceData data = new PriceData(closePrices.get(closeIdx)); // 设置EMA(注意索引偏移计算) data.setEmaShort(emaShort.get(i + shortPeriod - 1)); data.setEmaLong(emaLong.get(i + longPeriod - 1)); // 设置EMA(修复索引计算,使用正确的偏移位置) data.setEmaShort(emaShort.get(closeIdx - shortPeriod + 1)); data.setEmaLong(emaLong.get(closeIdx - longPeriod + 1)); // 设置DIF、DEA和MACD柱状图 data.setDif(difValues.get(i)); @@ -103,3 +103,4 @@ return calculateMACD(closePrices, 12, 26, 9); } } src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MACDResult.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MACDResult.java
@@ -6,15 +6,11 @@ */ package com.xcong.excoin.modules.okxNewPrice.indicator.macdAndMatrategy; import lombok.Data; import java.util.List; /** * MACD计算结果封装类 * 使用@Data注解自动生成getter、setter、equals、hashCode和toString方法 */ @Data public class MACDResult { /** MACD完整数据序列,包含每个价格点对应的DIF、DEA和MACD柱状图值 */ private List<PriceData> macdData; @@ -32,4 +28,20 @@ this.macdData = result; this.startIndex = startIdx; } /** * 获取MACD数据序列 * @return MACD数据序列 */ public List<PriceData> getMacdData() { return macdData; } /** * 获取起始索引 * @return 起始索引值 */ public int getStartIndex() { return startIndex; } } src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy$PositionType.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy$TradingOrder.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategy.classBinary files differ
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 && src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategyTest.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategyTest.java
@@ -38,12 +38,12 @@ // 生成初始价格数据 for (int i = 0; i < 50; i++) { prices.add(new BigDecimal("100.00").add(new BigDecimal(i * 0.5))); prices.add(new BigDecimal("100.00").add(new BigDecimal(i))); } // 模拟上涨趋势 for (int i = 0; i < 30; i++) { BigDecimal newPrice = new BigDecimal("125.00").add(new BigDecimal(i * 0.3)); for (int i = 0; i < 50; i++) { BigDecimal newPrice = new BigDecimal("125.00").add(new BigDecimal(i)); prices.add(newPrice); MacdMaStrategy.TradingOrder order = strategy.generateTradingOrder(prices); @@ -65,12 +65,12 @@ // 生成初始价格数据 for (int i = 0; i < 50; i++) { prices.add(new BigDecimal("150.00").subtract(new BigDecimal(i * 0.5))); prices.add(new BigDecimal("150.00").subtract(new BigDecimal(i))); } // 模拟下跌趋势 for (int i = 0; i < 30; i++) { BigDecimal newPrice = new BigDecimal("125.00").subtract(new BigDecimal(i * 0.3)); BigDecimal newPrice = new BigDecimal("125.00").subtract(new BigDecimal(i )); prices.add(newPrice); MacdMaStrategy.TradingOrder order = strategy.generateTradingOrder(prices); src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/PriceData.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/Volatility.classBinary files differ
src/main/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/Volatility.java
@@ -138,6 +138,10 @@ do { prev = x; // 牛顿迭代公式:x(n+1) = (x(n) + value/x(n))/2 // 添加零检查,防止除以零异常 if (x.compareTo(BigDecimal.ZERO) == 0) { x = new BigDecimal(1); // 设置一个合理的初始值 } x = x.add(value.divide(x, scale, RoundingMode.HALF_UP)).divide(new BigDecimal(2), scale, RoundingMode.HALF_UP); } while (x.subtract(prev).abs().compareTo(BigDecimal.ONE.movePointLeft(scale)) > 0); // 直到满足精度要求 src/test/java/com/xcong/excoin/modules/okxNewPrice/indicator/macdAndMatrategy/MacdMaStrategyTest.java
File was deleted