Control Room/MSI/Methodology

Transparency · methodology

How the MSI is computed

The MSI — the Monitoring Situation Index — is one live number from 0.0 to 10.0 for how much is happening in the world right now. This page documents exactly what the computation does: its inputs, its weights, the scale, the cadence, the history it keeps, and — just as important — what the number does not claim. It is written against the live code, so it describes the endpoint as it actually runs.

Reflects the live computation as of 2026-07-24.

The formula

The MSI is a weighted sum of five signals. Each signal is normalised to a 0–1 range, multiplied by a fixed weight, summed, and scaled to a 0–10 score. The weights are fixed in the code and sum to 1.0.

MSI = 10 × (
    0.25 · volume       // log-scaled headline count
  + 0.30 · velocity     // rate of change vs baseline
  + 0.15 · spread       // independent reporting sources
  + 0.10 · sentiment    // average negative tone
  + 0.20 · cross_corr   // markets + seismic, coincident
)

The result is rounded to one decimal place. Every component is clamped to 0–1 before it is weighted, so no single signal can push the score outside 0.0–10.0.

The five inputs

Volume

weight 0.25

Input: GDELT 2.0 headline count (last 1h)

log10(1 + article_count) / log10(51), clamped to 0–1. About 50 matching headlines an hour reads near 1.0.

Velocity

weight 0.30

Input: Recent MSI history vs current volume

Current volume compared against the trailing average of stored samples, mapped to 0–1. Neutral (0.5) until at least three samples exist.

Spread

weight 0.15

Input: Unique GDELT source domains

distinct_domains / 15, clamped to 0–1. More independent outlets reporting pushes it up.

Sentiment

weight 0.10

Input: Average GDELT tone

(5 − average_tone) / 10, clamped to 0–1. GDELT tone runs roughly −10…+10; more negative tone reads higher.

Cross-correlation

weight 0.20

Input: CoinGecko crypto move + USGS earthquakes

crypto_volatility / 8 + quake_count / 10, clamped to 0–1. Combines the average absolute 24h move of BTC and ETH with the count of M4.5+ earthquakes in the last 24h.

What the live index reads today

To keep this page honest, we document only the feeds the live /api/msi endpoint actually queries when it recomputes:

  • GDELT 2.0 — global headline volume, unique source domains, and average tone over the last hour.
  • CoinGecko — the 24h percentage move of Bitcoin and Ethereum (used, in absolute terms, for the cross-correlation signal).
  • USGS — the count of magnitude-4.5-or-greater earthquakes in the last 24 hours.

The velocity signal is derived from the index's own stored history, not a separate feed. All inputs are free, public, commercial-use-OK sources. We list only what the current endpoint queries — no private data, no opinions.

Cadence and history

Scale

0.0 – 10.0

Rounded to one decimal

Cadence

Every 60s

Server + CDN cache TTL

History

Rolling 24h

1,440 samples, then trimmed

The reading is recomputed at most once every 60 seconds: each value is cached server-side for 60s, and the CDN serves it with a matching 60-second freshness window. Each new reading is appended to a rolling history capped at 1,440 samples — exactly 24 hours at one sample per minute — after which the oldest samples are trimmed. In production the history is persisted in Redis so it survives cold starts; in local development it falls back to an in-memory store.

0–2 · Calm

Nothing unusual happening.

2–4 · Background

Normal activity. Minor stories.

4–6 · Active

Meaningful events developing.

6–8 · Escalating

Multiple concurrent active situations.

8–10 · Intense

Major unfolding event(s) dominating signals.

What the MSI does not claim

  • It is not a forecast. It reads the present from public signals; it does not predict what happens next.
  • It is not advice — not financial, legal, or betting advice, and not a recommendation to take any action.
  • It does not price or rate any single market, asset, or event. It is one aggregate reading of public signals.
  • It is not a market-sentiment score. The "sentiment" input is average news tone from GDELT, not an opinion about any market.
  • When an upstream feed is unavailable, the endpoint returns the last cached reading or a neutral mid-band value so the display never breaks. That fallback is a display safeguard, not a measurement.

Related

The MSI is an observable index of public signals · information, not advice