From 7c8f1688aa7a79d8e33cf952263b2bb0a8969d10 Mon Sep 17 00:00:00 2001 From: mindesbunister Date: Tue, 16 Dec 2025 22:02:39 +0100 Subject: [PATCH] critical: v11.2 EMERGENCY FIX - ADX 18 min (was 5), RSI 58-68 LONG (was 55-70) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ADX minimum: 5 → 18 (all ADX <18 trades were losses) - RSI LONG range: 55-70 → 58-68 (tighter momentum window) - Fixed ADX filter: > to >= for proper boundary check - Reason: 4 consecutive SL losses, quality 95-100 signals failing - Evidence: ADX 13.2 = -0.55, ADX 15.8 = -.18, RSI 59.5 = -0.03 --- workflows/trading/moneyline_v11_all_filters.pinescript | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/workflows/trading/moneyline_v11_all_filters.pinescript b/workflows/trading/moneyline_v11_all_filters.pinescript index fcf8143..d7a3a18 100644 --- a/workflows/trading/moneyline_v11_all_filters.pinescript +++ b/workflows/trading/moneyline_v11_all_filters.pinescript @@ -1,5 +1,5 @@ //@version=6 -indicator("Bullmania Money Line v11 All Filters", shorttitle="ML v11", overlay=true) +indicator("Bullmania Money Line v11.2 EMERGENCY FIX", shorttitle="ML v11.2", overlay=true) // Calculation source (Chart vs Heikin Ashi) srcMode = input.string("Chart", "Calculation source", options=["Chart","Heikin Ashi"], tooltip="Use regular chart candles or Heikin Ashi for the line calculation.") @@ -49,7 +49,7 @@ useEntryBuffer = input.bool(true, "Require entry buffer (ATR)", group=groupFilte entryBufferATR = input.float(0.10, "Buffer size (in ATR)", minval=0.0, step=0.05, group=groupFilters, tooltip="V11 OPTIMIZED: 0.10 ATR (from exhaustive sweep) - balanced flip protection.") useAdx = input.bool(true, "Use ADX trend-strength filter", group=groupFilters, tooltip="V11: Enabled by default to reduce choppy trades.") adxLen = input.int(16, "ADX Length", minval=1, group=groupFilters) -adxMin = input.int(5, "ADX minimum", minval=0, maxval=100, group=groupFilters, tooltip="V11 OPTIMIZED: 5 (from exhaustive sweep) - allows more signals with sticky trend system protecting quality.") +adxMin = input.int(18, "ADX minimum", minval=0, maxval=100, group=groupFilters, tooltip="V11.2 CRITICAL FIX: 18 minimum (all ADX <18 trades were losses: 13.2=-$20, 15.8=-$4, 17.0=-$7). Filters weak chop.") // NEW v6 FILTERS groupV6Filters = "v6 Quality Filters" @@ -62,8 +62,8 @@ volMin = input.float(0.1, "Volume min ratio", minval=0.0, step=0.1, group=groupV volMax = input.float(3.5, "Volume max ratio", minval=0.5, step=0.5, group=groupV6Filters, tooltip="Maximum volume relative to 20-bar MA.") useRsiFilter = input.bool(true, "Use RSI momentum filter", group=groupV6Filters, tooltip="Ensure momentum confirms direction.") -rsiLongMin = input.float(55, "RSI long minimum", minval=0, maxval=100, group=groupV6Filters, tooltip="V11.1 DATA-DRIVEN: 55-70 captures sweet spot (RSI 60-70 = 100% WR, +$26.97). Buffer below 60 for safety.") -rsiLongMax = input.float(70, "RSI long maximum", minval=0, maxval=100, group=groupV6Filters, tooltip="V11.1 DATA-DRIVEN: 70 max (RSI 73.5 was -$17 worst loss).") +rsiLongMin = input.float(58, "RSI long minimum", minval=0, maxval=100, group=groupV6Filters, tooltip="V11.2 TIGHTENED: 58-68 range (LONG trades at 59.5 lost -$40, need stronger momentum). Quality 95 still lost with RSI 59.5.") +rsiLongMax = input.float(68, "RSI long maximum", minval=0, maxval=100, group=groupV6Filters, tooltip="V11.2 TIGHTENED: 68 max (RSI 73.5 was -$17 loss, avoid overbought entries entirely).") rsiShortMin = input.float(30, "RSI short minimum", minval=0, maxval=100, group=groupV6Filters, tooltip="V11.1 DATA-DRIVEN: 30-70 captures winners (Both winning SHORTs at RSI 38.8 and 44). Filter was blocking good signals!") rsiShortMax = input.float(70, "RSI short maximum", minval=0, maxval=100, group=groupV6Filters, tooltip="V11.1 DATA-DRIVEN: 70 max avoids overbought chasing. User test showed 4 signals blocked with min=45!") @@ -200,7 +200,7 @@ plusDI = atrADX == 0.0 ? 0.0 : 100.0 * plusDMSmooth / atrADX minusDI = atrADX == 0.0 ? 0.0 : 100.0 * minusDMSmooth / atrADX dx = (plusDI + minusDI == 0.0) ? 0.0 : 100.0 * math.abs(plusDI - minusDI) / (plusDI + minusDI) adxVal = ta.rma(dx, adxLen) -adxOk = not useAdx or (adxVal > adxMin) +adxOk = not useAdx or (adxVal >= adxMin) // Entry buffer gates relative to current Money Line longBufferOk = not useEntryBuffer or (calcC > supertrend + entryBufferATR * atr)