How the Divergence Score is built

One number, three signals, and every step of the arithmetic written down. All of it lives in one file (lib/signals.ts) so there is a single place to check this page against.

Tiers

Each pillar produces a value from 0 to 100. One function turns any of those into a tier — for the three pillars and for the composite alike, so a colour means the same thing everywhere on the site.

ValueTier
66 and upStrong
33 and upModerate
below 33Low
no dataUnknown

Pillar 1 — Insider conviction (45%)

Only genuine open-market purchases count: a Form 4 with transaction code P, a price above zero, shares acquired rather than disposed, within the last twelve months. Grants, vesting and tax withholding are not buying.

  • Size — total purchase value as basis points of market cap, scaled logarithmically and saturating at 50bp (half a percent of the company). Log, because the difference between 1 and 5bp says more than between 45 and 50.
  • Cluster bonus — +15 when three or more different people bought, +8 for two. Several insiders buying independently is a materially stronger signal than one person buying a lot.
  • Recency — decays linearly from full weight within 30 days to 0.55 at a year. A purchase 300 days ago is not news.
  • Floor at 45 — the result is compressed into 45–100 rather than cut off there. A real open-market purchase never scores below Moderate.
  • Sell-only — a flat 20. Deliberately crude: insiders sell for a hundred reasons and buy for one.
  • No filings — Unknown. It does not count against the stock.

Insider carries the most weight because an open-market purchase with personal money is the hardest of the three signals to fake.

Pillar 2 — Analyst valuation (30%)

Two parts, weighted across whatever is available.

  • Rating (45%) — the provider's 1–5 consensus, where 5 is Strong Buy. All-hold is 3.0 in practice, so that is the realistic floor rather than 0; the rating is stretched across 3.0–5.0 to use the full range.
  • Forward P/E (55%) — continuous: 8 or below scores 100, 40 or above scores 0, straight line between.
  • Thin coverage drops the rating's weight to 0.25. That fires at two analysts or fewer and at none at all — nobody covering is less evidence than two people covering, not more.
  • No analyst, no target price. The provider sometimes returns a price target with no rating behind it. Without a count we treat it as absent, so an unsourced number cannot end up carrying a trade setup.

Pillar 3 — Market behaviour (25%)

Tradability: average daily volume as a percentage of market cap, on a log curve.

Daily turnoverScore
0.5%20 (Low)
1%40
2%60
3%72 (Strong)
8%100

Position against the 200-day average and within the 52-week range appear in the written explanation but do not feed the score. This pillar measures whether you can get in and out, not which way the price is heading.

Putting it together

Weights are 45% insider, 30% valuation, 25% market. A pillar that is Unknown does not count; the remaining weights are redistributed proportionally so that missing coverage does not drag a score down artificially. pillarsUsed (0 to 3) is reported alongside every score, and it matters — see what the score cannot tell you.

No trustworthy price, no score

Before anything is weighted, the price has to hold up. If it does not, the score comes back Unknown with zero pillars used and the row is not stored at all.

This exists because of a real failure. A dual-listed stock arrived at $8,743 while it traded at $28.15 — the Tel Aviv price in agorot, on the US symbol. The market pillar divides volume times price by a market cap that did not move with it, so that pillar went from 0 to 100 and the score to 100. It led the dashboard and the daily email.

Three tests, each catching what the others cannot:

TestCatchesThreshold
Jump detectionan unexplained leap in the series that no split or dividend accounts for5× in one day
Scale checka series uniformly in the wrong unit, where there is no jump to findprice against market cap ÷ shares, 50×
Implied share countthe same, without a share countfewer than 500,000 implied shares

Both thresholds were calibrated against all 1,280 stored rows rather than guessed. Share classes, where the reported share count belongs to the other class, reach factors of 9 to 13; the agorot error reached 336. The lowest genuine implied share count in the data is 1.53 million against that stock's 41,000.

The whole score drops rather than just the market pillar, because nulling the derived figures alone leaves the valuation pillar free to score 100 on its own — and that pillar leans on a forward P/E the provider derived from the same wrong price. That is not a second opinion, it is the same error counted twice.

Stored rows are re-checked when they are read, not only when they are written: the provider can correct itself later, and the snapshot will not.

An unvalidated weighting

The recalibration of September 2026 made the three pillars comparable to each other — before it, no stock in the entire universe could score above 72. It did not demonstrate that the score predicts anything. The weights are a defensible argument, not a measured result.