Categorising chart technicals
Five axes that turn a price history into one readable label
A chart says something before any fundamental does, but "it looks strong" is not a measurement. This study decomposes an asset's price history into 5 independent axes — trend, quality, volatility, phase and relative strength — each computed from price and volume alone, then composes them into a single plain-language label. Scored across 2,881 assets over 1,037 sessions (2022-09-01 to 2026-06-26), the composition yields 11 distinct labels. The axes are kept separate on purpose: collapsing them early is what makes most technical scores unreadable, because a name can trend hard and chop badly at the same time.
The five axes
Each axis answers one question and is scored independently, so they can disagree. Bars share a common 100% ceiling, so the axes are directly comparable to each other.
Trend
Which way is it going, and how hard?
Basis126d return, efficiency ratio, and moving-average alignment
Quality
Is the move smooth or does it saw around?
Basisefficiency ratio and R² of the price path against a straight line
Volatility
How wide are the swings, and are they widening?
Basisrealised volatility percentile, plus 21d against 63d for direction
Expanding (21d vol > 63d vol) for 60% of names.
Phase
Is there a reversal flag on the tape?
BasisRSI extremes and position within the recent range
Relative strength
Is it beating the market or lagging it?
Basis126d return against SPY over the same window
The composed label
The five axes compose into one headline label. The distribution is heavily concentrated — the top label alone covers 40.5% of the universe, and the market spends far more time drifting than doing anything dramatic.
Showing the top 8 of 11 labels. The remaining 3 account for 1.9% combined: Grinding higher (quiet), Uptrend, stalling, Overextended / topping uptrend.
Worked examples
Six names from the snapshot, showing how the axes combine. Note MU and MARA: both label as uptrends, but one is high-volatility and one is quiet — the axes keep that difference visible where a single score would bury it.
- 21d return
- +25%
- 126d return
- +228%
- 252d return
- +918%
- efficiency ratio
- 0.23
- path R²
- 0.74
- vol percentile
- 1.00
- RSI
- 58.6
- range position
- 0.91
- MA alignment (0–3)
- 3/3
- 21d return
- -13%
- 126d return
- +3%
- 252d return
- +75%
- efficiency ratio
- 0.02
- path R²
- 0.33
- vol percentile
- 0.82
- RSI
- 33.4
- range position
- 0.70
- MA alignment (0–3)
- 2/3
- 21d return
- +29%
- 126d return
- -15%
- 252d return
- -7%
- efficiency ratio
- 0.05
- path R²
- 0.04
- vol percentile
- 0.87
- RSI
- 56.7
- range position
- 0.39
- MA alignment (0–3)
- 1/3
- 21d return
- -14%
- 126d return
- -15%
- 252d return
- +19%
- efficiency ratio
- 0.07
- path R²
- 0.11
- vol percentile
- 0.36
- RSI
- 40.3
- range position
- 0.41
- MA alignment (0–3)
- 0/3
- 21d return
- +2%
- 126d return
- +41%
- 252d return
- -16%
- efficiency ratio
- 0.08
- path R²
- 0.53
- vol percentile
- 0.15
- RSI
- 56.1
- range position
- 0.49
- MA alignment (0–3)
- 3/3
- 21d return
- +1%
- 126d return
- -1%
- 252d return
- +1%
- efficiency ratio
- 0.03
- path R²
- 0.49
- vol percentile
- 0.20
- RSI
- 58.8
- range position
- 0.41
- MA alignment (0–3)
- 1/3
Limitations
What this can't see. Stated plainly, because a label that hides its blind spots is worse than no label.
- Descriptive, not predictive. A label says what the chart has already done, not what it will do next.
- Snapshot-dependent. Every figure is as of the close on the snapshot date and will drift with the tape.
- Price and volume only. No earnings, no news, no positioning — a name can be labelled a clean uptrend the day before a profit warning.
- Thresholds are chosen, not learned. The cut points between Strong Up and Up, or Choppy and Trending, are judgement calls held fixed across the universe.
- Survivorship in the universe. Names that delisted inside the window are absent, which flatters the downtrend tail.
Figures are as of 2026-06-26, computed over 2,912 names with at least a year of history (2,963 with at least six months) out of a requested universe of 3,000.