Backtest UI

Atom Catalog

Short codes, exact/best-effort logic, stage, edge, and usage signals.

CodeAtomGroupRoleLogicEdgeSamples
T20AAscending base geometryT_ASCENDING_BASE_GEOMETRY_20Dascending flagtrigger20D high-line slope <= 15% AND 20D low-line slope > 0% AND 20D low-line slope > 20D high-line slope AND Close position in 20D base >= 0.50 AND 20D base range <= 35% AND Distance from prior 20D high in ATR between -1.0..0.5 ATR AND Close > 50D SMAHigh-line not vertical, low-line rising, low slope above high slope, close in upper half, reasonable range, near 20-day high, and above MA50.-0
T201Ascending base geometry with RSI resetT_ASCENDING_BASE_GEOMETRY_RESET_20Dascending flagtrigger20D ATR extension <= 1.5 AND 20D high-line slope <= 15% AND 20D low-line slope > 0% AND 20D low-line slope > 20D high-line slope AND Close position in 20D base >= 0.50 AND 20D base range <= 35% AND Distance from prior 20D high in ATR between -1.0..0.5 ATR AND Close > 50D SMA AND RSI14 between 50..65Ascending base geometry plus RSI14 reset and no severe ATR extension.-0
T202Ascending flag breakoutT_ASCENDING_FLAG_BREAKOUT_20Dascending flagtriggerRecent 5D low > Prior 15D low AND Close position in 20D base >= 0.50 AND 20D base range <= 35% AND Distance from prior 20D high in ATR between -1.0..0.5 ATR AND Close > 50D SMA AND Close > Prior 20D high AND Volume > Prior 20D avg volume AND 5D return <= 8%Ascending flag structure that breaks the 20-day high with volume confirmation and no 5-day chase.-0
T203Ascending flag with RSI resetT_ASCENDING_FLAG_RESET_20Dascending flagtrigger20D ATR extension <= 1.5 AND Recent 5D low > Prior 15D low AND Close position in 20D base >= 0.50 AND 20D base range <= 35% AND Distance from prior 20D high in ATR between -1.0..0.5 ATR AND Close > 50D SMA AND RSI14 between 50..65Ascending flag structure plus RSI14 reset and no severe ATR extension.-0
T204Ascending flag structureT_ASCENDING_FLAG_STRUCTURE_20Dascending flagtriggerRecent 5D low > Prior 15D low AND Close position in 20D base >= 0.50 AND 20D base range <= 35% AND Distance from prior 20D high in ATR between -1.0..0.5 ATR AND Close > 50D SMAHigher recent low (last 5 sessions above prior 15), close in upper half of 20-day base, base range <= 35%, close within [-1.0, +0.5] ATR of prior 20-day high, and close above 50-day SMA.-0
T20B20-day base convergingT_BASE_CONVERGING_20Dascending flagtrigger20D low-line slope > 20D high-line slopeLow-line slope exceeds high-line slope, approximating a tightening ascending base.-0
T20520-day base highs roughly flatT_BASE_HIGH_DRIFT_20D_FLATascending flagtrigger20D high-line slope between -5%..5%Regression slope of daily highs over the 20-day base is between -5% and +5% over the fitted window.-0
T20620-day base highs not verticalT_BASE_HIGH_DRIFT_20D_NOT_VERTICALascending flagtrigger20D high-line slope <= 15%Regression slope of daily highs over the 20-day base is no more than +15%.-0
T20720-day base highs drifting mildly upwardT_BASE_HIGH_DRIFT_20D_UP_MINORascending flagtrigger20D high-line slope between 0%..10%Regression slope of daily highs over the 20-day base is between 0% and +10%.-0
T20820-day base lows risingT_BASE_LOW_DRIFT_20D_UPascending flagtrigger20D low-line slope > 0%Regression slope of daily lows over the 20-day base is positive.-0
T20920-day base lows rising stronglyT_BASE_LOW_DRIFT_20D_UP_STRONGascending flagtrigger20D low-line slope >= 5%Regression slope of daily lows over the 20-day base is at least +5%.-0
T21020-day base range compactT_BASE_RANGE_COMPACT_20Dascending flagtrigger20D base range <= 20%The 20-day high-low range is no more than 20%.-0
T21120-day base range not excessiveT_BASE_RANGE_NORMAL_20Dascending flagtrigger20D base range <= 35%The 20-day high-low range is no more than 35%.-0
T212Close in upper half of 20-day baseT_BASE_UPPER_HALF_20Dascending flagtriggerClose position in 20D base >= 0.50Current close is in the upper half of the 20-day high-low range.-0
T213Close in upper third of 20-day baseT_BASE_UPPER_THIRD_20Dascending flagtriggerClose position in 20D base >= 0.67Current close is in the upper third of the 20-day high-low range.-0
T51HRecent low above prior 10-day base lowT_HIGHER_LOW_5V10ascending flagtriggermin(low[t-4:t]) > min(low[t-14:t-5])The lowest low in the last 5 sessions is above the lowest low in the prior 10-session window.-0
T511Recent low above prior 15-day base lowT_HIGHER_LOW_5V15ascending flagtriggerRecent 5D low > Prior 15D lowThe lowest low in the last 5 sessions is above the lowest low in the prior 15-session window.-0
T20NNear 20-day high in ATR unitsT_NEAR_20D_HIGH_ATRascending flagtriggerDistance from prior 20D high in ATR between -1.0..0.5 ATRClose is within 1 ATR below the prior 20-day high and has not yet exceeded it by 0.5 ATR.-0
T14RRSI14 reset but still constructiveT_RSI14_RESET_50_65ascending flagtriggerRSI14 between 50..6514-day RSI is between 50 and 65, suggesting a cooled but not broken consolidation.-0
EEPMMaximum executed entry distance from pivotE_ENTRY_PRICE_MAX_FROM_PIVOTentry executiontriggerentry_pivot_distance_pct = entry_price / pivot_price - 1; entry_pivot_distance_atr = (entry_price - pivot_price) / signal_atr20; execute only when distance(mode) <= max_distanceAt next-open execution, skip a trade when the available entry price is too far above the pivot stored by the breakout signal. Report skipped trades and missed winners against the full signal cohort.-0
EBNBBuy now baselineE_BUY_NOW_BASEentry triggertriggerBuy now baseline == trueEnter at candidate date.-0
EGHXGap holdE_GAP_HOLDentry triggertriggerGap hold == trueEnter after a post-gap digestion that does not fail.-0
E10PPullback 10-20%E_PULLBACK_10_20entry triggertriggerPullback 10-20% between 10%..20%Enter only after a 10-20% pullback.-0
E31PPullback 3-10%E_PULLBACK_3_10entry triggertriggerPullback 3-10% between 3%..10%Enter only after a 3-10% pullback.-0
ERBXResistance breakE_RESISTANCE_BREAKentry triggertriggerResistance break == trueEnter on resistance breakout.-0
E14RRSI14 oversoldE_RSI_14_OVERSOLDentry triggertriggerRSI14 oversold < 30Enter when medium RSI is below threshold.-0
E5RXRSI5 oversoldE_RSI_5_OVERSOLDentry triggertriggerRSI5 oversold < thresholdEnter when short RSI is below threshold.-0
ERDBBullish RSI divergenceE_RSI_DIVERGENCE_BULLentry triggertriggerBullish RSI divergence == trueEnter on bullish RSI divergence.-0
ETSXTrendline supportE_TRENDLINE_SUPPORTentry triggertriggerTrendline support == trueEnter near trendline or structural support.-0
EVBXVCP breakoutE_VCP_BREAKOUTentry triggertrigger5D range / 20D avg range <= 0.60 AND Close > Prior 20D high AND Volume > Prior 20D avg volume AND 5D return <= 8%Enter on volatility contraction plus breakout.-0
EVPHVCP pullback holdE_VCP_PULLBACK_HOLDentry triggertriggerVCP pullback hold == trueEnter when contraction/pullback holds support.-0
E10WWait 10DE_WAIT_10Dentry triggertriggerWait 10D == trueWait 10 trading days before entry.-0
E20WWait 20DE_WAIT_20Dentry triggertriggerWait 20D == trueWait 20 trading days before entry.-0
E5WXWait 5DE_WAIT_5Dentry triggertriggerWait 5D == trueWait 5 trading days before entry.-0
EDEBDelayed post-event consolidation breakoutE_DELAYED_EVENT_BREAKOUTepisodic entrytrigger2 <= days_since_event <= max_delay_days AND close[t] > max(high[event_day+1:t-1])After an episodic-volume event, wait for a short consolidation and enter on a close above its prior high.-0
EENOEpisodic event next-open entryE_EVENT_NEXT_OPENepisodic entrytriggersignal on event day t close; execute at open[t+1]Enter at the session following a fully observed daily event. Baseline daily-data execution comparator.-0
EERREvent retest and reclaimE_EVENT_RETEST_RECLAIMepisodic entrytriggerwithin max_wait_days: low[t] <= reference + touch_tolerance_atr * atr20 AND close[t] > reference after stabilize_days; execute at open[t+1]Complex stateful entry: store an event reference, wait for price to retest it without structural failure, require stabilization and a close back above the reference, then enter next session.-0
TASVMinimum absolute daily share volumeT_ABSOLUTE_SHARE_VOLUME_MINepisodic volumesetupvolume[t] >= min_sharesFlags an unusually active session using an absolute share-count floor, including the Stockbee 8.9-million-share threshold.-0
TDVMMinimum event-day dollar volumeT_DOLLAR_VOLUME_MINepisodic volumesetupclose[t] * volume[t] >= min_dollarsTests whether traded value is more portable than a fixed number of shares. Signal is evaluated after the daily close.-0
TECLMinimum event-day close locationT_EVENT_CLOSE_LOCATION_MINepisodic volumesetup(close[t] - low[t]) / (high[t] - low[t]) >= min_locationRequires the event candle to close in the upper portion of its daily range.-0
TEREMinimum event-day range expansionT_EVENT_RANGE_EXPANSION_MINepisodic volumesetuptrue_range[t] / atr(20)[t-1] >= min_atr_multipleRequires the event candle's true range to expand relative to ATR measured before the event.-0
TERMMinimum event-day relative volumeT_EVENT_RVOL_MINepisodic volumesetupvolume[t] / avg(volume[t-average_days:t-1]) >= min_ratioEvent-day volume as a multiple of prior average volume. Normalises participation across differently sized stocks.-0
TFTMMinimum event-day float turnoverT_FLOAT_TURNOVER_MINepisodic volumesetupvolume[t] / pit_free_float[t] >= min_turnoverDaily shares traded as a fraction of point-in-time free float. Missing float remains missing and must not be treated as zero.-0
TPEAMinimum pre-event ADR percentageT_PRE_EVENT_ADR_PCT_MINepisodic volumesetupavg(high[i] / low[i] - 1 for i in t-lookback_days:t-1) >= min_adr_pctRequires sufficient pre-existing volatility, calculated without the event day.-0
TPHVPrior high-volume event countT_PRIOR_HIGH_VOLUME_EVENT_COUNTepisodic volumesetupcount(volume[i] / avg_prior(volume, i, average_days) >= event_rvol_min for i in t-lookback_days:t-1) >= min_countCounts repeated abnormal-volume sessions before the current event as a causal accumulation-footprint proxy.-0
SSECSector EPS cap-weighted growth (correlation-mapped)S_SEC_EPS_CORR_CAPWTD_GROWTHfundamental quality/valuefilterSector EPS cap-weighted growth (correlation-mapped) == trueFirst derivative (level) of cap-weighted sector EPS growth, mapped via 126d rolling correlation.-0
SSE1Sector EPS median acceleration (correlation-mapped)S_SEC_EPS_CORR_MEDIAN_ACCELfundamental quality/valuefilterSector EPS median acceleration (correlation-mapped) == trueSecond derivative of sector median EPS growth, mapped via 126d rolling correlation to sector ETFs.-0
SSEGSector EPS cap-weighted acceleration (GICS)S_SEC_EPS_GICS_CAPWTD_ACCELfundamental quality/valuefilterSector EPS cap-weighted acceleration (GICS) == trueSecond derivative of cap-weighted sector EPS growth, GICS-mapped. Negative = sector earnings decelerating.-0
SSE2Sector EPS cap-weighted growth (GICS)S_SEC_EPS_GICS_CAPWTD_GROWTHfundamental quality/valuefilterSector EPS cap-weighted growth (GICS) == trueFirst derivative (level) of cap-weighted sector EPS growth, GICS-mapped.-0
SSE3Sector EPS median acceleration (GICS)S_SEC_EPS_GICS_MEDIAN_ACCELfundamental quality/valuefilterSector EPS median acceleration (GICS) == trueSecond derivative of sector median EPS growth, GICS-mapped. Negative = sector earnings decelerating.-0
FMECMaterial event catalystF_MATERIAL_EVENT_CATALYSTfundamental quality/valuesetuplatest_catalyst.known_at <= signal_time AND latest_catalyst.category IN allowed_categoriesRequires a point-in-time news catalyst classified into an explicitly allowed material category. Classification must be reproducible and known by the signal timestamp.-0
M3HXMarket HMM high-vol chaosM_HMM3_HIGH_VOL_CHAOSmarket regimeblockerMarket HMM high-vol chaos == high-volatility chaoticPoint-in-time 3-state HMM assigns SPY to a high-volatility chaotic state.-0
M5HXMarket HMM bear driftM_HMM5_BEAR_DRIFTmarket regimeblockerMarket HMM bear drift == negative low-volatility driftPoint-in-time 5-state HMM assigns SPY to a negative low-volatility drift state.-0
M5H1Market HMM bear trendM_HMM5_BEAR_TRENDmarket regimeblockerMarket HMM bear trend == directional trendPoint-in-time 5-state HMM assigns SPY to a negative directional trend state.-0
M5H2Market HMM chaosM_HMM5_CHAOSmarket regimeblockerMarket HMM chaos == high-volatility chaoticPoint-in-time 5-state HMM assigns SPY to a high-volatility chaotic state.-0
MLRXMarket LPPL riskM_LPPL_RISKmarket regimeblockerMarket LPPL risk == trueSPY or QQQ LPPL bubble/crash risk is elevated.-0
MSEXSPY extendedM_SPY_EXTENDEDmarket regimeblockerSPY extended >= 90SPY 5-day RSI is >= 90.-0
MECXMarket EMA constructiveM_EMA_CONSTRUCTIVEmarket regimecontextMarket EMA constructive == trueMarket EMAs are Constructively aligned — not necessarily a full stack but trending constructively.-0
M82EMarket EMA stack 8/21/50M_EMA_STACK_8_21_50market regimecontextSPY[t] > ema(SPY, 8)[t] > ema(SPY, 21)[t] > ema(SPY, 50)[t]SPY above EMA8 > EMA21 > EMA50. Market in bullish short-term trend.-0
MEVBEpisodic-volume trigger breadthM_EPISODIC_VOLUME_BREADTHmarket regimecontextqualified_event_count(lookback_days) / eligible_universe_count(lookback_days)Measures the point-in-time frequency of qualified episodic-volume events as a speculative-participation breadth indicator.-0
M3H1Market HMM directional trendM_HMM3_DIRECTIONAL_TRENDmarket regimecontextMarket HMM directional trend == directional trendPoint-in-time 3-state HMM assigns SPY to a directional trend state.-0
M3H2Market HMM low-vol driftM_HMM3_LOW_VOL_DRIFTmarket regimecontextMarket HMM low-vol drift == low-volatility drift/rangePoint-in-time 3-state HMM assigns SPY to a low-volatility drift/range state.-0
M5H3Market HMM bull driftM_HMM5_BULL_DRIFTmarket regimecontextMarket HMM bull drift == positive low-volatility driftPoint-in-time 5-state HMM assigns SPY to a positive low-volatility drift state.-0
M5H4Market HMM bull trendM_HMM5_BULL_TRENDmarket regimecontextMarket HMM bull trend == directional trendPoint-in-time 5-state HMM assigns SPY to a positive directional trend state.-0
MHLTMarket long Hurst trendM_HURST_LONG_TRENDmarket regimecontextMarket long Hurst trend >= trend thresholdSPY long-window Hurst is above trend threshold.-0
MHSMMarket short Hurst mean reversionM_HURST_SHORT_MRmarket regimecontextMarket short Hurst mean reversion <= mean-reversion thresholdSPY short-window Hurst is below mean-reversion threshold.-0
MLBFLeader breakout failure breadthM_LEADER_BREAKOUT_FAILURE_BREADTHmarket regimecontextfailed_breakouts(cohort, lookback_days) >= min_count OR failure_share(cohort, lookback_days) >= min_shareMarket warning when too many recent leader or candidate breakouts have re-entered their bases. Cohort membership and all counts must be point-in-time.-0
MRBXBear regimeM_REGIME_BEARmarket regimecontextBear regime == trueExisting market regime model labels the environment as bear or high bear probability.-0
MRB1Bull regimeM_REGIME_BULLmarket regimecontextBull regime == trueExisting market regime model labels the environment as bull or high bull probability.-0
MRTXTransition regimeM_REGIME_TRANSITIONmarket regimecontextTransition regime == transitionExisting market regime model labels the environment as transition/chop.-0
MSPXSPY controlled pullbackM_SPY_PULLBACKmarket regimecontextSPY controlled pullback == trueSPY is in a controlled pullback rather than structural damage.-0
M20SSPY 200D trendM_SPY_TREND_200Dmarket regimecontextSPY[t] > sma(SPY, 200)[t] and slope(sma(SPY, 200), 20)[t] > 0SPY is above a rising 200-day moving average.-0
M50SSPY 50D trendM_SPY_TREND_50Dmarket regimecontextSPY[t] > sma(SPY, 50)[t] and slope(sma(SPY, 50), 20)[t] > 0SPY is above a rising 50-day moving average.-0
E141RSI(14) mean reversion longE_RSI14_MR_LONGmean reversiontriggerrsi(close, 14)[t] < 30RSI(14) drops below 30 (oversold). Mean reversion entry.-0
CMRXCash on market riskCASH_MARKET_RISKportfolio managementblockerCash on market risk == trueHold cash when market risk budget is too low.-0
COXXCash when overextendedCASH_OVEREXTENDEDportfolio managementblockerCash when overextended == trueHold cash when extension risk is too high.-0
CSRXCash on sector riskCASH_SECTOR_RISKportfolio managementblockerCash on sector risk == trueHold cash when sector risk is too high.-0
ZRPXRisk-based sizing (0.5%)Z_RISK_PCTportfolio managementblockerZ_RISK_PCTRisk-based position sizing: position_size = equity * value / stop_distance, where stop_distance = ATR * stop_multiplier. Value is the risk budget as a fraction of equity (0.005 = 0.5%).-0
CNXXNo cash waitCASH_NONEportfolio managementcashNo cash wait == trueAlways invested once entered.-0
CNSXCash when no sponsorshipCASH_NO_SPONSORSHIPportfolio managementcashCash when no sponsorship == trueHold cash if sector or ticker sponsorship is absent.-0
CWTXWait for trigger in cashCASH_WAIT_TRIGGERportfolio managementcashWait for trigger in cash == trueHold cash until entry trigger occurs.-0
ZMCPMax cost basis pctZ_MAX_COST_PCTportfolio managementportfolioZ_MAX_COST_PCTPer-ticker concentration cap (cost basis): total original investment across all lots of a single ticker must not exceed this fraction of equity. Unlike Z_MAX_POSITION_PCT which uses market value, this caps committed capital regardless of price movement. Value = max fraction (0.20 = 20%).-15.7%13,223
ZMHXMax distinct holdings (10)Z_MAX_HOLDINGSportfolio managementportfolioZ_MAX_HOLDINGSBreadth cap: limits the number of distinct tickers in the portfolio. Pyramiding into an existing position bypasses this check; Z_MAX_POSITION_PCT and Z_MAX_COST_PCT gate the new lot. Value = max distinct tickers.-15.7%13,223
ZMPPMax position pct (15%)Z_MAX_POSITION_PCTportfolio managementportfolioZ_MAX_POSITION_PCTPer-ticker concentration cap (market value): total market value across all lots of a single ticker must not exceed this fraction of equity. Market value = cost basis adjusted for price appreciation. Value = max fraction (0.15 = 15%).-0
ZMCRMin cash reserve (5%)Z_MIN_CASH_RESERVEportfolio managementportfolioZ_MIN_CASH_RESERVEKeep a minimum fraction of equity in cash at all times. Entries are skipped if they would breach this reserve. Value = reserve fraction (0.05 = 5%).-0
ZRBXRank by breakout strengthZ_RANK_BREAKOUTportfolio managementportfolioZ_RANK_BREAKOUTEntry ranking toggle: candidates are scored using breakout_20d_atr feature.-15.7%13,223
ZRMXRank by momentum (10d)Z_RANK_MOMENTUMportfolio managementportfolioZ_RANK_MOMENTUMEntry ranking toggle: candidates are scored using ret_10d feature.-0
ZRRSRank by sector RS (3M)Z_RANK_RS_SECTORportfolio managementportfolioZ_RANK_RS_SECTOREntry ranking toggle: candidates are scored using sector_spy_rs_3m feature. Score = unweighted average of normalized features across all active ranking toggles. Binary toggle (presence = on).-0
ZRRTRank by ticker RS (3M)Z_RANK_RS_TICKERportfolio managementportfolioZ_RANK_RS_TICKEREntry ranking toggle: candidates are scored using ticker_sector_rs_3m feature.-0
ZRVXRank by volume ratioZ_RANK_VOLUMEportfolio managementportfolioZ_RANK_VOLUMEEntry ranking toggle: candidates are scored using volume_ratio_20 feature.-0
ZRRERS-driven rebalance evaluationZ_REBAL_RS_EVALportfolio managementportfolioZ_REBAL_RS_EVALRebalance-as-exit: at every interval_days trading days, rank all open lots by ticker RS vs SPY (63-day). Take bottom N lots (excluding those held < min_hold_days). For each bottom-N lot: if RS < rs_threshold, EXIT full remaining position; else TRIM trim_pct of remaining. This replaces time-based exits and daily RS checking. Params: interval_days (default 63), bottom_n (default 1), rs_threshold (default 0.0 = below SPY), trim_pct (default 0.50), min_hold_days (default 10).-15.7%13,223
ZSTCScale to available cashZ_SCALE_TO_CASHportfolio managementportfolioZ_SCALE_TO_CASHWhen position size exceeds available cash, scale down to the cash available rather than skipping the entry entirely. Presence-only (no value field).-15.7%13,223
Z1TXT+1 entry executionZ_T_PLUS_1portfolio managementportfolioZ_T_PLUS_1Entry signals generated on day D are executed at day D+1's open price. Prevents lookahead bias by avoiding same-day signal+execution. Presence-only.-15.7%13,223
ZWSXWeekly signal evaluationZ_WEEKLY_SIGNALSportfolio managementportfolioZ_WEEKLY_SIGNALSEvaluate entry, add, trim, and close-based exit rules only on the final observed trading session of each ISO week, then execute queued orders at the next available session open. Presence-only.-15.7%13,223
Z1FXFixed 1xZ_FIXED_1Xportfolio managementsizingFixed 1x == trueFixed full test size.-0
ZMTXMarket throttleZ_MARKET_THROTTLEportfolio managementsizingMarket throttle == trueRisk-based market throttle with unchanged entry-count limits. feature=risk_throttle uses base risk when SPY BX and FVB basis are healthy, mixed_risk_pct when exactly one is healthy, and weak_risk_pct when neither is healthy. feature=risk_throttle_bx preserves all BX-approved entries at base risk, uses mixed_risk_pct only when BX is dark but SPY remains above its FVB basis, and weak_risk_pct when both fail.-15.7%13,223
ZSEXExponential score sizeZ_SCORE_EXPportfolio managementsizingExponential score size == trueAggressive exponential score-based sizing.-0
ZSLXLinear score sizeZ_SCORE_LINEARportfolio managementsizingLinear score size == trueSize proportional to selection or entry score.-0
ZSTXSector throttleZ_SECTOR_THROTTLEportfolio managementsizingSector throttle == trueSize multiplied by sector sponsorship or sector risk.-0
Z02S25% starterZ_STARTER_025portfolio managementsizing25% starter == trueQuarter-size starter position.-0
Z05S50% starterZ_STARTER_050portfolio managementsizing50% starter == trueHalf-size starter position.-0
ZVTXVol target sizeZ_VOL_TARGETportfolio managementsizingVol target size == trueSize inversely to realized volatility.-0
EBEXBullish engulfing candlestickE_BULLISH_ENGULFINGprice actiontriggerclose[t] > open[t] AND open[t] < close[t-1] AND close[t] > open[t-1] AND close[t-1] < open[t-1]Bullish engulfing pattern: current candle completely engulfs prior candle's body.-0
TSCXStacked support confluenceT_SUPPORT_CONFLUENCEpullback supportsetuplevels = {ema21[t], ma50[t], prior_pivot, trendline[t], base_low_20d}; count(level within band_pct of close[t]) >= min_levelsAt least min_levels of {EMA21, MA50, prior breakout pivot, trendline, base low} sit within a tight band around the current price. Encodes the framework's requirement that entries happen where multiple support levels stack up: the more levels that share the invalidation zone, the more meaningful the level and the tighter the defensible stop.-0
TPRSPrior resistance holds as supportT_PRIOR_RESISTANCE_SUPPORT_HOLDpullback supporttriggerpivot = prior_breakout_pivot_high[t-min_pivot_age:t-1]; low[t] <= pivot * (1 + touch_buffer) AND close[t] > pivotPrice pulls back into a prior breakout pivot/resistance level from earlier in the current uptrend and closes back above it. The pivot must be at least min_pivot_age days old so it represents a completed structural breakout, not noise. This is dip type 2 of the asymmetric R:R framework: previous resistance acting as new support.-0
TSRXShakeout reversal at supportT_SHAKEOUT_REVERSALpullback supporttriggersupport = nearest_structural_level[t]; avg(vol[t-pullback_days:t-1]) <= dryup_ratio * avg(vol[t-20:t-1]); low[t] < support AND close[t] > support AND close_position_in_range[t] >= min_close_pos (reclaim within max_reclaim_days)Intraday low briefly breaks the nearby support level (MA, prior pivot, or base low) on dried-up volume, then the close reclaims the level the same day or the next, finishing in the upper half of the day's range. This is dip type 4 of the asymmetric R:R framework: a brief shakeout attracts late shorts and panicked sellers, followed by an immediate reversal. Distinct from the U&R atoms: U&R requires a multi-day break-and-reclaim of a specific MA/base level and rests on a trapped-participant thesis; the shakeout is a fast flush-and-recover defined by location and volume behavior (dry-up on the pull, demand on the reversal). The U&R atoms are the closest existing daily-bar approximation.-0
TTSHRising trendline support holdsT_TRENDLINE_SUPPORT_HOLDpullback supporttriggerline = least_squares_fit(swing_lows[t-fit_window:t]); slope(line) > 0 AND low[t] <= line[t] * (1 + touch_buffer) AND close[t] > line[t]Price touches a least-squares support line fitted through the swing lows of the trailing window and closes back above it, with the line slope positive. This is dip type 3 of the asymmetric R:R framework. Trendline fitting is parameter-fragile: window choice and swing-low detection materially change the line. Treat as a robustness test, not a conviction candidate.-0
TVDXVWAP support holdT_VWAP_DIPpullback supporttriggervwap = sum(typical_price * volume) / sum(volume) over window; |low - vwap|/vwap <= touch_pct AND close > vwap AND close_pos_in_range >= min_close_posThe bar's low touches the rolling VWAP (within the configured tolerance) and the close reclaims above it, finishing in the upper half of the day's range. VWAP is a volume-confirmed support level distinct from the MA/pivot/trendline atoms: it weights price by where actual volume traded. The level is exported across a rolling-window grid (vwap_w10/w20/w50) so the window dimension is sweepable; the touch tolerance and close-position thresholds are swept via the exported vwap_touch_dist_pct and close_pos_in_range numerics.-0
TSSDStructural stop distance within bandT_STRUCT_STOP_DISTANCE_MAXrisk structuretriggerinvalidation = max(undercut_day_low, support_band_low, base_low_20d); stop_distance_pct = 1 - invalidation / close[t]; min_distance <= stop_distance_pct <= max_distanceDistance from entry price to the nearest structural invalidation level (undercut-day low, support-band low, or base low) is within the configured band, default 1-4%. This is the core gate of the asymmetric R:R framework: if the risk/stop size is large, there is no trade. It conditions the entry on the payoff structure rather than placing a stop after deciding to enter, and is the direct test of whether tight stops work when the entry location provides the nearby invalidation.-0
SSSASector season ageS_SECTOR_SEASON_AGEseasonalitycontextSector season age == trueDuration of sector relative outperformance or underperformance season.-0
SSSPSector positive seasonalityS_SECTOR_SEASON_POSseasonalitycontextSector positive seasonality == trueSector historically outperforms in current month, quarter, or half year.-0
SSAPSector season age percentile localsector_season_age_pctile_localsector seasonfeatureSector season age percentile local == truePercentile of current hot/cold sector season age versus the same ETF's prior seasons.-0
SSRPSector season return percentile localsector_season_return_pctile_localsector seasonfeatureSector season return percentile local == truePercentile of current hot/cold sector season cumulative return versus the same ETF's prior seasons.-0
RDAXDefensive accelerationR_DEFENSIVE_ACCELsector strength/weaknessblockerDefensive acceleration > 0%Defensive relative strength acceleration versus SPY or risk-on proxies.-0
SHMRMean-reverting sector extensionS_HURST_MEAN_REVERTING_EXTENDEDsector strength/weaknessblockerMean-reverting sector extension == trueSector has durable mean-reversion behavior and is stretched positively versus SPY.-0
SHPUPersistent sector underperformanceS_HURST_PERSISTENT_UNDERPERFORMANCEsector strength/weaknessblockerPersistent sector underperformance == trueSector/SPY relative strength is persistent but negative across long windows.-0
S3RXSector RS HMM chaosS_RS_HMM3_CHAOSsector strength/weaknessblockerSector RS HMM chaos == high-volatility chaoticPoint-in-time 3-state HMM assigns the sector/style ETF versus SPY relative-strength line to a high-volatility chaotic relative state.-0
S3R1Sector RS HMM coldS_RS_HMM3_COLDsector strength/weaknessblockerSector RS HMM cold == configured_statePoint-in-time 3-state HMM assigns the sector/style ETF versus SPY relative-strength line to a negative relative-drift state.-0
S5RXSector RS HMM chaosS_RS_HMM5_CHAOSsector strength/weaknessblockerSector RS HMM chaos == high-volatility chaoticPoint-in-time 5-state HMM assigns the sector/style ETF versus SPY relative-strength line to a high-volatility chaotic relative state.-0
S5R1Sector RS HMM cold driftS_RS_HMM5_COLD_DRIFTsector strength/weaknessblockerSector RS HMM cold drift == negative low-volatility driftPoint-in-time 5-state HMM assigns the sector/style ETF versus SPY relative-strength line to a negative low-volatility drift state.-0
S5R2Sector RS HMM cold trendS_RS_HMM5_COLD_TRENDsector strength/weaknessblockerSector RS HMM cold trend == persistent negativePoint-in-time 5-state HMM assigns the sector/style ETF versus SPY relative-strength line to a persistent negative relative trend state.-0
SRSEEarly sector RS cold seasonS_RS_SEASON_EARLY_COLDsector strength/weaknessblockerEarly sector RS cold season == trueSector relative underperformance is young and deteriorating.-0
SRSMMature sector RS hot seasonS_RS_SEASON_MATURE_HOTsector strength/weaknessblockerMature sector RS hot season == trueSector relative leadership is mature by age, relative return, or both.-0
SRSSSector RS season switch riskS_RS_SEASON_SWITCH_RISKsector strength/weaknessblockerSector RS season switch risk == trueEmpirical probability of the current sector relative regime ending soon is elevated.-0
S50RGlobal SMA50/200 cold exhaustionS_RS_SMA50_200_COLD_EXHAUSTED_GLOBALsector strength/weaknessblockerGlobal SMA50/200 cold exhaustion == trueParent ETF cold season is mature versus a configured cross-ETF sector/style universe.-0
S501Local SMA50/200 cold exhaustionS_RS_SMA50_200_COLD_EXHAUSTED_LOCALsector strength/weaknessblockerLocal SMA50/200 cold exhaustion == trueParent ETF cold season is mature versus that ETF's own prior cold seasons by age, relative return, or both.-0
S502Global SMA50/200 hot exhaustionS_RS_SMA50_200_HOT_EXHAUSTED_GLOBALsector strength/weaknessblockerGlobal SMA50/200 hot exhaustion == trueParent ETF hot season is mature versus a configured cross-ETF sector/style universe.-0
S503Local SMA50/200 hot exhaustionS_RS_SMA50_200_HOT_EXHAUSTED_LOCALsector strength/weaknessblockerLocal SMA50/200 hot exhaustion == trueParent ETF hot season is mature versus that ETF's own prior hot seasons by age, relative return, or both.-0
SSDBDefensive sector breakoutS_SECTOR_DEF_BREAKOUTsector strength/weaknessblockerDefensive sector breakout == trueDefensive sector ETF is breaking out or basing constructively.-0
S1SXDefensive 1M leadershipS_SECTOR_DEF_LEAD_1Msector strength/weaknessblockerDefensive 1M leadership == trueDefensive sectors are leading SPY over 1 month.-0
S3SXDefensive 3M leadershipS_SECTOR_DEF_LEAD_3Msector strength/weaknessblockerDefensive 3M leadership == trueDefensive sectors are leading SPY over 3 months.-0
RSSASector/SPY RS accelerationR_SECTOR_SPY_ACCELsector strength/weaknesscontextSector/SPY RS acceleration > 0%Sector 1M relative strength is improving versus 3M relative trend.-0
R1TXTicker/sector 1M RSR_TICKER_SECTOR_1M_UPsector strength/weaknesscontextTicker/sector 1M RS > 0%Ticker versus sector relative strength is rising over 1 month.-0
R3TXTicker/sector 3M RSR_TICKER_SECTOR_3M_UPsector strength/weaknesscontextTicker/sector 3M RS > 0%Ticker versus sector relative strength is rising over 3 months.-0
RTSATicker/sector RS accelerationR_TICKER_SECTOR_ACCELsector strength/weaknesscontextTicker/sector RS acceleration == trueTicker 1M sector-relative strength is improving versus 3M relative trend.-0
R1T1Ticker/SPY 1M RSR_TICKER_SPY_1M_UPsector strength/weaknesscontextTicker/SPY 1M RS > 0%Ticker versus SPY relative strength is rising over 1 month.-0
R3T1Ticker/SPY 3M RSR_TICKER_SPY_3M_UPsector strength/weaknesscontextTicker/SPY 3M RS > 0%Ticker versus SPY relative strength is rising over 3 months.-0
SHDNDurable sector Hurst noiseS_HURST_DURABLE_NOISEsector strength/weaknesscontextDurable sector Hurst noise == trueSector Hurst remains neutral across long windows, so Hurst should be de-emphasized.-0
SHFTSector Hurst flip to mean reversionS_HURST_FLIP_TO_MRsector strength/weaknesscontextSector Hurst flip to mean reversion == trueSector Hurst has fallen from trend into mean-reversion/noise range.-0
SHF1Sector Hurst flip to trendS_HURST_FLIP_TO_TRENDsector strength/weaknesscontextSector Hurst flip to trend == trueSector Hurst has risen from mean-reversion/noise into trend range.-0
SHLTSector long Hurst trendS_HURST_LONG_TRENDsector strength/weaknesscontextSector long Hurst trend >= trend thresholdSector long-window Hurst is above trend threshold.-0
SHMDSector Hurst mean-reversion durabilityS_HURST_MEANREV_DURABILITYsector strength/weaknesscontextSector Hurst mean-reversion durability == trueCount or share of long sector Hurst windows at or below the mean-reversion threshold.-0
SHM1Mean-reverting sector depressionS_HURST_MEAN_REVERTING_DEPRESSEDsector strength/weaknesscontextMean-reverting sector depression == trueSector has durable mean-reversion behavior and is stretched negatively versus SPY.-0
SHMTSector medium Hurst trendS_HURST_MED_TRENDsector strength/weaknesscontextSector medium Hurst trend >= trend thresholdSector medium-window Hurst is above trend threshold.-0
SHNXSector Hurst noiseS_HURST_NOISEsector strength/weaknesscontextSector Hurst noise == trueSector Hurst is near 0.5 and should not strongly route strategy.-0
SHNDSector Hurst noise durabilityS_HURST_NOISE_DURABILITYsector strength/weaknesscontextSector Hurst noise durability == trueCount or share of long sector Hurst windows inside the neutral noise band.-0
SHPLPersistent sector leadershipS_HURST_PERSISTENT_LEADERSHIPsector strength/weaknesscontextPersistent sector leadership == trueSector/SPY relative strength is both persistent and positive across long windows.-0
S12HSector price Hurst 120DS_HURST_PRICE_120Dsector strength/weaknesscontextSector price Hurst 120D == trueLonger-window Hurst exponent on sector ETF price.-0
S20HSector price Hurst 20DS_HURST_PRICE_20Dsector strength/weaknesscontextSector price Hurst 20D == trueShort-window Hurst exponent on sector ETF price.-0
S25HSector price Hurst 250DS_HURST_PRICE_250Dsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Long-window Hurst exponent on sector ETF price.-0
S50HSector price Hurst 500DS_HURST_PRICE_500Dsector strength/weaknesscontextSector price Hurst 500D == trueMulti-year Hurst exponent on sector ETF price.-0
S60HSector price Hurst 60DS_HURST_PRICE_60Dsector strength/weaknesscontextSector price Hurst 60D == trueMedium-window Hurst exponent on sector ETF price.-0
S75HSector price Hurst 750DS_HURST_PRICE_750Dsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Long multi-year Hurst exponent on sector ETF price.-0
S121Sector/SPY RS Hurst 120DS_HURST_RS_SPY_120Dsector strength/weaknesscontextSector/SPY RS Hurst 120D == trueLonger-window Hurst exponent on sector versus SPY relative strength line.-0
S251Sector/SPY RS Hurst 250DS_HURST_RS_SPY_250Dsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Long-window Hurst exponent on sector versus SPY relative strength line.-0
S252Sector/SPY RS Hurst 250D mean-reversion stateS_HURST_RS_SPY_250_MEANREVsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Sector versus SPY relative-strength 250-day Hurst exponent is <= 0.40.-0
S253Sector/SPY RS Hurst 250D trend stateS_HURST_RS_SPY_250_TRENDsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Sector versus SPY relative-strength 250-day Hurst exponent is >= 0.60.-0
S504Sector/SPY RS Hurst 500DS_HURST_RS_SPY_500Dsector strength/weaknesscontextSector/SPY RS Hurst 500D == trueMulti-year Hurst exponent on sector versus SPY relative strength line.-0
S601Sector/SPY RS Hurst 60DS_HURST_RS_SPY_60Dsector strength/weaknesscontextSector/SPY RS Hurst 60D == trueMedium-window Hurst exponent on sector versus SPY relative strength line.-0
S751Sector/SPY RS Hurst 750DS_HURST_RS_SPY_750Dsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Long multi-year Hurst exponent on sector versus SPY relative strength line.-0
SHSMSector short Hurst mean reversionS_HURST_SHORT_MRsector strength/weaknesscontextSector short Hurst mean reversion <= mean-reversion thresholdSector short/medium Hurst is below mean-reversion threshold.-0
SHTDSector Hurst trend durabilityS_HURST_TREND_DURABILITYsector strength/weaknesscontextSector Hurst trend durability == trueCount or share of long sector Hurst windows at or above the trend threshold.-0
S3R2Sector RS HMM hotS_RS_HMM3_HOTsector strength/weaknesscontextSector RS HMM hot == configured_statePoint-in-time 3-state HMM assigns the sector/style ETF versus SPY relative-strength line to a positive relative-drift state.-0
S5R3Sector RS HMM hot driftS_RS_HMM5_HOT_DRIFTsector strength/weaknesscontextSector RS HMM hot drift == positive low-volatility driftPoint-in-time 5-state HMM assigns the sector/style ETF versus SPY relative-strength line to a positive low-volatility drift state.-0
S5R4Sector RS HMM hot trendS_RS_HMM5_HOT_TRENDsector strength/weaknesscontextSector RS HMM hot trend == configured_statePoint-in-time 5-state HMM assigns the sector/style ETF versus SPY relative-strength line to a positive directional leadership state.-0
SRSASector RS season age percentileS_RS_SEASON_AGE_PCTILEsector strength/weaknesscontextSector RS season age percentile == trueCurrent hot/cold relative regime duration percentile versus prior same-state sector regimes.-0
SRSCSector RS cold seasonS_RS_SEASON_COLDsector strength/weaknesscontextSector RS cold season == trueSector versus SPY relative-strength regime is negative.-0
SRS1Early sector RS hot seasonS_RS_SEASON_EARLY_HOTsector strength/weaknesscontextEarly sector RS hot season == trueSector relative leadership is young and improving.-0
SRSHSector RS hot seasonS_RS_SEASON_HOTsector strength/weaknesscontextSector RS hot season == trueSector versus SPY relative-strength regime is positive.-0
SRS2Mature sector RS cold seasonS_RS_SEASON_MATURE_COLDsector strength/weaknesscontextMature sector RS cold season == trueSector relative underperformance is mature by age, relative return, or both.-0
SRSRSector RS season return percentileS_RS_SEASON_RETURN_PCTILEsector strength/weaknesscontextSector RS season return percentile == trueCurrent hot/cold relative regime return percentile versus prior same-state sector regimes.-0
S505SMA50/200 sector RS cold seasonS_RS_SMA50_200_COLDsector strength/weaknesscontextSMA50/200 sector RS cold season < 0Parent ETF versus SPY relative SMA50 is below relative SMA200.-0
S506SMA50/200 sector RS hot seasonS_RS_SMA50_200_HOTsector strength/weaknesscontextSMA50/200 sector RS hot season > 0Parent ETF versus SPY relative SMA50 is above relative SMA200.-0
S3S1Sector RS 3-month upS_SECTOR_RS_3M_UPsector strength/weaknesscontextSector RS 3-month up > 0%Sector is outperforming SPY over the trailing 3 months. Confirms sector leadership.-9.5%54,543
SSRASector relative accelerationS_SECTOR_RS_ACCELsector strength/weaknesscontextSector relative acceleration > 0%Sector 1M relative strength is improving versus its 3M relative trend.-0
S1S1Sector 1M relative strengthS_SECTOR_SPY_RS_1M_UPsector strength/weaknesscontextSector 1M relative strength > 0%Sector versus SPY relative strength is rising over 1 month.-0
S3S2Sector 3M relative strengthS_SECTOR_SPY_RS_3M_UPsector strength/weaknesscontextSector 3M relative strength > 0%Sector versus SPY relative strength is rising over 3 months.-0
S20SSector 200D trendS_SECTOR_TREND_200Dsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 200)[t] and slope(sma(sector_etf, 200), 20)[t] > 0Parent sector ETF is above a rising 200-day moving average.-0
S50SSector 50D trendS_SECTOR_TREND_50Dsector strength/weaknesscontextsector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Parent sector ETF is above a rising 50-day moving average.-0
T1TXTicker vs sector RS 1M upT_TICKER_SECTOR_RS_1M_UPsector strength/weaknesscontext1M return > Sector ETF 1M returnTicker is outperforming its sector ETF over 1 month. Leading within its sector.-0
H12SSector/SPY RS Hurst 120Dhurst_sector_rs_spy_120sector strength/weaknessfeatureSector/SPY RS Hurst 120D == observedRaw 120-day Hurst exponent on sector versus SPY relative strength line.-0
H25SSector/SPY RS Hurst 250Dhurst_sector_rs_spy_250sector strength/weaknessfeaturesector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Raw 250-day Hurst exponent on sector versus SPY relative strength line.-0
H60SSector/SPY RS Hurst 60Dhurst_sector_rs_spy_60sector strength/weaknessfeatureSector/SPY RS Hurst 60D == observedRaw 60-day Hurst exponent on sector versus SPY relative strength line.-0
SGRPMinimum sector or industry relative-strength percentileS_GROUP_RS_PERCENTILE_MINsector strength/weaknesstriggercross_sectional_percentile(return(group, lookback_days), group_universe, t) >= min_percentileMapped sector or industry group ranks above a cross-sectional return percentile. Entry criterion, not a merit-model feature.-0
SRS3Sector RS season reversal candidateS_RS_SEASON_REVERSAL_CANDIDATEsector strength/weaknesstriggerSector RS season reversal candidate == trueMature cold sector relative regime is starting to improve and may support reversal/base entries.-0
S507SMA50/200 cold rebound signalS_RS_SMA50_200_COLD_REBOUND_SIGNALsector strength/weaknesstriggerSMA50/200 cold rebound signal == trueCold exhaustion combined with confirming ticker or sector reclaim/relative-strength turn for rebound entry tests.-0
S508SMA50/200 hot fade signalS_RS_SMA50_200_HOT_FADE_SIGNALsector strength/weaknesstrimSMA50/200 hot fade signal == trueHot exhaustion combined with confirming ticker or sector weakness for avoid/add-block/trim strategy tests.-0
L2AX2 ATR stopL_ATR_2stop lossstop2 ATR stop >= 2 ATRStop two ATRs below entry or reference price.-0
L3AX3 ATR stopL_ATR_3stop lossstop3 ATR stop >= 3 ATRStop three ATRs below entry or reference price.-0
LEDLEvent-day low initial stopL_EVENT_DAY_LOWstop lossstopstop_price = event_low - buffer_atr * atr20; require (entry_price - stop_price) / entry_price <= max_stop_pctSet the initial stop below the episodic event day's low; skip entries whose initial risk exceeds the configured maximum.-0
L15FFixed 15% stopL_FIXED_15stop lossstopFixed 15% stop <= -15%Fixed 15% stop-loss.-0
L8FXFixed 8% stopL_FIXED_8stop lossstopFixed 8% stop <= -8%Fixed 8% stop-loss.-0
LFPXParameterised fixed percentage stopL_FIXED_PCTstop lossstopstop_price = entry_price * (1 - loss_pct)Fixed loss limit below entry, including the 7% maximum associated with the source hypothesis.-0
L20MMA200 close stopL_MA200_CLOSEstop lossstopclose[t] > sma(close, 200)[t] and slope(sma(close, 200), 20)[t] > 0Stop on close below 200-day moving average.-0
L50MMA50 close stopL_MA50_CLOSEstop lossstopclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Stop on close below 50-day moving average.-0
LNXXNo stopL_NONEstop lossstopNo stop == trueNo stop; fixed-horizon or exit-rule hold.-0
LTSXTime stopL_TIME_STOPstop lossstopTime stop == trueExit if no progress after a fixed number of days.-0
QBADDelayed breakeven stop resetQ_BREAKEVEN_AFTER_DAYSstop resetstop_resetif days_since_entry >= delay_days then stop_price = max(stop_price, entry_price)Move the stop to entry only after a configurable delay, allowing comparison with an unchanged initial stop.-0
QNRXNo stop resetQ_NO_RESETstop resetstop_resetNo stop reset == trueOriginal stop remains unchanged.-0
QRBXReset breakevenQ_RESET_BREAKEVENstop resetstop_resetReset breakeven == trueMove stop to breakeven after gain threshold.-0
Q50RReset MA50Q_RESET_MA50stop resetstop_resetclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Trail stop using 50-day moving average after trend confirms.-0
QRSLReset swing lowQ_RESET_SWING_LOWstop resetstop_resetReset swing low == trueTrail stop to new swing low after add or confirmation.-0
MBGXBX Trender green (net buying pressure)M_BX_GREENtht bx trendercontextbx[t] > 0BX > 0. Institutional buying pressure is active. This is the dark green + light green states. A stricter entry gate than M_BX_NOT_DARK_RED — requires confirmed positive pressure, not just improving.-0
MBIXBX Trender improving (light red increasing)M_BX_IMPROVINGtht bx trendercontextbx[t] < 0 AND slope(bx, slope_days)[t] > 0BX is negative but rising — the 'increasing light red' state in THT. Buying pressure is returning from a dark-red regime. Entry is still allowed: the cycle is turning back on. This is the earliest entry signal in the THT system.-0
MBNDBX Trender not dark red (bull cycle active)M_BX_NOT_DARK_REDtht bx trendercontextbx[t] = ema(ema(ema(2*close - high - low, 5), 20), 5) - ema(ema(2*close - high - low, 20), 5); NOT dark_red: bx[t] > 0 OR slope(bx, 5)[t] > 0THT BX is in any state except dark red. This includes dark green (BX>0, rising), light green (BX>0, flat), and increasing light red (BX<0 but rising — buying pressure returning). Entry is allowed in all these states. The bull cycle is ON.-15.7%13,223
MSBNSPY monthly BX permits THT entriesM_SPY_BX_NOT_DARK_REDtht bx trendercontextSPY bx[t] > 0 OR SPY slope(bx, 5)[t] > 0The SPY monthly BX state is not dark red. This is the portfolio-level market permission used by the promoted weekly THT scanner.-0
T2FXClean weekly FV low recovery — 2% capT_FV_LOW_RECOVER_2tht fair valueentry_diagnosticT_FV_TOUCH_RECLAIM_2 AND weekly_low >= fv_basisThe 2% touch/reclaim component whose weekly low remained at or above the FV basis.-15.7%4,893
T2F1Weekly FV sweep/reclaim — 2% capT_FV_SWEEP_RECLAIM_2tht fair valueentry_diagnosticT_FV_TOUCH_RECLAIM_2 AND weekly_low < fv_basisThe 2% touch/reclaim component whose weekly low swept below the FV basis before the close reclaimed it.-15.8%6,940
LFLSStop below FV lower bandL_FV_LOWER_STOPtht fair valuestopstop_price = fv_lower[t]Hard stop at the FV lower band. The band itself defines the invalidation level — if price closes below it, the bullish structure is invalid.-0
TFBGFV band is green (basis rising)T_FV_BAND_GREENtht fair valuetriggerslope(sma(ohlc4, period), slope_days)[t] > 0The FV ribbon is green — the basis (SMA(ohlc4, period)) is rising over slope_days. This confirms bullish structure. Price has been above the center (basis) but may not have been above the upper band. The green state is about the trend of the band itself, not the current price position.-15.7%13,223
TFIOPrice in or near fair value zoneT_FV_IN_OR_NEAR_ZONEtht fair valuetriggerclose[t] <= fv_upper[t] * (1 + tolerance) AND close[t] >= fv_lower[t]Price is within or near the FV band — between fv_lower and fv_upper, or just above fv_upper within a tolerance. This is the entry zone: price is near fair value, not extended away from it. Does NOT require a pullback from above — just that price is near value.-0
TFNBPrice near fair value basisT_FV_NEAR_BASIStht fair valuetriggerabs(close[t] - fv_basis[t]) <= atr20[t]Price is within 1 ATR of the FV basis (SMA of ohlc4). Tighter entry zone — price has returned to the mean, not just the band edge.-0
TFTRWeekly FV touch and basis reclaimT_FV_TOUCH_RECLAIMtht fair valuetriggerweekly_low[t] <= fv_upper[t] AND weekly_close[t] >= fv_basis[t] AND weekly_close[t] <= fv_upper[t] * (1 + tolerance)The completed weekly low reached the FV upper band or deeper, while the weekly close reclaimed the basis and finished no more than the configured tolerance above the upper band. This combines clean upper-half recoveries and below-basis sweep/reclaims without admitting a close below the basis. The tolerance-specific computed atoms are T_FV_TOUCH_RECLAIM_0 through _3.-0
T0FXWeekly FV touch/reclaim — 0% controlT_FV_TOUCH_RECLAIM_0tht fair valuetriggerweekly_low <= fv_upper AND fv_basis <= weekly_close <= fv_upperCompleted weekly low touched the upper FV band or deeper and the close reclaimed the basis without closing above the upper band.-15.8%7,108
T1FXWeekly FV touch/reclaim — 1% capT_FV_TOUCH_RECLAIM_1tht fair valuetriggerweekly_low <= fv_upper AND fv_basis <= weekly_close <= fv_upper * 1.01Completed weekly low touched the upper FV band or deeper and the close reclaimed the basis, allowing at most 1% above the upper band.-15.9%9,818
T2F2Weekly FV touch/reclaim — 2% capT_FV_TOUCH_RECLAIM_2tht fair valuetriggerweekly_low <= fv_upper AND fv_basis <= weekly_close <= fv_upper * 1.02Completed weekly low touched the upper FV band or deeper and the close reclaimed the basis, allowing at most 2% above the upper band.-15.7%11,833
T3FXWeekly FV touch/reclaim — 3% capT_FV_TOUCH_RECLAIM_3tht fair valuetriggerweekly_low <= fv_upper AND fv_basis <= weekly_close <= fv_upper * 1.03Completed weekly low touched the upper FV band or deeper and the close reclaimed the basis, allowing at most 3% above the upper band.-15.8%13,223
TFT1Weekly FV touch and basis recovery — uncappedT_FV_TOUCH_RECOVER_UNCAPPEDtht fair valuetriggerweekly_low <= fv_upper AND weekly_close >= fv_basisCompleted weekly low touched the FV upper band or deeper and the close recovered to at least the FV basis. The close may finish above the FV upper band; there is deliberately no upper-distance cap. A close below the basis is excluded.-0
TFUHPrice in strict upper half of fair value bandT_FV_UPPER_HALFtht fair valuetriggerclose[t] >= fv_basis[t] AND close[t] <= fv_upper[t]Weekly close is at or above the FV basis and at or below the FV upper band. This is the confirmed-recovery entry zone selected by the THT Stage 5 portfolio tests.-0
T30BBroken below 30%T_BROKEN_BELOW_30ticker contextblockerBroken below 30% > 30%Ticker is more than 30% below a recent high.-0
T20EMA200 extensionT_EXTENDED_MA200ticker contextblockerclose[t] > sma(close, 200)[t] and slope(sma(close, 200), 20)[t] > 0Ticker is far above the 200-day moving average.-0
T50EMA50 extensionT_EXTENDED_MA50ticker contextblockerclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Ticker is far above the 50-day moving average.-0
TLRXTicker LPPL riskT_LPPL_RISKticker contextblockerTicker LPPL risk == trueTicker LPPL bubble/exhaustion risk is elevated.-0
THLTTicker long Hurst trendT_HURST_LONG_TRENDticker contextcontextTicker long Hurst trend >= trend thresholdTicker long-window Hurst is above trend threshold.-0
THMDTicker Hurst mean-reversion durabilityT_HURST_MEANREV_DURABILITYticker contextcontextTicker Hurst mean-reversion durability == trueCount or share of long ticker Hurst windows at or below the mean-reversion threshold.-0
THNDTicker Hurst noise durabilityT_HURST_NOISE_DURABILITYticker contextcontextTicker Hurst noise durability == trueCount or share of long ticker Hurst windows inside the neutral noise band.-0
T12HTicker price Hurst 120DT_HURST_PRICE_120Dticker contextcontextTicker price Hurst 120D == trueLonger-window Hurst exponent on ticker price.-0
T25HTicker price Hurst 250DT_HURST_PRICE_250Dticker contextcontextclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Long-window Hurst exponent on ticker price.-0
T50HTicker price Hurst 500DT_HURST_PRICE_500Dticker contextcontextTicker price Hurst 500D == trueMulti-year Hurst exponent on ticker price.-0
THSMTicker short Hurst mean reversionT_HURST_SHORT_MRticker contextcontextTicker short Hurst mean reversion <= mean-reversion thresholdTicker short-window Hurst is below mean-reversion threshold.-0
THTDTicker Hurst trend durabilityT_HURST_TREND_DURABILITYticker contextcontextTicker Hurst trend durability == trueCount or share of long ticker Hurst windows at or above the trend threshold.-0
TNHXNear highT_NEAR_HIGHticker contextcontextNear high <= near high thresholdTicker is within a near-high band.-0
T20TTicker 200D trendT_TREND_200Dticker contextcontextclose[t] > sma(close, 200)[t] and slope(sma(close, 200), 20)[t] > 0Ticker is above a rising 200-day moving average.-0
T50TTicker 50D trendT_TREND_50Dticker contextcontextclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Ticker is above a rising 50-day moving average.-0
TDCXControlled drawdownT_DD_CONTROLLEDticker contexttriggerControlled drawdown == trueTicker drawdown is in an acceptable pullback band.-0
T3HXTicker HMM high-vol chaosT_HMM3_HIGH_VOL_CHAOSticker hmm regimeblockerTicker HMM high-vol chaos == high-volatility chaoticPoint-in-time 3-state HMM assigns the ticker price series to a high-volatility chaotic state.-0
T5HXTicker HMM bear driftT_HMM5_BEAR_DRIFTticker hmm regimeblockerTicker HMM bear drift == negative low-volatility driftPoint-in-time 5-state HMM assigns the ticker price series to a negative low-volatility drift state.-0
T5H1Ticker HMM bear trendT_HMM5_BEAR_TRENDticker hmm regimeblockerTicker HMM bear trend == directional trendPoint-in-time 5-state HMM assigns the ticker price series to a negative directional trend state.-0
T5H2Ticker HMM chaosT_HMM5_CHAOSticker hmm regimeblockerTicker HMM chaos == high-volatility chaoticPoint-in-time 5-state HMM assigns the ticker price series to a high-volatility chaotic state.-0
T3H1Ticker HMM directional trendT_HMM3_DIRECTIONAL_TRENDticker hmm regimecontextTicker HMM directional trend == directional trendPoint-in-time 3-state HMM assigns the ticker price series to a directional trend state.-0
T3H2Ticker HMM low-vol driftT_HMM3_LOW_VOL_DRIFTticker hmm regimecontextTicker HMM low-vol drift == low-volatility drift/rangePoint-in-time 3-state HMM assigns the ticker price series to a low-volatility drift/range state.-0
T5H3Ticker HMM bull driftT_HMM5_BULL_DRIFTticker hmm regimecontextTicker HMM bull drift == positive low-volatility driftPoint-in-time 5-state HMM assigns the ticker price series to a positive low-volatility drift state.-0
T5H4Ticker HMM bull trendT_HMM5_BULL_TRENDticker hmm regimecontextTicker HMM bull trend == directional trendPoint-in-time 5-state HMM assigns the ticker price series to a positive directional trend state.-0
T251Ticker Hurst 250D mean-reversion stateT_HURST_250_MEANREVticker hurstcontextclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Ticker price 250-day Hurst exponent is <= 0.40.-0
T252Ticker Hurst 250D trend stateT_HURST_250_TRENDticker hurstcontextclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Ticker price 250-day Hurst exponent is >= 0.60.-0
H12TTicker Hurst 120Dhurst_ticker_120ticker hurstfeatureTicker Hurst 120D == observedRaw 120-day Hurst exponent on ticker price.-0
H25TTicker Hurst 250Dhurst_ticker_250ticker hurstfeatureclose[t] > sma(close, 50)[t] and slope(sma(close, 50), 20)[t] > 0Raw 250-day Hurst exponent on ticker price.-0
H60TTicker Hurst 60Dhurst_ticker_60ticker hurstfeatureTicker Hurst 60D == observedRaw 60-day Hurst exponent on ticker price.-0
H121Ticker/Sector RS Hurst 120Dhurst_ticker_sector_rs_120ticker hurstfeatureTicker/Sector RS Hurst 120D == observedRaw 120-day Hurst exponent on ticker versus sector relative strength line.-0
H251Ticker/Sector RS Hurst 250Dhurst_ticker_sector_rs_250ticker hurstfeaturesector_etf[t] > sma(sector_etf, 50)[t] and slope(sma(sector_etf, 50), 20)[t] > 0Raw 250-day Hurst exponent on ticker versus sector relative strength line.-0
H601Ticker/Sector RS Hurst 60Dhurst_ticker_sector_rs_60ticker hurstfeatureTicker/Sector RS Hurst 60D == observedRaw 60-day Hurst exponent on ticker versus sector relative strength line.-0
T141RSI14 extendedT_RSI14_EXTENDEDticker momentumblockerRSI14 extended >= 70Ticker 14-day RSI is >= 70.-0
T5RXRSI5 extendedT_RSI5_EXTENDEDticker momentumblockerRSI5 extended >= 90Ticker 5-day RSI is >= 90.-0
T1MX1-month momentum strongT_MOM_1M_STRONGticker momentumcontext1M return >= 10%Ticker 1-month return >= 10%. Strong short-term momentum.-0
T1M11-month momentum upT_MOM_1M_UPticker momentumcontext1-month momentum up > 0%Ticker 21-day return is positive.-0
T3MX3-month momentum strongT_MOM_3M_STRONGticker momentumcontext3M return >= 30%Ticker 3-month return >= 30%. Strong medium-term momentum.-0
T3M13-month momentum upT_MOM_3M_UPticker momentumcontext3M return > 0%Ticker 3-month return is positive. Basic uptrend confirmation.-0
T3RXRelative strength vs SPY 3MT_RS_SPY_3M_UPticker momentumcontext3M return > SPY 3M returnTicker 3-month return exceeds SPY 3-month return. Outperforming the market.-0
R14XRSI 14-dayrsi14ticker momentumfeatureRSI 14-day == observedRaw 14-day RSI value.-0
R5XXRSI 5-dayrsi5ticker momentumfeatureRSI 5-day == observedRaw 5-day RSI value.-0
TPAMMinimum prior advanceT_PRIOR_ADVANCE_MINticker momentumsetupclose[t] / min(low[t-lookback_days+1:t]) - 1 >= min_advanceRequires evidence of exceptional prior price strength before the current setup.-0
TRPMMinimum ticker relative-strength percentileT_RS_PERCENTILE_MINticker momentumtriggercross_sectional_percentile(return(ticker, lookback_days), universe_id, t) >= min_percentileTicker trailing return ranks above a cross-sectional percentile in the configured point-in-time universe. Entry criterion, not a merit-model feature.-0
TBDMMaximum base depthT_BASE_DEPTH_MAXticker recent patternsetuppivot_index = argmax(high[t-lookback_days:t-min_base_days]); base_low = min(low[pivot_index+1:t-1]); base_pullback_depth = 1 - base_low / high[pivot_index]; base_pullback_depth <= max_depthSequential pre-breakout correction depth from a prior pivot high to the lowest later low does not exceed a configurable limit. The pivot must be old enough to form a base, and all inputs end at t-1.-0
TBRCBase range contractionT_BASE_RANGE_CONTRACTIONticker recent patternsetupshort_range = max(high[t-short_days:t-1]) / min(low[t-short_days:t-1]) - 1; long_range = max(high[t-long_days:t-1]) / min(low[t-long_days:t-1]) - 1; base_range_contraction_ratio = short_range / long_range; base_range_contraction_ratio <= max_ratioThe normalized price span of the terminal pre-breakout window is a configurable fraction of the full base span. All windows end at t-1.-0
TBVDBase volume dry-upT_BASE_VOLUME_DRYUPticker recent patternsetupavg(volume[t-short_days:t-1]) / avg(volume[t-long_days:t-1]) <= max_ratioRecent average volume contracts relative to the longer base-period average before entry. Both windows end before the breakout session so event-day volume cannot contaminate base quality.-0
T60RRange contraction strict 60%T_RANGE_CONTRACT_STRICT60ticker recent patternsetup5D range / 20D avg range <= 0.605-day range is at most 60% of the 20-day average range. Volatility contraction pattern (VCP-like).-0
T5R1RSI5 washoutT_RSI5_WASHOUTticker recent patternsetupRSI5 washout <= 355-period RSI <= 35. Short-term oversold condition for mean reversion entries.-0
TTCUTight range + close upper halfT_TIGHT_CLOSE_UPPER_HALFticker recent patternsetup5D range / 20D avg range <= 0.60 AND Close position in 5D range >= 0.50Range is contracted (5v20 <= 0.60) AND close is in the upper half of the weekly range. Tight base with accumulation.-0
TBVRBreakout volume ratioT_BREAKOUT_VOLUME_RATIOticker recent patterntriggervolume[t] / avg(volume[t-average_days:t-1]) >= min_ratioBreakout-day volume exceeds a configurable multiple of its prior average. Generalises binary volume confirmation.-0
T45BForward markup break forecast top 5%T_BREAK_FORECAST_4W_TOP_5ticker recent patterntriggerT_BREAK_FORECAST_4W_TOP_5Frozen OOS probability of a stable markup break in the next four weeks ranks in the global weekly top 5%. The K1/D126 entry gate rejected positive-return trades and failed Stage 3.-0
T20C20-day close breakoutT_CLOSE_BREAK_20D_HIGHticker recent patterntriggerClose > Prior 20D highClose broke above the 20-day high. Primary breakout entry trigger.-0
TCBRClose breakout above rolling highT_CLOSE_BREAK_ROLLING_HIGHticker recent patterntriggerclose[t] > prior_high(lookback_days)[t] + buffer_atr * atr(atr_days)[t]Close exceeds a prior rolling high by the configured ATR buffer. Generalises the promoted 20-day close breakout.-0
TCGXCML regime green (stacked EMAs + momentum)T_CML_GREENticker recent patterntriggerstate machine: arm when ema8[t] > ema21[t] > ema50[t] AND roc10[t] >= 0; reset when ema8[t] < ema21[t]Regime state for the triangle breakout family: EMA8 > EMA20 > EMA50 with ROC(10) >= 0 arms the state; EMA8 crossing below EMA20 resets it. This is the trend gate that precedes any consolidation geometry check, analogous to the uptrend gate in the asymmetric R:R dip framework.-0
T5NXNo 5-day chaseT_NO_CHASE_5Dticker recent patterntrigger5D return <= 8%5-day return <= 8%. Avoid entries after the stock has already run up significantly.-0
TPDMMaximum distance above pivotT_PIVOT_DISTANCE_MAXticker recent patterntriggerpivot_distance_pct = close[t] / pivot_price - 1; pivot_distance_atr = (close[t] - pivot_price) / signal_atr20; require close[t] >= pivot_price AND distance(mode) <= max_distanceRejects signal-day closes that have moved too far above the stored breakout pivot. Percentage and ATR-normalised distances are separate variants, never an OR condition.-0
TTBXTriangle resistance breakout triggerT_TRIANGLE_BREAKOUTticker recent patterntriggerT_TRIANGLE_CONSOLIDATION AND close[t] > res_slope*t + res_intercept AND body_strength >= 0.5 AND (high-low) <= 2*atr20Trigger 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 stop is the entry-day low (stop_type = breakout_low) so the trade carries a defined structural invalidation. Candle anatomy is exported as continuous features (body strength, range in ATR, stop distance) for entry-quality measurement.-0.2%10,645
TTCXTriangle consolidation with fitted geometryT_TRIANGLE_CONSOLIDATIONticker recent patterntriggerorigin = argmax high[t-60:t-1]; hold_frac(close >= ema21*0.99) >= 0.8 over [origin, t-1]; any low <= ema8 in window; res = linreg(swing highs, order 2); sup = linreg(swing lows, order 2); sup_slope > 0A valid consolidation is present: anchored at the first-leg high (highest high of the last 10-60 bars), price holds EMA20 on at least 80% of bars, touches EMA8 at least once, and both the swing-high resistance line and swing-low support line are fittable (>= 2 swings each) with the support line sloping upward (higher lows). The raw geometry (res/sup R^2, slopes, days-to-apex) is exported as continuous features for threshold search; this atom only asserts that the geometry exists.-0
TVCXVolume confirmationT_VOLUME_CONFIRMticker recent patterntriggerVolume > Prior 20D avg volumeBreakout volume is above recent average. Demand confirmation on the breakout entry.-0
T451Recent markup break nowcast top 5%T_BREAK_NOWCAST_4W_TOP_5ticker recent patterntrimT_BREAK_NOWCAST_4W_TOP_5Frozen OOS probability that a stable markup break began in the prior four weeks ranks in the global weekly top 5%. Raw 25% and 50% trims failed Stage 3 on K1/D126.-0
T452Recent markup break nowcast top 5%, price confirmedT_BREAK_NOWCAST_4W_TOP_5_CONFIRMEDticker recent patterntrimT_BREAK_NOWCAST_4W_TOP_5_CONFIRMEDTop-5% recent-break nowcast combined with MA50 loss and negative 20-session slope. The 25% trim remains a research challenger after only 12 concentrated Stage 3 events.-0
TBPCMarkup break price confirmationT_BREAK_PRICE_CONFIRMEDticker recent patterntrimT_BREAK_PRICE_CONFIRMEDTicker is below MA50 and its 20-session log-price slope is negative on the frozen weekly break-model observation. Stage 3 model-free trim comparator.-0
R3T2Ticker/sector HMM chaosR_TICKER_SECTOR_HMM3_CHAOSticker relative hmm regimeblockerTicker/sector HMM chaos == high-volatility chaoticPoint-in-time 3-state HMM assigns the ticker versus sector relative-strength line to a high-volatility chaotic relative state.-0
R3T3Ticker/sector HMM lagR_TICKER_SECTOR_HMM3_LAGticker relative hmm regimeblockerTicker/sector HMM lag == negative laggingPoint-in-time 3-state HMM assigns the ticker versus sector relative-strength line to a negative lagging state.-0
R5TXTicker/sector HMM chaosR_TICKER_SECTOR_HMM5_CHAOSticker relative hmm regimeblockerTicker/sector HMM chaos == high-volatility chaoticPoint-in-time 5-state HMM assigns the ticker versus sector relative-strength line to a high-volatility chaotic relative state.-0
R5T1Ticker/sector HMM lag driftR_TICKER_SECTOR_HMM5_LAG_DRIFTticker relative hmm regimeblockerTicker/sector HMM lag drift == negative low-volatility driftPoint-in-time 5-state HMM assigns the ticker versus sector relative-strength line to a negative low-volatility drift state.-0
R5T2Ticker/sector HMM lag trendR_TICKER_SECTOR_HMM5_LAG_TRENDticker relative hmm regimeblockerTicker/sector HMM lag trend == persistent negativePoint-in-time 5-state HMM assigns the ticker versus sector relative-strength line to a persistent negative relative trend state.-0
R3T4Ticker/sector HMM leadR_TICKER_SECTOR_HMM3_LEADticker relative hmm regimecontextTicker/sector HMM lead == positive leadershipPoint-in-time 3-state HMM assigns the ticker versus sector relative-strength line to a positive leadership state.-0
R5T3Ticker/sector HMM lead driftR_TICKER_SECTOR_HMM5_LEAD_DRIFTticker relative hmm regimecontextTicker/sector HMM lead drift == positive low-volatility driftPoint-in-time 5-state HMM assigns the ticker versus sector relative-strength line to a positive low-volatility drift state.-0
R5T4Ticker/sector HMM lead trendR_TICKER_SECTOR_HMM5_LEAD_TRENDticker relative hmm regimecontextTicker/sector HMM lead trend == configured_statePoint-in-time 5-state HMM assigns the ticker versus sector relative-strength line to a positive directional leadership state.-0
R11X1-month returnret_1mticker returnfeature1-month return == observedRaw ticker 21-day simple return.-0
R33X3-month returnret_3mticker returnfeature3-month return == observedRaw ticker 63-day simple return.-0
T214Above EMA200T_ABOVE_EMA200ticker trendcontextclose[t] > ema(close, 200)[t]Ticker close is above the 200-day exponential moving average.-0
T21AAbove EMA21T_ABOVE_EMA21ticker trendcontextclose[t] > ema(close, 21)[t]Ticker close is above the 21-day exponential moving average. Short-term trend positive.-0
T50AAbove EMA50T_ABOVE_EMA50ticker trendcontextClose > 50D EMATicker is trading above its 50-day exponential moving average.-0
T8AXAbove EMA8T_ABOVE_EMA8ticker trendcontextClose > 8D EMATicker is trading above its 8-day exponential moving average. Short-term strength.-0
T501Above MA50T_ABOVE_MA50ticker trendcontextClose > 50D SMATicker is trading above its 50-day moving average. Uptrend context.-0
TESBEMA stack bullishT_EMA_STACK_BULLticker trendcontextclose[t] > ema(close, 8)[t] > ema(close, 21)[t] > ema(close, 50)[t] > ema(close, 200)[t]Price above EMA8 > EMA21 > EMA50 > EMA200. Full bullish EMA stack.-0
TMSBMA stack bullishT_MA_STACK_BULLticker trendcontextsma(close, 10)[t] > sma(close, 20)[t] > sma(close, 50)[t] > sma(close, 200)[t]MA10 > MA20 > MA50 > MA200. Full bullish moving average stack confirms structural uptrend.-0
AABXAdd breakoutA_ADD_BREAKOUTtrade managementaddAdd breakout == trueAdd on breakout after initial entry.-0
AAPHAdd pullback holdA_ADD_PULLBACK_HOLDtrade managementaddAdd pullback hold == trueAdd when pullback holds support.-0
AARCAdd RS confirmationA_ADD_RS_CONFIRMtrade managementaddAdd RS confirmation == trueAdd when ticker or sector relative strength confirms.-0
AAVRAdd VCP reloadA_ADD_VCP_RELOADtrade managementaddAdd VCP reload == trueAdd on a later VCP setup.-0
ANXXNo addA_NONEtrade managementaddNo add == trueNo additional buys after initial entry.-0
X22X2R profit targetX_2R_TARGETtrade managementexitX_2R_TARGETTrim at entry + 2*risk (where risk = entry - initial stop). R-multiple based profit target.-0
X44X4 consecutive green candle signalX_4GC_SIGNALtrade managementexitX_4GC_SIGNALTrim when 4 consecutive bars have close > previous close. Momentum signal for second-stage trim.-0
X4GX4 consecutive green candles exitX_4_GREEN_CANDLEStrade managementexitcount(close[t-i] > close[t-i-1] for i in 0..3) >= 4Exit long after 4 consecutive higher closing days (momentum exhaustion).-0
XBBXSubsequent base breakdown exitX_BASE_BREAKDOWNtrade managementexitclose[t] < prior_base_low(lookback_days)[t] - buffer_atr * atr20 for confirm_daysExit a winner when price closes below the lower boundary of its later rolling base.-0
XBEXBearish engulfing exitX_BEARISH_ENGULFINGtrade managementexitclose[t] < open[t] AND open[t] > close[t-1] AND close[t] < open[t-1] AND close[t-1] > open[t-1]Exit long on bearish engulfing candlestick pattern.-0
XBUXUpper Bollinger Band exitX_BOLLINGER_UPPERtrade managementexitclose[t] > sma(close, 20)[t] + 2 * stddev(close, 20)[t]Exit long when price closes above 20-day upper Bollinger Band.-0
XBBRFailed breakout base re-entryX_BREAKOUT_BASE_REENTRYtrade managementexitdays_since_entry <= max_age_days AND close[t] < pivot - buffer_atr * atr20Trim or exit when price closes back below the stored breakout pivot soon after entry.-0
XBDRBX Trender dark red (regime change)X_BX_DARK_REDtrade managementexitbx[t] < 0 AND slope(bx, slope_days)[t] < 0 for confirm_days consecutive sessionsBX is negative AND declining — institutional buying pressure is gone, sellers in control, and conditions are worsening. This is NOT the same as BX < 0: a negative-but-rising BX (light red) is still a valid bull-cycle state. Dark red = BX < 0 AND slope(BX) < 0. Exit all longs immediately.-0
X21EEarly EMA21 exitX_EARLY_EMA21trade managementexitX_EARLY_EMA21Exit on close < EMA21 before first trim fires. Catches failed breakouts that never reach the first profit target.-0
X10E10-day EMA trailing exitX_EMA10_TRAILtrade managementexitclose[t] < ema(close, 10)[t]Exit long when price closes below 10-day EMA.-0
X211EMA21-ATR fixed stop (set-once)X_EMA21_ATR_FIXEDtrade managementexitX_EMA21_ATR_FIXEDInitial stop = EMA(21) - 0.25*ATR(14), set once at entry. Non-trailing; stop only moves when a trim target or signal fires.-0
X212EMA21 trail exitX_EMA21_TRAILtrade managementexittrend_filter == trueExit on close < EMA21. Medium-term trend trail. Pairs with X_HOLD_MIN_D63 for 3-month hold-then-trail.-0
X50EEMA50 trail exitX_EMA50_TRAILtrade managementexittrend_filter == trueExit on close < EMA50. Slow trail for long-term trend following. Wider room, fewer whipsaws.-0
X8EXEMA8 trail exitX_EMA8_TRAILtrade managementexittrend_filter == trueExit on close < EMA8. Fast trail for runner positions or short-term trend following.-0
X101Episodic event EMA10 runner exitX_EVENT_RUNNER_EMA10trade managementexitexit remaining position when close[t] < ema(close, 10)[t] OR days_since_entry >= max_hold_daysTrail the retained runner using a close below EMA10, subject to a maximum campaign horizon.-0
X1FXExit 1MX_FIXED_1Mtrade managementexitExit 1M >= 21 barsExit after 1 month.-0
X3FXExit 3MX_FIXED_3Mtrade managementexitExit 3M >= 63 barsExit after 3 months.-0
X6FXExit 6MX_FIXED_6Mtrade managementexitExit 6M >= 126 barsExit after 6 months.-0
XFBXPrice closed below FV lower bandX_FV_BREAKDOWNtrade managementexitclose[t] < fv_lower[t] for confirm_days consecutive sessionsPrice closes below the FV lower band (SMA of low, period). Structure is broken — the fair value ribbon has turned red. Secondary exit independent of BX.-0
X1F1Price reached X1 deviation band (moderate overextension)X_FV_X1_TRIMtrade managementexitclose[t] >= fv_basis[t] + atr_mult * atr_wilder(atr_period, weekly)[t]Price has reached the X1 deviation level — the first overextension rail above the FV ribbon. X1 = fv_basis + atr_mult * ATR_Wilder(atr_period, weekly). Confirmed via reverse-engineering on SPY/NVDA weekly data (CV of k = 1.12% across 3 equity points). This is a moderate trim signal: take partial profit while letting the remainder ride the regime.-0
X2FXPrice reached X2 deviation band (severe overextension)X_FV_X2_TRIMtrade managementexitclose[t] >= fv_basis[t] + 2 * atr_mult * atr_wilder(atr_period, weekly)[t]Price has reached the X2 deviation level — the second overextension rail. X2 = fv_basis + 2 * atr_mult * ATR_Wilder(atr_period, weekly). The ladder structure (X2 - basis = 2 * (X1 - basis)) was confirmed to <0.6% on all measured data points. This is a stronger trim or full exit: the move is severely overextended relative to fair value.-0
X10HHold minimum 10 daysX_HOLD_MIN_D10trade managementexittrend_filter == trueTime gate: no trend exit before 10 trading days. Compose with an EMA trail atom.-0
X12HHold minimum 126 daysX_HOLD_MIN_D126trade managementexittrend_filter == trueTime gate: no trend exit before 126 trading days (6 months). Long-hold runner strategies.-0
X21HHold minimum 21 daysX_HOLD_MIN_D21trade managementexittrend_filter == trueTime gate: no trend exit before 21 trading days (1 month). Compose with an EMA trail atom.-0
X5HXHold minimum 5 daysX_HOLD_MIN_D5trade managementexittrend_filter == trueTime gate: no trend exit before 5 trading days. Compose with an EMA trail atom.-0
X63HHold minimum 63 daysX_HOLD_MIN_D63trade managementexittrend_filter == trueTime gate: no trend exit before 63 trading days (3 months). Compose with an EMA trail atom.-0
XMBXMarket bear exitX_MARKET_BEARtrade managementexitMarket bear exit == bearExit or de-risk on bear regime.-0
X20MMA 20/50 crossover exitX_MA_CROSS_20_50trade managementexitsma(close, 20)[t] < sma(close, 50)[t] AND sma(close, 20)[t-1] >= sma(close, 50)[t-1]Exit long when 20-day SMA crosses below 50-day SMA.-0
XNPXEarly no-progress exitX_NO_PROGRESStrade managementexitdays_since_entry >= evaluation_day AND close[t] / entry_price - 1 < min_returnExit when a new position has failed to achieve a minimum return by a configured holding day.-0
XPSXParabolic SAR exitX_PARABOLIC_SARtrade managementexitclose[t] < psar[t]Exit long when price closes below the Parabolic SAR dot.-0
X14RRSI(14) overbought exitX_RSI14_70trade managementexitrsi(close, 14)[t] >= 70Exit long when RSI(14) reaches 70 (overbought). Pairs with RSI oversold entry.-0
XRBXRelative strength breakX_RS_BREAKtrade managementexitRelative strength break == trueExit on ticker-sector or ticker-SPY relative strength break.-0
XRRXRelative-strength rollover exitX_RS_ROLLOVERtrade managementexitlinreg_slope(log(close[ticker] / close[benchmark]), slope_days) < 0 for confirm_daysExit after ticker relative strength versus SPY or its group develops a confirmed negative slope.-0
XSDXScore decay exitX_SCORE_DECAYtrade managementexitScore decay exit == trueExit when selection or entry score decays.-0
XSBXSector breakX_SECTOR_BREAKtrade managementexitSector break == trueExit when sector trend or relative strength fails.-0
X21SSnapshot EMA21-ATR stop actionX_SNAPSHOT_EMA21_ATRtrade managementexitrelative_regime == hotAt trim time, set stop to max(breakeven, EMA(21) - 0.25*ATR(14)), capped at first target price. Non-trailing, ratchets up only.-0
XSOXStop only exitX_STOP_ONLYtrade managementexitStop only exit == trueExit only by stop or explicit risk rule.-0
X5TX5% profit targetX_TARGET_5PCTtrade managementexitclose[t] >= entry_price * 1.05Close trade when 5% gain is reached.-0
X5T15-day time exitX_TIME_5Dtrade managementexitexit when bars_since_entry >= 5Exit all trades after exactly 5 trading days.-0
X25TBreak-even trailing stop (2%/5%)X_TRAIL_2PCT_5PCTtrade managementexitif max_close_since_entry >= entry * 1.02 then stop = max_high_since_entry * 0.95After 2% gain, trail stop 5% behind highest price since entry.-0
E20MMA 20/50 crossover entryE_MA_CROSS_20_50trend followingtriggersma(close, 20)[t] > sma(close, 50)[t] AND sma(close, 20)[t-1] <= sma(close, 50)[t-1]20-day SMA crosses above 50-day SMA (golden cross). Long entry signal.-0
PTMRTrim market riskP_TRIM_MARKET_RISKtrimblockerTrim market risk == trueTrim if broad market risk rises.-0
PESTEarly strength partial trimP_EARLY_STRENGTH_TRIMtrimtrimif days_since_entry <= max_days AND gain >= target_gain then trim trim_fractionTrim most of the position into an early gain while retaining a minority runner. Exploratory 80/20 management hypothesis.-0
PNXXNo trimP_NONEtrimtrimNo trim == trueNo partial trims.-0
P25TTrim 25% at +20%P_TRIM_25_AT_20trimtrimTrim 25% at +20% >= 20%Trim 25% of position after 20% gain.-0
P33TTrim 33% at +50%P_TRIM_33_AT_50trimtrimTrim 33% at +50% >= 50%Trim one-third of position after 50% gain.-0
PTEXTrim extensionP_TRIM_EXTENSIONtrimtrimTrim extension == trueTrim on MA or RSI extension.-0
PTLXTrim LPPL riskP_TRIM_LPPLtrimtrimTrim LPPL risk == trueTrim on high LPPL risk.-0
PTSRTrim sector rolloverP_TRIM_SECTOR_ROLLOVERtrimtrimTrim sector rollover == trueTrim if sector relative strength rolls over.-0
T60GGap activity 60DT_GAP_ACTIVITY_60DvolatilitysetupGap activity 60D >= 2At least 2 gap moves in the trailing 60 days. Indicates institutional activity or news catalysts.-0
THAXHigh ADRT_HIGH_ADRvolatilitysetupATR20 / close >= 2%Average daily range (ATR as % of price) >= 2%. Enough volatility to pay for the risk of the trade.-0
ENRBNarrowest range breakout upE_NARROW_RANGE_BREAKOUT_UPvolatility expansiontriggerrange[t-1] = min(range[t-7..t-1]) AND close[t] > high[t-1]Upward breakout following the narrowest daily range of the last 7 days.-0
TGVEGARCH volatility expansion gateT_GARCH_VOL_EXPANSIONvolatility forecastcontextgarch_vol_forecast[t] >= thresholdGARCH(1,1) forecasted true range / price >= threshold. Binary regime gate: forecasted vol above threshold means conditions are active for breakout follow-through; below threshold means stay out. A breakout strategy needs volatility expansion — without it, the setup can look perfect and still go nowhere. This gate filters out breakouts that occur when GARCH forecasts low next-period volatility.-0
TGVFGARCH(1,1) forecasted true rangeT_GARCH_VOL_FORECASTvolatility forecastcontextlog_tr = log(true_range[t] + epsilon); demeaned = log_tr - SMA(log_tr, trailing_window); fit GARCH(1,1) on demeaned[t-fit_window:t]; forecast = exp(sigma2[t+1] + SMA(log_tr, trailing_window)); garch_vol_forecast = forecast / close[t]GARCH(1,1) one-step-ahead forecast of daily True Range, as a percentage of price. The forecast is computed on log-transformed, demeaned True Range to handle skew and isolate the volatility signal. Unlike T_HIGH_ADR (which measures current ATR level), this forecasts next-period volatility using the GARCH volatility-clustering model.-0
EBBUUpper Bollinger Band breakoutE_BOLLINGER_BREAKOUT_UPvolatility momentumtriggerclose[t] > sma(close, 20)[t] + 2 * stddev(close, 20)[t]Close above 20-day upper Bollinger Band (2 std dev). Volatility momentum entry.-0
T20UUp-volume 20D strongT_UPVOL_20D_STRONGvolumecontextUp-volume 20D strong >= 60%Up-day volume ratio over 20 days >= 60%. Buying pressure dominates selling pressure.-0