Backtest UI

Triangle resistance breakout trigger TTBX

T_TRIANGLE_BREAKOUT | ticker recent pattern | trigger | ticker | proposed

LogicT_TRIANGLE_CONSOLIDATION AND close[t] > res_slope*t + res_intercept AND body_strength >= 0.5 AND (high-low) <= 2*atr20
Edge-0.2%
Samples10,645

Definition

Trigger for the triangle consolidation: close breaks above the swing-fitted resistance line with a strong body ((close-open)/(high-low) >= 0.5) and a controlled range (<= 2x ATR20). The EMA21 breach count is exported as tri_ema21_breaches so the sweep can test tolerance (0 = strict no-breach, <=1 = allow one wick, etc.) crossed with tri_sup_slope_pct > 0 (support trend still rising). The initial impulse strength (ROC at CML arming) is exported as tri_cml_arm_roc so thresholds like >= 0.1 can be tested. The stop is the entry-day low (stop_type = breakout_low). Candle anatomy and flag quality metrics are exported as continuous features for entry-quality measurement.

Logic Triples

No first-class ontology mapping yet. Showing fallback logic: T_TRIANGLE_CONSOLIDATION AND close[t] > res_slope*t + res_intercept AND body_strength >= 0.5 AND (high-low) <= 2*atr20

Strategies Using Atom

StrategyFamilyEdgeSignals
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