critical: v11.2 EMERGENCY FIX - ADX 18 min (was 5), RSI 58-68 LONG (was 55-70)

- 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
This commit is contained in:
mindesbunister
2025-12-16 22:02:39 +01:00
parent 113e664ac2
commit 7c8f1688aa

View File

@@ -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)