← Research library
Research · 研究 · 03 · Scoring

Composite scoring. Eight features, one number.

2 Jun 2026Updated 7 Jul 20269 min readMethodologyShishin Research

This article describes the scoring methodology Shishin uses to rank stocks within each engine. It is not investment advice. The composite is one input into the system; entries, sizing, and exits are governed by additional rules not all of which are public.

The single most important question in stock selection isn't which indicator works. It's which combination of indicators works on the names that turn into winners. The answer is never one indicator.

A composite score is a single 0 to 100 ranking number that blends eight distinct technical features into one read, so no individual indicator decides whether a stock makes the list.

The flaw in single-indicator screens

Show a quantitatively-minded reader an RSI scan, a 52-week high list, or a relative-strength leaderboard and you will get a list of candidates, all of which look great on the cover. Some of them will work. The same exercise on the same market a month earlier produces a different list, of which a different subset will work. The hit rate of any single indicator hovers in the 30-40% range across full cycles. That's better than chance, but it isn't enough to fund a live system.

The reason is structural. A single indicator captures a single dimension of a stock's character, its position relative to a moving average, its volatility, its volume. Real winners cluster on multiple dimensions simultaneously: tight base + high relative strength + compressing volatility + improving thrust. Any one of those features can fire on a stock that goes nowhere. The conjunction can't.

The eight features

The Shishin Score is built from eight sub-scores, each derived from a distinct dimension of the daily price+volume record. Each sub-score is a continuous number on a 0 to 100 scale; the composite is a weighted sum that lives on the same scale, where roughly 85+ means "this is in the top decile of names that historically produced winners."

  • Position, where the price sits relative to its short and long moving averages. Captures the difference between “a name in an uptrend” and “a name that bounced once.”
  • Volatility, average daily range over a rolling window. Both too-low (illiquid) and too-high (already extended) are penalised. The middle is where breakouts live.
  • Thrust, short-window return relative to longer-window return. Picks out names with newly accelerating price action versus names drifting up at trend pace.
  • Base, tightness of the recent consolidation. A measure of supply absorption: a stock that traded in a narrow range for weeks has a different shape than one that traded in a wide one.
  • Breakout, distance from the recent consolidation high. Rewards setups where the candidate is poised at the edge of resolution, not already past it.
  • Acceleration, rate of change of the short-window return. Catches the inflection point at which a name's velocity is rising, not just its level.
  • Liquidity, dollar volume normalised to recent average. Both supports the entry mechanically (you can buy it) and is a soft sentiment signal: institutional accumulation usually shows up as volume before it shows up as price.
  • Sector, relative strength of the candidate's sector versus the broad universe. A 90-score name in a sector that's bleeding is worth less than a 70-score name in a sector that's leading.

The first two sub-scores, Position and Volatility, carry roughly half the composite's weight. The remaining six split the other half. The exact weights are calibrated, not guessed; their values are published internally but not in this article. The asymmetry matters for replicability: knowing the buckets doesn't tell you the formula. Knowing the formula doesn't tell you the cutoffs.

How the weights were chosen

An earlier generation of the scoring system (v14) ran with unweighted equal-contribution sub-scores. After accumulating 444 closed trades in the v14 backtest, we ran a tertile-difference regression: split the trades by outcome (top, middle, bottom third by P&L), then measured each candidate feature's signed contribution to membership in the winning tertile. The resulting weights were the input feature loadings, rounded to two decimals and capped so no single feature dominates. The composite has been deterministic since.

We do not re-fit the weights daily. We do not re-fit the weights monthly. We do not re-fit the weights, period. The v15 composite ships with the same weights for every engine, for every name, for every day. The price of doing so is that we are stuck with whatever in-sample bias the regression encoded. The benefit is that we are not, in any meaningful sense, over-fitting to the recent past. A live track compiled against fixed weights is information; a live track compiled against weights that adapted to it is theatre.

Score-to-decision mapping

The composite isn't a buy signal by itself. It's a ranking. Each engine's universe is scored daily; only candidates above a regime-specific cutoff are considered as setups; only the setups that also pass the engine's setup-state filter (typically “turnaround,” “at pivot,” or selected “extended” states) are eligible for entry. Position size is a function of score; a higher composite buys a larger weight at entry. We also tested a score-driven top-up (a capital-efficiency layer that adds to a position as its score climbs), but it added little on the locked base and was set aside. The composite is everywhere in the system. The score is the centre of gravity.

Why eight, not three or thirty

Three features under-fit. Thirty over-fit. Eight is the smallest number of features that captures the major distinct dimensions of a setup (position, volatility, thrust, base, breakout, acceleration, liquidity, sector) without piling redundant variables on top of each other. We tried four. We tried twelve. We tried something resembling a wide feature engineering pipeline with thirty-plus derived signals. Eight produced the best out-of-sample stability, which is to say, the smallest gap between the weights the regression handed us and the weights we'd have gotten if we had run the regression on the next year's data.

What the composite does, and doesn’t, claim

Three honest qualifications, because a scoring method that oversells itself is the easiest thing in quant to catch:

  • The eight features are not statistically independent. Position, thrust, acceleration, and breakout all read momentum from different angles, and they correlate, the effective number of independent bets is smaller than eight. That is fine: the goal was never orthogonality, it was that combining several correlated-but-distinct reads is more robust than leaning on any single one. But we won’t pretend the composite spans eight independent dimensions. It doesn’t.
  • How a raw indicator becomes a 0 to 100 sub-score is deliberately unpublished. Whether that mapping is a percentile rank, a clipped z-score, or min-max scaling changes how the score behaves at the extremes, a real and consequential choice, and part of the recipe we keep. Knowing the eight buckets doesn’t let you rebuild the score; this is one of the reasons why.
  • The weights are in-sample, and a finite sample at that. They were fit on 444 closed trades, and fitting to your own realised outcomes is in-sample by definition, however those trades were generated. Freezing the weights stops us compounding that bias by re-fitting, but it doesn’t erase it. So the backtest is not the proof. The only genuine out-of-sample test of this composite is the forward one, the live, paper-traded track, run against these exact frozen weights, in the open. That is the number to judge, not the historical one, and it is why we hold the system to a high significance bar before believing any of it.

Eight features, one number. The number ranks the universe every morning. The rank is what the engines act on.

Related reading
MethodologyThe setup state classifier: context beats raw signal8 min readMethodologyVolatility-aware stops: why fixed-percentage stops are the wrong tool8 min readMethodologyThe four guardians framework: why mythology, not factor labels7 min read
Frequently asked

What is a composite stock score?

A composite score blends several indicators into one number on a fixed scale (0 to 100). Shishin's, published as the Shishin Score, combines eight weighted sub-scores, position, volatility, thrust, base, breakout, acceleration, liquidity, and sector, so no single indicator dominates.

Why use eight features instead of one indicator?

Any single indicator is noisy and easy to game; a weighted blend of complementary features is more robust and harder to overfit. Eight features spanning trend, volatility, structure, and liquidity give a steadier, more reliable read than RSI or a moving average alone.

Is the composite score deterministic?

Yes. It is a transparent, rule-based calculation, the same inputs always produce the same score, with no discretion and no black-box model. That reproducibility is what makes it backtestable and auditable.