How premium stacks work
We don't hand-pick the indicators that go on a card. We let the data tell us which combinations have historically led to outsized returns — and we publish the algorithm, the thresholds, and the uncertainty so you can audit the claims yourself.
How to read a stack card
Every card on the live grid packs an anchor, its strongest indicator combo, and the stats below into one tile. This walkthrough shows where each piece lives before the section-by-section breakdown of how those numbers are computed.
What is a stack?
1 · What is a signal stack?
A signal stack is a cluster of two or more independent indicators that fire on the same symbol within a four-bar trailing window. The cluster is anchored to its completion bar — the day on which the final indicator in the stack triggered. Forward returns are always measured starting from the close of that anchor bar, which guarantees there is no look-ahead bias.
2 · The anchor universe
We rebuild signal_stack_anchors nightly. Each row represents one (symbol, anchor_date, direction) cluster. Indicators fall into four namespaces:
strat:*— trade signal events (e.g. MACD crossover, breakout above, morning star).pat:*— chart patterns above 0.45 detector confidence (e.g. bull flag, double bottom, ascending channel).trendline_*_break/*_break— trendline and support/resistance breaks above 0.45 strength.ta:*— technical-analysis enrichment tokens (RSI extremes, MACD histogram sign, Bollinger position/squeeze, SMA regime, volume surges). TA tokens cannot create an anchor on their own; they enrich anchors created by the event tokens above.
An ISO-week dedup keeps only the largest cluster per (symbol, direction, week) so the table isn't dominated by rolling variants of the same event.
3 · Apriori frequent-itemset mining
Once anchors are built, we one-hot encode each anchor's indicator set and run Apriori per (direction, horizon) bucket. A combo is a frequent subset of indicators that co-occurs on at least 30 anchors. We cap combo size at 4 items so the search stays tractable and overfitting is bounded.
4 · Closed itemsets
An itemset is closed if no proper superset has the same support. Translated: if combos [A, C] and [A, B, C] both fire on exactly the same N anchors, the larger combo adds no information — B is fully determined by {A, C}. We mark the redundant superset is_closed = false so the leaderboard can hide it by default.
5 · Lift, confidence, base rate
For each combo at each horizon we compute:
- Confidence — fraction of anchors with this combo that were winners at the horizon (a “winner” is a direction-adjusted positive forward return).
- Base rate — confidence over all anchors in the same (direction, horizon) bucket.
- Lift = confidence ÷ base rate. A combo with a lift of 1.30× wins 30% more often than the bucket average.
6 · Wilson confidence intervals
A raw win rate is just a point estimate. The Wilson 95% CI gives the range of true win rates compatible with the observed sample. The shaded band on each card is [wilson_lower, wilson_upper]; the dot is the point estimate. We use Wilson instead of normal-approximation because it stays well-behaved when the rate is near 0 or 1.
7 · Benjamini–Hochberg correction
When you test thousands of combos at once, some will look significant purely by chance. The Benjamini–Hochberg procedure caps the false discovery rate at 5% across each (direction, horizon) bucket. The is_significant_bh flag — true if BH-adjusted p < 0.05 AND support ≥ 30 AND lift ≥ 1.2 — is what gates the default premium filter on the live page.
8 · Forward returns at 1 / 5 / 20 / 60 / 120 days
Every anchor carries direction-aware forward returns measured from the anchor close. Bullish anchors use (close[+N] − close[0]) / close[0]; bearish anchors flip the sign, so a winning short returns a positive number. The live grid defaults to the 60-day horizon — long enough for a real edge to surface, short enough to be actionable.
9 · Caveats
- Statistical significance does not equal future performance. Regime changes, microstructure shifts, and crowded trades can all blunt edges that historically held.
- Anchors fired in the last 60 or 120 days have not yet settled — their forward returns are not yet observable. The combo statistics are computed only from settled history.
- We pool across all symbols. Per-symbol statistics are too sparse for inference; pooled statistics assume the population edge generalizes to any given symbol drawn from it.
10 · Universe, survivorship & how we compare to SPY
What the curve is. A daily-marked, equal-weight, rolling 60-trading-day-hold portfolio. Every day it holds each position entered in the prior 60 trading days at equal weight (a symbol entered on N days is held N times), the day's portfolio return is the equal-weight average of each open position's move, and those daily returns are compounded. Extreme/corrupt one-day moves (bad ticks, penny stocks, unadjusted splits) are dropped by the same sanity clip the trade returns use, so they can't compound into the line. Every line is rebased to start at 0% in 2005.
Why three lines. The chart separates selection skill from portfolio construction. Stacks is the picks. Equal-weight large-cap is the same universe — every ≥$500M U.S. stock, equal-weight, daily-rebalanced, with no selection — so Stacks − Equal-weight large-cap is the pure selection edge (same universe on both sides). SPY is the cap-weighted S&P 500 — what you'd otherwise buy; since the strategy universe is broader than the index, Equal-weight − SPY blends the equal-vs-cap weighting tilt with the wider universe. Most of the gap to SPY is that construction, not stock-picking.
The 1:1 vs SPY. The compounded equity-curve level is inflated by construction — equal weighting plus daily rebalancing (which also lifts the equal-weight line above a tradeable monthly-rebalanced equal-weight fund) — and is not a realizable track record. The realizable comparison is per-trade: the average premium-stacks pick beats simply buying SPY for the same entry and holding period by … over 60 trading days, beating SPY … of the time — and that edge holds steady across 2005–2026 and three market regimes. That few-percent-per-trade edge is the real signal, not the headline multiple.
Alpha, not beta. The edge isn't just market exposure in disguise. Regressing each pick's 60-day return on SPY's, the bullish book's market beta is … — below 1, meaning less market risk than SPY — yet it still earns a market-neutral alpha of … over 60 trading days. And the per-pick edge is positive whether the market rose (…) or fell (…) — in fact larger when it fell. A strategy that only won in rising markets would be hidden beta; winning in both, at below-market risk, is the signature of selection skill.
Survivorship: a known caveat. The universe is any stock that was a ≥$500M company at the time (point-in-time market cap), which is broader than the S&P 500. We hold the big index names that later died (Sears, Genzyme, Sun Microsystems, Aetna…), but we don't yet have prices for every non-index large-cap that went bankrupt or was bought out — so the book is still mildly survivors-biased for those, which flatters the absolute curve levels. The realizable per-trade edge above is unaffected (it pools settled picks); fully closing the gap means onboarding more delisted-company history (a tracked follow-up).
No look-ahead. A trade is selected using only combo statistics known before its entry (point-in-time monthly snapshots), so no future outcome leaks into the selection. The universe gate is likewise point-in-time: a stock qualifies only if its market cap was ≥$500M as of the prior month-end — the latest value knowable at the time — never because it happens to be large today. The signals themselves fire only on data available up to each bar. Point-in-time market cap runs from 2005, so the strategy and benchmark lines begin there.
11 · Signal quality & the Premium badge
Selection admits a signal only when its best-matching combo's Wilson lower bound (section 6) clears a per-direction floor — so every signal on the live page has already passed a quality bar. To show degrees of quality without hiding anything, each card displays that same best_combo_wilson_lower as a score, with a ● Premium badge when it clears 0.66.
Why a single threshold and not a graded scale: the score is a win-rate confidence, not a measure of outperformance magnitude, and empirically the two only line up past a cut-point. Binning settled bullish signals by score, the 60-day edge over SPY is roughly flat — and even dips slightly — from the floor up to 0.66, then jumps sharply above it. A three-tier “good / better / best” scale would therefore mislead: the middle band is no better than the bottom. So we label only the genuinely-separated Premium cohort (≥ 0.66) and always show the raw number so you can judge for yourself. Bearish signals tend to be strong across the whole range, so the badge discriminates most among bullish ones.