OG Score Methodology
How the OG Market Desk Score is calculated — a multi-factor approach to market sentiment analysis.
Overview
The OG Score is a composite sentiment indicator ranging from -100 (extreme fear/bearish) to +100 (extreme greed/bullish). It combines 7 weighted factors that each independently assess a different dimension of market sentiment. When a factor lacks sufficient data, its weight is automatically redistributed to the remaining active factors — the score never fabricates a reading to fill a gap.
What we publish, and what we don't
We publish every factor in the model, every data source behind it, every safeguard that protects it, and — below — every change we have ever made to how the score is computed. What we don't publish are the exact weightings, formulas, and calibration constants.
Two reasons. The calibration — tuned against months of recorded market data — is the proprietary core of the product. And a fully published parameter set is a gameable one: a score whose exact triggers are public can be manufactured. Factor-level transparency with proprietary calibration is the same standard long used by established scoring systems in finance.
Factor Breakdown
Listed roughly in order of influence. Price action and news carry the heaviest weights; no single factor can dominate the composite.
Blends today's move with the year-to-date trend, so a single bad day doesn't fully overwhelm a strong performer — and a strong day doesn't mask a long decline. Falls back to daily-only when YTD data is unavailable.
Direction-aware volume conviction: today's trading volume against the stock's own rolling average, credited in the direction price actually moved. Heavy volume confirms whichever way the tape went — a surge on a green day reads as buying conviction, the same surge on a red day reads as selling pressure.
The average tone of news articles tagged to the ticker. Articles arrive pre-classified with sentiment grades; ungraded articles are excluded so they can't dilute the signal toward zero. SEC filings are deliberately kept out of this factor — they live in their own tab so the article count here matches what the News tab shows. Every article is also archived, so coverage persists even after a source rotates it off its recent feed.
The tone of the investor conversation on X and Reddit over the last 24 hours, blended in proportion to where the engagement actually is. Thin conversations are pulled toward neutral by a volume-confidence discount — a handful of posts can't produce an extreme reading, so one viral tweet can't impersonate a crowd. Confirmed-unreliable provider data is quarantined outright rather than scored.
Where the current price sits within its 52-week high/low range. Stocks near their highs carry momentum-regime sentiment; stocks near their lows carry the opposite.
The average daily move of every other stock in the same sector, capturing sector-wide trends and rotation independent of the ticker's own tape. Deliberately band-limited so one rough sector day (already reflected in Price Momentum) doesn't crush the factor.
The week-over-week rate of change in the score itself — is sentiment building or fading? Compares today's reading against the ticker's recorded snapshot from about a week ago. Shows "Building momentum data..." until enough history exists.
How the factors combine
- Each factor independently produces a bounded reading, so no single input can blow out the composite.
- Factors are combined as a weighted average. The weights are proprietary, fixed across all tickers, and every change to them is versioned in the changelog below.
- A factor with no data drops out and its weight redistributes across the active factors — the "Active Factors" badge on each stock shows how many of the 7 contributed.
- Momentum is computed after the other factors, from them — never from itself.
BTC OG Score
Bitcoin gets its own four-factor model on the dashboard tracker — distinct from the per-stock score above because the relevant signals are different (no sector peers, no analyst coverage, but a market-wide Fear & Greed reading).
Fear & Greed
The market-wide Crypto Fear & Greed Index, normalized to the OG Score range — the broad sentiment regime the whole asset class is trading in.
News Sentiment
Average tone of explicitly Bitcoin-about journalism — company press releases that merely mention BTC are filtered out, because miner and treasury PR is signal on those companies' pages, noise here. Reads live only: when an article rotates off the topic feed, it leaves the score immediately.
Price Momentum
24-hour BTC price change, normalized to the score range.
Volume
Direction-aware volume conviction, mirroring the stock factor: 24-hour volume against Bitcoin's own rolling monthly baseline, credited in the direction of the price move. Distinguishes heavy buying conviction, heavy selling pressure, thin rallies, and light selling.
Additional Signals
Divergence Detection
When the OG Score disagrees with price action by a significant margin, a divergence is flagged. Bullish divergence: price is down meaningfully while sentiment holds clearly positive. Bearish divergence: price is up meaningfully while sentiment reads clearly negative.
Signal Strength
Measures factor agreement. Strong: a clear majority of active factors agree on direction. Moderate: mixed but leaning. Weak: the factors genuinely disagree.
Missing Data Handling
When a factor lacks data (e.g., no news articles found), its weight is set to zero and the remaining factors' weights are automatically normalized. The "Active Factors" badge on each stock shows how many of the 7 factors had available data.
Data Pipeline & Resilience
Refresh Cadence
Stock quotes refresh every few minutes through the dashboard cache. Social and news data are re-warmed on multiple scheduled cycles through the day, throttled to stay inside upstream rate limits, and a daily sentiment snapshot is recorded after U.S. market close for momentum comparisons and the public validation research.
Data-Quality Safeguards
Bad data is refused, not smoothed over. Snapshots that fail integrity checks — a provider feed that desynchronizes, collapses to implausible volume, or stops updating while the underlying conversation keeps moving — are never written to history, and a confirmed-unreliable social feed is quarantined from the score entirely until it recovers, with its weight redistributed. Every write is audited nightly against what actually landed in the database.
Persistence & Fallback
Per-ticker news, social snapshots, and spike alerts are persisted with a rolling retention. When the live source is unreachable (rate limited, outage, or a freshly-listed ticker before its first refresh), the page falls back to the most recent persisted snapshot so it never renders blank. The BTC tracker is the one exception — it reads strictly live, so rotated-off articles disappear from the score immediately.
Spike Alerts
Each daily refresh runs a delta-detection pass against the rolling history. For every tracked metric (mentions, creators, engagements, social dominance) the current value is compared against 7-day, 30-day, and 90-day averages; a significant deviation fires an alert that shows on the ticker's social panel. Tickers without enough baseline history are skipped rather than guessed at.
Methodology Changelog
current: v1.4.0Every change to how the score is computed is recorded here, in plain language, when it ships. Entries marked “backfill” were reconstructed from commit history when versioning was introduced. How well does the score line up with what happens next? See the validation research →
- 2026-07-16v1.4.0
News Sentiment coverage fix: the nightly snapshot now scores the same article set ticker pages already use (adding the pre-graded per-ticker news feed to the wire/RSS pool), and everywhere the factor is computed, only articles published in the last 72 hours count toward it. The news tab still displays 30 days; the score reads the current narrative. No formula changed — the factor was active on roughly 4 of 67 tickers per day before this; coverage rises sharply from today.
Why: A news sentiment factor that silently sat out for 60+ tickers a day measured nothing; and month-old articles should inform research, not today's score.
- 2026-07-07v1.3.1
Nightly history snapshots now include the Social Sentiment factor. It has been live on the site since May 7, but the recording job was still passing no social data, so daily history rows silently redistributed its weight. No factor math changed.
Why: Recorded history should reflect the same score the site computes; analyses of factor history should segment at this date.
- 2026-06-12v1.3.0
Methodology versioning introduced; daily snapshots now record the version that produced them. No factor math changed.
Why: So score history can be segmented by methodology era and the validation page never mixes eras silently.
- 2026-06-02v1.2.1 (backfill)
Per-factor scores and weights began being recorded with each daily snapshot. No factor math changed.
Why: Instrumentation for measuring each factor’s predictive value before considering any weight changes.
- 2026-06-01v1.2.1 (backfill)
Sentiment Momentum factor repaired after a week of missing baselines (May 26 – June 1).
Why: A data gap, not a design change — noted so history from that week is read with care.
- 2026-05-26v1.2.0 (backfill)
Six-factor base score began being recorded alongside the total, enabling week-over-week Sentiment Momentum.
Why: Momentum needs a stable baseline that excludes itself.
- 2026-05-07v1.1.0 (backfill)
Social Sentiment factor enabled, backed by LunarCrush (X + Reddit), with low-volume scores shrunk toward neutral.
Why: A handful of posts shouldn’t swing a stock’s score; shrinkage keeps thin social data honest.
- 2026-02-19v1.0.0 (backfill)
Daily score snapshots began. Seven-factor model with the published weights.
Why: Start of the recorded history used everywhere on this site.