Stocks CardDashboard →

Buy / Sell Signal

The four panels in one number — and its honest counterpart

Updated June 4, 2026

The Signal panel at the top of the SYMBOL card is the synthesis layer. The four panels below it — Perform, Persist, Profit, Peril — each describe one lens. Buy and Sell combine those lenses into the two numbers a reader actually wants up front: is this a buy? and is this deteriorating?

What goes into the score

Modern multi-factor scoring rests on five durable signal families, each with decades of out-of-sample evidence:

Factor familyDashboard inputAcademic anchor
MomentummarketBeat1Y — 252-day excess return vs SPYJegadeesh & Titman (1993); Asness, Moskowitz, Pedersen (2013)
QualitybusinessBeat — TTM revenue + margin + cash-flow YoY compositeNovy-Marx (2013); Fama-French 5-factor; AQR's Quality Minus Junk
Defensiveaverage of volRatio + drawdownRatio (both higher = calmer)Frazzini & Pedersen (2014), Betting Against Beta
TrendtrendPersistence — share of weeks above SMA-200Moskowitz, Ooi, Pedersen (2012), Time Series Momentum
FlowaccumDistFlow — 60-day signed-dollar-volume shareGranville (1963), Wyckoff; Llorente et al. (2002)

These five are chosen because they capture economically independent risk premia — each has paid off across long history without depending on the others. Value is conspicuously absent — the dashboard intentionally doesn't carry it (we score on ratios, not raw multiples), and value's recent decade has been weaker than its long-term reputation. Earnings revisions would be a sixth strong addition if we had sell-side data, which we don't.

How the score is computed

Each of the five inputs is already a 0-100 percentile rank vs the cohort. The buy composite is their geometric mean, with zeros clipped to 1 so the math degrades gracefully:

buyRaw = (max(1, p₁) × max(1, p₂) × … × max(1, pₙ)) ^ (1 / n)

The composite is then re-ranked cross-sectionally across the universe — so percentiles.buySignal = 80 means "this stock's composite beats 80% of the cohort," not "this stock scored 80 in absolute terms."

Two design choices worth flagging:

  1. Geometric, not arithmetic. A single weak factor drags the composite toward zero. We want "winner on ALL fronts" semantics — a stock with perfect quality but terrible flow is not a buy, no matter how good its other four legs look. Arithmetic mean would let any one strong leg paper over a fatal weakness on another.
  2. Equal weighting. Brandt, Santa-Clara, Valkanov (2009) and DeMiguel, Garlappi, Uppal (2009) both showed that 1/N portfolios match or beat covariance-optimized ones out-of-sample, because the parameter estimation noise overwhelms the signal. Same logic for factor weights. Cliff Asness has called this "sin a little" — diversification dominates precision.

There's also a distress veto: if all three risk markers are deeply red simultaneously (volRatio ≤ 20 AND drawdownRatio ≤ 20 AND accumDistFlow ≤ 30), the raw composite is capped at 30 before ranking. This catches the "high momentum + deteriorating risk + flow leaving" pattern — the pre-blow-up setup of names that briefly look strong on a couple legs while the rest fall apart.

Why a separate Sell number

A low buy score doesn't necessarily mean sell. It could just mean "mid-pack on a few legs." The Sell composite is built differently — from four deterioration signals, not absence-of-strength:

sellRaw = mean(100 − marketBeat1M,
               100 − accumDistFlow,
               100 − trendPersistence,
               100 − drawdownRatio)

(recent weakness, money flowing out, broken trend, currently in a drawdown). This catches the cooling-leader pattern — a stock that's been a year-winner but is now losing the cohort on multiple short-window measures simultaneously. That's the trim signal a simple "low buy" filter misses.

The two numbers are not symmetric and don't need to add to anything. They answer different questions:

A stock can have both moderate buy (50) and moderate sell (50) — that just means "mid-pack everywhere." A stock with high buy AND high sell is unusual — typically a recent year-leader that's started to wobble; useful as a "watch closely" flag.

What the score does NOT promise

Honest about scope:

A note on what the model surfaces

On any given snapshot, the top of the buy ranking is often dominated by ETF wrappers — value factor baskets (VLUE, VTV, DFLV), momentum funds (MTUM, SPMO), and broad-market wrappers. This is the model being honest, not biased. ETFs structurally win the defensive leg (lower volatility, smaller drawdowns by diversification), and they have no businessBeat leg to drag them down because they're not single businesses.

The dashboard's universe is deliberately inclusive of ETFs alongside stocks — the whole frame is "every dollar competes for the same destinations." When individual equities crack the top decile alongside the ETF flagships, that's the genuine high-conviction read — a single name that beats not just its peers but the diversified wrappers too.

What to do with the number

The Signal tiles are most useful as the entry point into the rest of the card, not the exit:

  1. Glance the Buy / Sell pair → headline answer.
  2. Read the four panels below → the why — which factors are firing, which are weak.
  3. Read the news strip + commentary → the narrative — what real-world story matches the numbers.
  4. Decide.

The composite is a starting point for a thesis, not a thesis itself.