| breakout, no sector filter | triangle_breakout | - | - |
| breakout, sector+ticker RS | triangle_breakout | - | - |
| no slope gate / no quality gate | triangle_breakout | - | - |
| no slope gate / range_pos_avg5 >= 0.40 (upper half coiling) | triangle_breakout | - | - |
| no slope gate / vol_ratio <= 0.80 (quiet pullback) | triangle_breakout | - | - |
| no slope gate / upper-half + quiet | triangle_breakout | - | - |
| slope_balance >= 0 (ascending wedge) / no quality gate | triangle_breakout | - | - |
| slope_balance >= 0 (ascending wedge) / range_pos_avg5 >= 0.40 (upper half coiling) | triangle_breakout | - | - |
| slope_balance >= 0 (ascending wedge) / vol_ratio <= 0.80 (quiet pullback) | triangle_breakout | - | - |
| slope_balance >= 0 (ascending wedge) / upper-half + quiet | triangle_breakout | - | - |
| slope_balance >= 0.001 (meaningfully ascending) / no quality gate | triangle_breakout | - | - |
| slope_balance >= 0.001 (meaningfully ascending) / range_pos_avg5 >= 0.40 (upper half coiling) | triangle_breakout | - | - |
| slope_balance >= 0.001 (meaningfully ascending) / vol_ratio <= 0.80 (quiet pullback) | triangle_breakout | - | - |
| slope_balance >= 0.001 (meaningfully ascending) / upper-half + quiet | triangle_breakout | - | - |
| res_slope_pct >= -0.002 (nearly flat resistance) / no quality gate | triangle_breakout | - | - |
| res_slope_pct >= -0.002 (nearly flat resistance) / range_pos_avg5 >= 0.40 (upper half coiling) | triangle_breakout | - | - |
| res_slope_pct >= -0.002 (nearly flat resistance) / vol_ratio <= 0.80 (quiet pullback) | triangle_breakout | - | - |
| res_slope_pct >= -0.002 (nearly flat resistance) / upper-half + quiet | triangle_breakout | - | - |
| no impulse gate / ema21_breaches == 0 (strict) | triangle_breakout | - | - |
| no impulse gate / ema21_breaches <= 1 (allow one wick) | triangle_breakout | - | - |
| no impulse gate / ema21_breaches <= 2 (allow two wicks) | triangle_breakout | - | - |
| cml_arm_roc >= 0.05 (5%+ impulse) / ema21_breaches == 0 (strict) | triangle_breakout | - | - |
| cml_arm_roc >= 0.05 (5%+ impulse) / ema21_breaches <= 1 (allow one wick) | triangle_breakout | - | - |
| cml_arm_roc >= 0.05 (5%+ impulse) / ema21_breaches <= 2 (allow two wicks) | triangle_breakout | - | - |
| cml_arm_roc >= 0.10 (10%+ impulse) / ema21_breaches == 0 (strict) | triangle_breakout | - | - |
| cml_arm_roc >= 0.10 (10%+ impulse) / ema21_breaches <= 1 (allow one wick) | triangle_breakout | - | - |
| cml_arm_roc >= 0.10 (10%+ impulse) / ema21_breaches <= 2 (allow two wicks) | triangle_breakout | - | - |
| cml_arm_roc >= 0.15 (15%+ impulse) / ema21_breaches == 0 (strict) | triangle_breakout | - | - |
| cml_arm_roc >= 0.15 (15%+ impulse) / ema21_breaches <= 1 (allow one wick) | triangle_breakout | - | - |
| cml_arm_roc >= 0.15 (15%+ impulse) / ema21_breaches <= 2 (allow two wicks) | triangle_breakout | - | - |
| Phase 3 base only (flat res + vol dryup) | triangle_breakout | - | - |
| no regime filter / flat highs (res_slope >= -0.002) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| no regime filter / flat highs (res_slope >= -0.002) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| no regime filter / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| no regime filter / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| no regime filter / rising lows only (sup_slope > 0, any resistance) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| no regime filter / rising lows only (sup_slope > 0, any resistance) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| SPY above 200d SMA / flat highs (res_slope >= -0.002) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| SPY above 200d SMA / flat highs (res_slope >= -0.002) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| SPY above 200d SMA / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| SPY above 200d SMA / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| SPY above 200d SMA / rising lows only (sup_slope > 0, any resistance) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| SPY above 200d SMA / rising lows only (sup_slope > 0, any resistance) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| sector above 200d SMA / flat highs (res_slope >= -0.002) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| sector above 200d SMA / flat highs (res_slope >= -0.002) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| sector above 200d SMA / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| sector above 200d SMA / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| sector above 200d SMA / rising lows only (sup_slope > 0, any resistance) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| sector above 200d SMA / rising lows only (sup_slope > 0, any resistance) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| SPY + sector both above 200d / flat highs (res_slope >= -0.002) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| SPY + sector both above 200d / flat highs (res_slope >= -0.002) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| SPY + sector both above 200d / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| SPY + sector both above 200d / declining highs + rising lows (res_slope < -0.002, sup_slope > 0) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| SPY + sector both above 200d / rising lows only (sup_slope > 0, any resistance) / vol_ratio <= 0.80 | triangle_breakout | - | - |
| SPY + sector both above 200d / rising lows only (sup_slope > 0, any resistance) / vol_slope_pct <= 0 (declining volume) | triangle_breakout | - | - |
| v3 equivalent (no regime, flat res, vol ratio) | triangle_breakout | - | - |
| breakout_low min_stop 1% / no sector filter | triangle_breakout | - | - |
| breakout_low min_stop 1% / sector RS 3M up | triangle_breakout | - | - |
| breakout_low min_stop 1% / ticker RS vs SPY 3M up | triangle_breakout | - | - |
| breakout_low min_stop 1% / sector + ticker RS up | triangle_breakout | - | - |
| breakout_low min_stop 1.5% / no sector filter | triangle_breakout | - | - |
| breakout_low min_stop 1.5% / sector RS 3M up | triangle_breakout | - | - |
| breakout_low min_stop 1.5% / ticker RS vs SPY 3M up | triangle_breakout | - | - |
| breakout_low min_stop 1.5% / sector + ticker RS up | triangle_breakout | - | - |
| pct stop 1.5% / no sector filter | triangle_breakout | - | - |
| pct stop 1.5% / sector RS 3M up | triangle_breakout | - | - |
| pct stop 1.5% / ticker RS vs SPY 3M up | triangle_breakout | - | - |
| pct stop 1.5% / sector + ticker RS up | triangle_breakout | - | - |
| pct stop 2% / no sector filter | triangle_breakout | - | - |
| pct stop 2% / sector RS 3M up | triangle_breakout | - | - |
| pct stop 2% / ticker RS vs SPY 3M up | triangle_breakout | - | - |
| pct stop 2% / sector + ticker RS up | triangle_breakout | - | - |
| atr stop 1.5x / no sector filter | triangle_breakout | - | - |
| atr stop 1.5x / sector RS 3M up | triangle_breakout | - | - |
| atr stop 1.5x / ticker RS vs SPY 3M up | triangle_breakout | - | - |
| atr stop 1.5x / sector + ticker RS up | triangle_breakout | - | - |
| winning config / no consol filter | triangle_breakout | - | - |
| winning config / consol >= 15 | triangle_breakout | - | - |
| winning config / consol >= 18 | triangle_breakout | - | - |
| winning config / consol >= 21 | triangle_breakout | - | - |
| winning config / consol 15-30 | triangle_breakout | - | - |
| winning config / consol 18-30 | triangle_breakout | - | - |
| winning config / consol 21-30 | triangle_breakout | - | - |
| winning config / consol 21-25 | triangle_breakout | - | - |
| no RS filter / no consol filter | triangle_breakout | - | - |
| no RS filter / consol >= 21 | triangle_breakout | - | - |
| no RS filter / consol 21-30 | triangle_breakout | - | - |
| no candle gate / Q0_loose | triangle_breakout | - | - |
| no candle gate / Q1_std | triangle_breakout | - | - |
| no candle gate / Q2_risk | triangle_breakout | - | - |
| body >= 0.6 / Q0_loose | triangle_breakout | - | - |
| body >= 0.6 / Q1_std | triangle_breakout | - | - |
| body >= 0.6 / Q2_risk | triangle_breakout | - | - |
| body >= 0.7 / Q0_loose | triangle_breakout | - | - |
| body >= 0.7 / Q1_std | triangle_breakout | - | - |
| body >= 0.7 / Q2_risk | triangle_breakout | - | - |
| range <= 1.5 ATR / Q0_loose | triangle_breakout | - | - |
| range <= 1.5 ATR / Q1_std | triangle_breakout | - | - |
| range <= 1.5 ATR / Q2_risk | triangle_breakout | - | - |
| baseline trigger / no apex gate | triangle_breakout | -0.2% | 10,645 |