Anatomy of the GeoPulse composite index: how to summarise the markets in a single 0–100 score
When you open the GeoPulse dashboard, the first thing you see is a circular gauge with a number: the composite index. A 0-to-100 score meant to tell you, at a glance, where markets stand between panic and euphoria.
It's tempting to treat that score as a black box. We prefer to open it. Here's exactly what it's made of, how we compute it, and why we made these choices rather than others.
What the number represents
Inverted scale, like the classic Fear & Greed:
- 0–20: Extreme Fear — the contrarian's buy signal
- 20–40: Fear — significant tensions, elevated volatility
- 40–60: Neutral — normal conditions
- 60–80: Greed — appetite for risk, complacency
- 80–100: Extreme Greed — caution warranted, possible excess
The score does not tell you what to buy. It tells you which market regime you're in — and which past regime today's conditions most resemble.
The five sub-scores and their weights
The composite is a weighted average of five independent components. We publish the exact weights:
| Component | Default weight | What it captures |
|---|---|---|
| Geopolitical calm | 25% | International tensions, conflicts, sanctions (inverted risk scale) |
| Sentiment | 20% | Crypto Fear & Greed (source: Alternative.me) |
| Financial stress | 20% | VIX, financial stress (STLFSI4), 2y/10y yield curve |
| Cross-asset momentum | 20% | % of assets up over 24h |
| Abnormal volatility | 15% | Dispersion of daily moves |
Why these weights specifically? Because we observed, in backtests, that geopolitics is the dominant driver of extreme regimes (25% reflects that role), and that pure volatility, while informative, is too noisy to weigh more without distorting the signal (hence 15%).
These are documented choices, not constants set in stone. If market behaviour changes structurally, the weights will too.
Sub-score 1: Geopolitical calm (25%)
We start from the raw geopolitical risk (0–10 scale) computed by aggregating our scored events (NLP + rules-based) over recent days. An event like "Russia announces nuclear escalation" scores high; "successful diplomatic summit" scores low.
To align with the global index direction (where 100 = greed, 0 = fear), we invert the scale in the composite. Hence the "Geopolitical calm" label on the dashboard, which is the mirror of risk.
Formula: score = (10 - raw_risk) × 10. Geopolitical risk of 10/10 yields 0 (extreme fear); 0/10 yields 100 (greed).
It's the most qualitative component, so the most exposure-prone to error. We weight it heaviest anyway, because in practice it's what precedes major reversals (2008 was not foreseen by volatility; the Ukraine invasion was foreseen by geopolitical indicators as early as November 2021). The raw risk remains shown separately in the "Geopolitical risk" panel of the dashboard if you'd rather think on the non-inverted scale.
ℹ️ Declared series break, October 2026. The risk index ranks the last 24 hours — mean event severity (40 %), count of severe events (30 %), volatility (30 %) — against the days of the last 12 months. But our news collection changed on 13 September 2026 (two sources withdrawn for lack of a licence, NewsData.io plugged in), then, on 15 October, its hourly coverage (the European morning restored) and its scoring (a temporary back-up model). Those 12 months therefore mix two collections: as of 17 October, 201 of the 236 days in the reference carry a withdrawn source. Days from the new collection are scored less severe on average (median 2.28 [2.19 ; 2.41] over 31 days, against 3.18 [3.05 ; 3.28] over 152; our scoring model had also changed in early September, and the two effects cannot be told apart): an ordinary day of the new collection ranks 1/10 for severity against the current reference (236 days), against 4.7/10 within its own collection (34 days). Re-ranked without the withdrawn sources, the index served from 4 to 15 October would have been 1.0 point [0.8 ; 1.3] higher on average (n = 12 days, 9,533 computations) — and this sub-score lower by as much (10 sub-score points per index point). We declare it rather than correct it: the gap will fade as the former collection leaves the window, by October 2027, and until then values are not strictly comparable from one period to the next. The measurement report.
Sub-score 2: Sentiment (20%)
One widely followed indicator:
- Crypto Fear & Greed (source: Alternative.me) — derived from volumes, momentum, Google trends, BTC dominance
We don't reconstruct this indicator from scratch: recomputing it locally would add no value.
Update, 24 September 2026. This sub-score used to average in the CNN Fear & Greed (7 sub-indicators of US equity markets). We removed it: the source we read it from does not allow commercial use. Composite values before that date mix both indices — that is a series break, and we declare it rather than smooth it over.
Edge case: if the index is unavailable, the sub-score is 50 (neutral). That is a limitation, and we would rather state it.
Sub-score 3: Financial stress (20%)
The most "quantitative" component, aggregating three well-established stress signals:
VIX (S&P 500 implied volatility):
stress = 100 - (VIX - 10) × 2.7
→ VIX at 10 → stress = 100 (extreme calm)
→ VIX at 25 → stress ≈ 60 (moderate tension)
→ VIX at 40 → stress = 19 (panic)
STLFSI4 (St. Louis Fed Financial Stress Index), read as a percentile rank over the last 520 weeks — a rolling ten years:
- in its highest decile for the decade (P ≥ 90) → tight conditions → -15 points
- above its decade median (P ≥ 50) → mildly tight → -5 points
- below that → accommodative conditions → +5 points
The threshold is relative, by design: "stress is in its highest decile in ten years" is readable without knowing the index's scale, whereas an absolute cutoff depends on how the index was built. Until the ten-year window is complete, this component contributes nothing — an undefined rank beats a guessed one.
ℹ️ Method change, September 2026. This component previously used the Chicago Fed's
NFCI, whose licence does not permit our use. The break was measured before the switch and published: the two calculations agree on 73.1 % of weeks since 2003, for a mean gap of 0.25 point on the index (n = 1,183 weeks). Values before that date are therefore not strictly comparable to later ones.
2y/10y curve:
- Inverted (spread < 0) → -20 points (historic recession signal)
- Flattened (spread between 0 and 0.3%) → -10 points
- Normal → no penalty
Methodological note: the 2y/10y curve isn't a perfect oracle. It inverted in 2022 without an immediate 2023 recession. But it remains one of the empirically most robust signals over 50 years of US data. We keep it, weighted so it doesn't dominate alone.
Sub-score 4: Cross-asset momentum (20%)
The question is simple: of the assets we track, how many are up over the last 24 hours?
Formula: (# assets up / # active assets) × 100.
A non-trivial detail: we exclude assets whose feed is frozen (24h change exactly 0). On weekends, TradFi markets (S&P, gold, VIX, DXY, etc.) have no new data — Yahoo returns Friday's last quote. If we counted them as "not up", the momentum score would collapse artificially to 16–25% every weekend.
So we only count assets with a live signal — typically BTC and ETH on weekends, and all engine assets on weekdays.
This kind of technical detail is the difference between an indicator that works 5 days a week and one that works permanently.
Sub-score 5: Abnormal volatility (15%)
Average of the absolute 24h moves across all assets:
vol = mean(|24h_change_i|)
score = 80 - vol × 14
clamped between 10 and 80
- Average move of 0% → score 80 (calm)
- Average move of 2% → score 52 (tensions)
- Average move of 5%+ → score 10 (extreme vol)
Why only 15% weight? Because volatility can be symmetric — a big rally and a big crash both produce strong absolute volatility, but they don't tell the same story. Momentum (sub-score 4) complements by giving direction.
What the index does not do
Transparency obliges us to spell out its limits:
- It doesn't predict: it's a regime indicator, not an entry/exit signal. A score of 15 ("extreme fear") means current conditions resemble historical extreme-fear moments — not that the market will bounce tomorrow.
- It smooths: aggregating five components dampens the signal. A violent move on a single component can be diluted by stability in the others. That's why we also display individual sub-scores — you can click each to see its history.
- It's retrospective: the data consumed is minutes to hours old depending on the asset. The index reflects the recent past, not the exact present.
How to use it
A few rules we apply ourselves:
- Don't just look at the global number. Look at which components diverge. A composite of 45 with a geopolitical sub-score of 20 and momentum of 75 tells a different story than a composite of 45 where everything sits at 45.
- Extremes are more informative than middle zones. A score of 10 or 90 deserves attention; a score of 52 is noise.
- Compare to historical context. On the dashboard, the composite history is one click away — that's where the magic happens. "The score is at 22" means something completely different if last week it was at 60 versus if it's been at 22 for three months.
Calibrate the composite to your style (Premium)
The 25/20/20/20/15 weights are our default, calibrated on historical market behaviour. But your reading may differ: an options trader prioritises volatility, a macro investor looks at the yield curve first, a geopolitical investor wants risk in the lead.
Since version 1.8, Premium subscribers can adjust the five weights individually from the /account area. Five sliders, sum-to-100% constraint, and a live preview of the recomputed score: you see immediately how the current composite would shift from 52 to 48 if you gave 35% to financial stress instead of 20%.
Same formula, same engine — you only touch your own reading. Your custom weights don't modify the public index; they create your alternative composite, computed in real time on the same data.
See the composite live
The index recomputes every hour from the freshest data available. You can consult it, alongside its five sub-scores, directly from the dashboard. Each sub-score is clickable: you see its evolution over recent weeks and the regime it's currently in.
Transparency is a form of discipline. Publishing the methodology forces us to stay consistent with it — and gives you the tools to judge for yourself whether our reading of the markets makes sense.
GeoPulse
Follow the markets with GeoPulse
GeoPulse correlates geopolitical events with financial markets using AI analysis of every event.
Create a free account